8 #include "StFcsTrgQaMaker.h"
10 #include "StRoot/StEvent/StEvent.h"
11 #include "StRoot/St_base/StMessMgr.h"
12 #include "StRoot/StEvent/StTriggerData.h"
13 #include "StRoot/StEvent/StFcsCollection.h"
14 #include "StRoot/StEvent/StFcsHit.h"
15 #include "StRoot/StEvent/StFcsCluster.h"
16 #include "StRoot/StFcsDbMaker/StFcsDb.h"
17 #include "StRoot/StSpinPool/StFcsTriggerSimMaker/StFcsTriggerSimMaker.h"
19 #include "StRoot/RTS/src/TRG_FCS/fcs_trg_base.h"
29 StFcsTrgQaMaker::StFcsTrgQaMaker(
const Char_t* name) :
StMaker(name) {};
31 StFcsTrgQaMaker::~StFcsTrgQaMaker(){};
33 Int_t StFcsTrgQaMaker::Init(){
34 mFcsDb =
static_cast< StFcsDb*
>(GetDataSet(
"fcsDb"));
36 LOG_FATAL <<
"Error finding StFcsDb"<< endm;
41 LOG_FATAL <<
"Error finding StFcsTrgSimMaker"<< endm;
46 LOG_FATAL <<
"Error finding fcs_trg_base from StFcsTrgSimMaker"<< endm;
52 sprintf(mFilename,
"%d/%d.trgQa.root",yday,mRun);
53 }
else if(mFilename==0){
54 char* fname =
"fcs.trgqa.root";
57 printf(
"StFcsTrgQaMaker::Init - Opening %s\n",mFilename);
58 mFile=
new TFile(mFilename,
"RECREATE");
60 const char* NS[2]={
"N",
"S"};
61 const char* JP[5]={
"A",
"B",
"C",
"D",
"E"};
63 mTow[0] =
new TH2F(
"ETow",
"Ecal; +-col; -row",22*2+1,-22.5,22.5,34,-34.5,-0.5);
64 mTow[1] =
new TH2F(
"HTow",
"Hcal; +-col; -row",13*2+1,-13.5,13.5,20,-20.5,-0.5);
66 mETot[0] =
new TH1F(
"ETotN",
"ETotN", 256,0,512);
67 mETot[1] =
new TH1F(
"ETotS",
"ETotS", 256,0,512);
68 mHTot[0] =
new TH1F(
"HTotN",
"HTotN", 256,0,256);
69 mHTot[1] =
new TH1F(
"HTotS",
"HTotS", 256,0,256);
71 mEHT[0] =
new TH1F(
"EHTN" ,
"MAX EHT", 256,0,256);
72 mEHT[1] =
new TH1F(
"EHTS" ,
"MAX EHT", 256,0,256);
73 mEHTMap =
new TH2F(
"EHTMap",
"MAX E2x2Map",21,-10.5,10.5,16,-16.5,-0.5);
74 mHHT[0] =
new TH1F(
"HHTN" ,
"MAX HHT", 256,0,256);
75 mHHT[1] =
new TH1F(
"HHTS" ,
"MAX HHT", 256,0,256);
76 mHHTMap =
new TH2F(
"HHTMap",
"MAX H2x2Map",13,-6.5,6.5,10,-10.5,-0.5);
78 for(
int ns=0; ns<2; ns++){
79 for(
int j=0; j<5; j++){
80 mJP[ns][j] =
new TH1F(Form(
"JP%1s_%1s",JP[j],NS[ns]),
81 Form(
"JP%1s_%1s",JP[j],NS[ns]),256,0,512);
84 mJPMap[0] =
new TH1F(
"JP2",Form(
"JP2 THR A=%d,BC=%d,DE=%d",trg->JPATHR2,trg->JPBCTHR2,trg->JPDETHR2),11,-5.5,5.5);
85 mJPMap[1] =
new TH1F(
"JP1",Form(
"JP1 THR A=%d,BC=%d,DE=%d",trg->JPATHR1,trg->JPBCTHR1,trg->JPDETHR1),11,-5.5,5.5);
86 mJPMap[2] =
new TH1F(
"JP0",Form(
"JP0 THR A=%d,BC=%d,DE=%d",trg->JPATHR0,trg->JPBCTHR0,trg->JPDETHR0),11,-5.5,5.5);
88 mE4x4 =
new TH1F(
"E4x4",
"MAX E4x4", 256,0,256);
89 mEM4x4 =
new TH1F(
"EM4x4",
"MAX EM4x4", 256,0,256);
90 mELE4x4 =
new TH1F(
"ELE4x4",
"MAX ELE4x4", 256,0,256);
91 mERatio =
new TH1F(
"EMRatio",
"MAX EM Ratio=E/(E+Hmax)", 64,0,1.05);
92 mELERatio =
new TH1F(
"ELERatio",
"MAX ELE Ratio=E/(E+Hmax)", 64,0,1.05);
94 mH4x4 =
new TH1F(
"H4x4",
"MAX H4x4", 256,0,256);
95 mEH4x4 =
new TH1F(
"EH4x4",
"MAX E+H4x4", 256,0,256);
96 mHAD4x4 =
new TH1F(
"HAD4x4",
"MAX Had4x4", 256,0,256);
97 mHRatio =
new TH1F(
"HRatio",
"MAX E+H Ratio=E/(E+H)", 64,0,1.05);
98 mHADRatio =
new TH1F(
"HADRatio",
"MAX Had Ratio=E/(E+H)", 64,0,1.05);
100 mE4x4Map[0] =
new TH2F(
"EM4x4MapEM2", Form(
"EM EM2=%d",trg->EMTHR2), 19,-9.5,9.5,15,-15.5,-0.5);
101 mE4x4Map[1] =
new TH2F(
"EM4x4MapEM1", Form(
"EM EM1=%d",trg->EMTHR1), 19,-9.5,9.5,15,-15.5,-0.5);
102 mE4x4Map[2] =
new TH2F(
"EM4x4MapEM0", Form(
"EM EM0=%d",trg->EMTHR0), 19,-9.5,9.5,15,-15.5,-0.5);
103 mE4x4Map[3] =
new TH2F(
"EM4x4MapELE2", Form(
"EM ELE2=%d",trg->ELETHR2),19,-9.5,9.5,15,-15.5,-0.5);
105 mELE4x4Map[0] =
new TH2F(
"ELE4x4MapELE2",Form(
"ELE ELE2=%d",trg->ELETHR2), 19,-9.5,9.5,15,-15.5,-0.5);
106 mELE4x4Map[1] =
new TH2F(
"ELE4x4MapELE1",Form(
"ELE ELE1=%d",trg->ELETHR1), 19,-9.5,9.5,15,-15.5,-0.5);
108 mEH4x4Map[0] =
new TH2F(
"EHMapHAD2", Form(
"E+H HAD2=%d",trg->HADTHR2), 19,-9.5,9.5,15,-15.5,-0.5);
109 mEH4x4Map[1] =
new TH2F(
"EHMapHAD1", Form(
"E+H HAD1=%d",trg->HADTHR1), 19,-9.5,9.5,15,-15.5,-0.5);
110 mEH4x4Map[2] =
new TH2F(
"EHMapHAD0", Form(
"E+H HAD0=%d",trg->HADTHR0), 19,-9.5,9.5,15,-15.5,-0.5);
112 mDsmOut =
new TH1F(
"DsmOut",
"DsmOut",33,0,33);
113 mDepOut =
new TH1F(
"DepOut",
"DepOut",33,0,33);
114 mTcuBit =
new TH1F(
"TcuBit",
"TcuBit",33,0,33);
115 mTcuDep =
new TH1F(
"TcuDep",
"TcuDepMismatch",33,0,33);
116 mSimDep =
new TH1F(
"SimDep",
"SimDepMismatch",33,0,33);
118 const float maxadc=500;
119 mAdc[0]=
new TH2F(
"EN_Id_Adc",
"EcalNorth; Id; ADC",mFcsDb->
maxId(0),0.0,mFcsDb->
maxId(0),500,0.0,maxadc);
120 mAdc[1]=
new TH2F(
"ES_Id_Adc",
"EcalSouth; Id; ADC",mFcsDb->
maxId(1),0.0,mFcsDb->
maxId(1),500,0.0,maxadc);
121 mAdc[2]=
new TH2F(
"HN_Id_Adc",
"HcalNorth; Id; ADC",mFcsDb->
maxId(2),0.0,mFcsDb->
maxId(2),500,0.0,maxadc);
122 mAdc[3]=
new TH2F(
"HS_Id_Adc",
"HcalSouth; Id; ADC",mFcsDb->
maxId(3),0.0,mFcsDb->
maxId(3),500,0.0,maxadc);
123 mAdc[4]=
new TH2F(
"PN_Id_Adc",
"PresNorth; Id; ADC",mFcsDb->
maxId(4),0.0,mFcsDb->
maxId(4),500,0.0,maxadc);
124 mAdc[5]=
new TH2F(
"PS_Id_Adc",
"PresSouth; Id; ADC",mFcsDb->
maxId(5),0.0,mFcsDb->
maxId(5),500,0.0,maxadc);
131 LOG_FATAL <<
"Error finding fcs_trg_base from StFcsTrgSimMaker"<< endm;
139 LOG_INFO <<
"No StEvent found" << endm;
141 fcs=
event->fcsCollection();
144 LOG_INFO <<
"No StFcsCollection found" << endm;
147 if(fcs->isDataExist()==0) {
148 LOG_INFO <<
"No FCS data in this event" << endm;
160 LOG_ERROR <<
"could not get StTriggerData from DataSet."<<endm;
164 LOG_ERROR <<
"could not get StTriggerData DataSet."<<endm;
168 unsigned int tcubit = trgd->lastDSM(2) + (trgd->lastDSM(5)<<16);
171 for(
int i=0; i<32; i++) if((tcubit >> i) & 0x1) mTcuBit->Fill(i);
174 unsigned int dsmout=trg->dsmout;
175 for(
int i=0; i<32; i++) if((dsmout >> i) & 0x1) mDsmOut->Fill(i);
181 int nhit=fcs->numberOfHits(det);
182 StSPtrVecFcsHit& hits = fcs->hits(det);
184 for (
int i=0; i<nhit; i++){
185 int ehp = hits[i]->ehp();
186 int ns = hits[i]->ns();
187 int dep = hits[i]->dep();
188 int ch = hits[i]->channel();
190 if(dep==0 && (ch==4 || ch==5) ){
191 int ntb = hits[i]->nTimeBin();
192 for(
int j=0; j<ntb; j++){
193 int adc = hits[i]->adc(j);
194 unsigned short tb = hits[i]->timebin(j);
196 if(tb!=mS3off)
continue;
197 if(ch==4) depout += adc;
198 if(ch==5) depout += (adc << 8);
201 if(dep==1 && ch==36){
202 int ntb = hits[i]->nTimeBin();
203 for(
int j=0; j<ntb; j++){
204 int adc = hits[i]->adc(j);
205 unsigned short tb = hits[i]->timebin(j);
207 if(tb!=mS2off)
continue;
208 if(ns==0) depout += (adc&0xff) << 16;
209 if(ns==1) depout += (adc&0xff) << 24;
213 for(
int i=0; i<32; i++) if((depout >> i) & 0x1) mDepOut->Fill(i);
215 const char* BIT[32]={
"HAD0",
"HAD1",
"HAD2",
217 "JP2",
"JPA1",
"JPBC1",
"JPDE1",
"JPA0",
"JPBC0",
"JPDE0",
218 "DiJP",
"DiJPAsy",
"DiELEA",
219 "ELE0-N",
"ELE1-N",
"ELE2-N",
"EM3-N",
"EHT-N",
"HHT-N",
"ETOT-N",
"HTOT-N",
220 "ELE0-S",
"ELE1-S",
"ELE2-S",
"EM3-S",
"EHT-S",
"HHT-S",
"ETOT-S",
"HTOT-S"};
222 LOG_INFO << Form(
"FCSBits SIM = %08x ",dsmout);
223 for(
int i=0; i<32; i++){
if((dsmout>>i)&1) {LOG_INFO << BIT[i] <<
" ";} } LOG_INFO<<endm;
224 LOG_INFO << Form(
"FCSBits DEP = %08x ",depout);
225 for(
int i=0; i<32; i++){
if((depout>>i)&1) {LOG_INFO << BIT[i] <<
" ";} } LOG_INFO<<endm;
226 LOG_INFO << Form(
"FCSBits TCU = %08x ",tcubit);
227 for(
int i=0; i<32; i++){
if((tcubit>>i)&1) {LOG_INFO << BIT[i] <<
" ";} } LOG_INFO<<endm;
231 LOG_INFO << Form(
"FCSBitsMM DEP-TCU Mismatch ");
232 for(
int i=0; i<32; i++) if(((depout>> i)&1) != ((tcubit>>i)&1)) {mTcuDep->Fill(i); LOG_INFO << BIT[i] <<
" ";}
234 LOG_INFO << Form(
"FCSBitsMM SIM-DEP Mismatch ");
235 for(
int i=0; i<32; i++) if(((dsmout >>i)&1) != ((depout>>i)&1)) {mSimDep->Fill(i); LOG_INFO << BIT[i] <<
" ";}
239 for(
int det=0; det<4; det++){
240 int nhit=fcs->numberOfHits(det);
241 StSPtrVecFcsHit& hits = fcs->hits(det);
242 for (
int i=0; i<nhit; i++){
243 int id = hits[i]->id();
244 int ehp = hits[i]->ehp();
245 int ns = hits[i]->ns();
248 float cc = c * (ns*2-1);
250 mTow[ehp]->Fill(cc,rr,hits[i]->energy());
256 int maxns2,maxc2,maxr2;
257 int maxns3,maxc3,maxr3;
258 int maxns4,maxc4,maxr4;
259 int maxns5,maxc5,maxr5;
261 for(
int ns=0; ns<kFcsNorthSouth; ns++){
263 for(
int c=0; c<kFcsEcal4x4NCol+1; c++){
264 for(
int r=0; r<kFcsEcal4x4NRow+1; r++){
265 if(trg->e2x2[ns][r][c]>max){
266 max=trg->e2x2[ns][r][c]; maxr=r; maxc=c;
272 mEHTMap->Fill((maxc+1)*(ns*2-1),-maxr-1);
277 for(
int ns=0; ns<kFcsNorthSouth; ns++){
279 for(
int c=0; c<kFcsHcal4x4NCol+1; c++){
280 for(
int r=0; r<kFcsHcal4x4NRow+1; r++){
281 if(trg->h2x2[ns][r][c]>max){
282 max=trg->h2x2[ns][r][c]; maxr=r; maxc=c;
288 mHHTMap->Fill((maxc+1)*(ns*2-1),-maxr-1);
293 mETot[0]->Fill(trg->etot[0]);
294 mETot[1]->Fill(trg->etot[1]);
297 mHTot[0]->Fill(trg->htot[0]);
298 mHTot[1]->Fill(trg->htot[1]);
301 for(
int ns=0; ns<kFcsNorthSouth; ns++){
302 for(
int j=0; j<5; j++){
303 if(trg->jet[ns][j]>max){
304 mJP[ns][j]->Fill(trg->jet[ns][j]);
305 if((trg->d_out.s2[ns].s2_to_s3[0].d[1]>>j)&0x1) mJPMap[0]->Fill((j+1)*(ns*2-1));
306 if((trg->d_out.s2[ns].s2_to_s3[1].d[1]>>j)&0x1) mJPMap[1]->Fill((j+1)*(ns*2-1));
307 if((trg->d_out.s2[ns].s2_to_s3[0].d[2]>>j)&0x1) mJPMap[2]->Fill((j+1)*(ns*2-1));
313 for(
int ns=0; ns<kFcsNorthSouth; ns++){
315 int emmax=0, elemax=0, summax=0, hadmax=0;
316 for(
int c=0; c<kFcsEcal4x4NCol; c++){
317 for(
int r=0; r<kFcsEcal4x4NRow; r++){
318 int esum=trg->esum[ns][r][c];
319 int sum=trg->sum[ns][r][c];
321 max=esum; maxns=ns; maxr=r; maxc=c;
323 if(esum>emmax && trg->ratiomax[ns][r][c] > 1.0/(1.0+(
float)trg->EM_HERATIO_THR/128)){
324 emmax=esum; maxns2=ns; maxr2=r; maxc2=c;
326 if(esum>elemax && trg->ratiomax[ns][r][c] > 1.0/(1.0+(
float)trg->EM_HERATIO_THR/128) && trg->epdcoin[ns][r][c]){
327 elemax=esum; maxns3=ns; maxr3=r; maxc3=c;
330 summax=sum; maxns4=ns; maxr4=r; maxc4=c;
332 if(sum>hadmax && trg->ratio[ns][r][c] < 1.0/(1.0+(
float)trg->HAD_HERATIO_THR/128)){
333 hadmax=sum; maxns5=ns; maxr5=r; maxc5=c;
335 int cc=(c+1)*(ns*2-1);
337 if(esum > trg->EMTHR2) mE4x4Map[0]->Fill(cc,rr);
338 if(esum > trg->EMTHR1) mE4x4Map[1]->Fill(cc,rr);
339 if(esum > trg->EMTHR0) mE4x4Map[2]->Fill(cc,rr);
340 if(esum > trg->ELETHR2) mE4x4Map[3]->Fill(cc,rr);
341 if(trg->epdcoin[ns][r][c]){
342 if(esum > trg->ELETHR2) mELE4x4Map[0]->Fill(cc,rr);
343 if(esum > trg->ELETHR1) mELE4x4Map[1]->Fill(cc,rr);
345 if(sum > trg->HADTHR2) mEH4x4Map[0]->Fill(cc,rr);
346 if(sum > trg->HADTHR1) mEH4x4Map[1]->Fill(cc,rr);
347 if(sum > trg->HADTHR0) mEH4x4Map[2]->Fill(cc,rr);
350 if(max>0) mE4x4->Fill(max);
351 if(emmax>0) mEM4x4->Fill(emmax);
352 if(elemax>0) mELE4x4->Fill(elemax);
353 if(summax>0) mEH4x4->Fill(summax);
354 if(hadmax>0) mHAD4x4->Fill(summax);
355 if(max>0) mERatio->Fill(trg->ratiomax[maxns][maxr][maxc]);
356 if(elemax>0) mELERatio->Fill(trg->ratiomax[maxns3][maxr3][maxc3]);
357 if(summax>0) mHRatio->Fill(trg->ratio[maxns4][maxr4][maxc4]);
358 if(hadmax>0) mHADRatio->Fill(trg->ratio[maxns5][maxr5][maxc5]);
361 for(
int det=0; det<kFcsNDet; det++){
362 StSPtrVecFcsHit& hits = fcs->hits(det);
363 int nh=fcs->numberOfHits(det);
364 for(
int i=0; i<nh; i++) mAdc[det]->Fill(hits[i]->
id(),(
float)hits[i]->adcSum());
373 printf(
"StFcsTrgQaMaker::Finish - Closing %s\n",mFilename);
int getColumnNumber(int det, int id) const
get the row number for the channel
int getRowNumber(int det, int id) const
maximum number of id
int maxId(int det) const
number of column
virtual TObject * GetObject() const
The depricated method (left here for the sake of the backward compatibility)