1 #if !defined(__CINT__) || defined(__MAKECINT__)
7 #include <TClassTable.h>
18 #include "AliRunLoader.h"
20 #include "STEER/ESD/AliESDEvent.h"
21 #include "STEER/ESD/AliESDZDC.h"
24 void CheckAlienZDCESD(Int_t year=2010, const char* period="10f",
25 Int_t nRun=0, Int_t recoPass=1, Int_t nMaxFiles=1,
26 Bool_t plot=kFALSE, Bool_t esdWordCut=kFALSE)
30 printf("\n\n YOU MUST PROVIDE A RUN NUMBER!!! \n\n");
34 // Histogram definition
35 // ----------------------------------------------------------------
36 TH2F *centroidZNsideC = new TH2F("centroidZNsideC","Impact point over ZNC",100,-3.5,3.5,100,-3.5,3.5);
37 centroidZNsideC->SetXTitle("X_{ZNC} (cm)");
38 centroidZNsideC->SetYTitle("Y_{ZNC} (cm)");
39 TH2F * centroidZNsideA = new TH2F("centroidZNsideA","Impact point over ZNA",100,-3.5,3.5,100,-3.5,3.5);
40 centroidZNsideA->SetXTitle("X_{ZNA} (cm)");
41 centroidZNsideA->SetYTitle("Y_{ZNA} (cm)");
42 TH1F * enZNC = new TH1F("enZNC", "ZNC signal",100,0.,2000.);
43 enZNC->SetXTitle("E (GeV)");
44 TH1F * enZPC = new TH1F("enZPC", "ZPC signal",100,0.,2000.);
45 enZPC->SetXTitle("E (GeV)");
46 TH1F * enZNA = new TH1F("enZNA", "ZNA signal",100,0.,2000.);
47 enZNA->SetXTitle("E (GeV)");
48 TH1F * enZPA = new TH1F("enZPA", "ZPA signal",100,0.,2000.);
49 enZPA->SetXTitle("E (GeV)");
50 TH1D * enZEM1 = new TH1D("enZEM1", "Energy in ZEM1",100,0.,2000.);
51 enZEM1->SetXTitle("E (GeV)");
52 TH1D * enZEM2 = new TH1D("enZEM2", "Energy in ZEM2",100,0.,2000.);
53 enZEM2->SetXTitle("E (GeV)");
54 // ----------------------------------------------------------------
55 TH1D * hZNCTow[5]; TH1D * hZPCTow[5];
56 TH1D * hZNATow[5]; TH1D * hZPATow[5];
57 char nomehistznc[30], nomehistzpc[30], nomehistzna[30], nomehistzpa[30];
58 for(Int_t i=0; i<5; i++){
59 sprintf(nomehistznc,"ZNC-pm%d",i);
60 hZNCTow[i] = new TH1D(nomehistznc, nomehistznc, 100, 0.,1200.);
61 sprintf(nomehistzpc,"ZPC-pm%d",i);
62 hZPCTow[i] = new TH1D(nomehistzpc, nomehistzpc, 100, 0.,1200.);
63 sprintf(nomehistzna,"ZNA-pm%d",i);
64 hZNATow[i] = new TH1D(nomehistzna, nomehistzna, 100, 0.,1200.);
65 sprintf(nomehistzpa,"ZPA-pm%d",i);
66 hZPATow[i] = new TH1D(nomehistzpa, nomehistzpa, 100, 0.,1200.);
69 TH1F *hESDword = new TH1F("hESDword","hESDword",6,0.5,6.5);
70 hESDword->SetXTitle("ZDC trigger pattern");
73 // ----------------------------------------------------------------
75 // ----------------------------------------------------------------
77 for(Int_t itdc=0; itdc<11; itdc++){
79 if(itdc==0) hTDC[itdc] = new TH1F("TDCZNC", "TDC ZNC", 200, -150., 50.);
80 else if(itdc==1) hTDC[itdc] = new TH1F("TDCZNA", "TDC ZNA", 200, -150., 50.);
81 else if(itdc==2) hTDC[itdc] = new TH1F("TDCL0", "TDC L0", 100, 250., 350.);
82 else if(itdc==3) hTDC[itdc] = new TH1F("TDCADCgate", "TDC ADCgate", 100, 500., 600.);
83 else if(itdc==4) hTDC[itdc] = new TH1F("TDCZNsum", "TDC ZNsum", 60, -100., -40.);
84 else if(itdc==5) hTDC[itdc] = new TH1F("TDCZNdiff", "TDC ZNdiff", 60, -30., 30.);
85 else if(itdc==6) hTDC[itdc] = new TH1F("TDCZPC", "TDC ZPC", 200, -150., 50.);
86 else if(itdc==7) hTDC[itdc] = new TH1F("TDCZPA", "TDC ZPA", 200, -150., 50.);
87 else if(itdc==8) hTDC[itdc] = new TH1F("TDCZEM1", "TDC ZEM1", 200, -150., 50.);
88 else if(itdc==9) hTDC[itdc] = new TH1F("TDCZEM2", "TDC ZEM2", 200, -150., 50.);
89 else if(itdc==10) hTDC[itdc] = new TH1F("TDCorZN", "TDC OR ZN", 400, -150., 50.);
91 hTDC[itdc]->SetXTitle("TDC (ns)");
94 TH2F *hDebunch = new TH2F("hDebunch","hDebunch",240,-30.,30.,240,-30.,30.);
95 hDebunch->SetYTitle("t_{ZNC}+t_{ZNA} (ns)");
96 hDebunch->SetXTitle("t_{ZNC}-t_{ZNA} (ns)");
99 for(Int_t itdc=0; itdc<4; itdc++){
100 if(itdc==0) hTDCcorr[itdc] = new TH1F("TDCZNCcorr", "TDC ZNC corr", 200, -100., 100.);
101 else if(itdc==1) hTDCcorr[itdc] = new TH1F("TDCZNAcorr", "TDC ZNA corr", 200, -100., 100.);
102 else if(itdc==2) hTDCcorr[itdc] = new TH1F("TDCDiffcorr", "TDC Diff corr", 100, -50., 50.);
103 else if(itdc==3) hTDCcorr[itdc] = new TH1F("TDCSumcorr", "TDC Sum corr", 100, -50., 50.);
105 hTDCcorr[itdc]->SetXTitle("TDC (ns)");
108 TGrid::Connect("alien:",0,0,"t");
109 gSystem->Exec(Form("gbbox find \"/alice/data/%d/LHC%s/000%d/ESDs/pass%d\" \"AliESDs.root\" > ESDFiles.txt",
110 year, period, nRun, recoPass));
111 //gSystem->Exec(Form("gbbox find \"/alice/data/%d/LHC%s/000%d/ESDs/hlt_clustering\" \"AliESDs.root\" > ESDFiles.txt",
112 // year, period, nRun));
113 FILE* listruns=fopen("ESDFiles.txt","r");
115 char esdFileName[200], filnamalien[200];
116 char yperiod, dirESD;
118 Int_t nAnalyzedFiles=0;
119 Int_t nevPhys=0, nevZNC=0, nevZPC=0, nevZNA=0, nevZPA=0, nevZEM1=0, nevZEM2=0;
121 while(!feof(listruns)){
123 if(nAnalyzedFiles!=nMaxFiles){
125 int st = fscanf(listruns,"%s\n",esdFileName);
126 Char_t directory[100];
127 sprintf(directory,"/alice/data/%d",year);
128 if(!strstr(esdFileName,directory)) continue;
129 sscanf(esdFileName,"/alice/data/%d/LHC%s/000%d/ESDs/pass%d/%s/AliESDs.root",&year,&yperiod,&nRun,&recoPass,&dirESD);
130 //sscanf(esdFileName,"/alice/data/%d/LHC%s/000%d/ESDs/hlt_clustering/%s/AliESDs.root",&year,&yperiod,&nRun,&dirESD);
131 sprintf(filnamalien,"alien://%s",esdFileName);
132 printf("\n Opening file: %s\n",filnamalien);
135 TFile* esdFile = TFile::Open(filnamalien);
137 Error("CheckZDCESD", "opening ESD file %s failed",filnamalien);
141 AliESDEvent* esd = new AliESDEvent();
142 TTree* tree = (TTree*) esdFile->Get("esdTree");
144 Error("CheckZDCESD", "No ESD tree found");
148 tree->SetBranchStatus("*", 0);
149 tree->SetBranchStatus("AliESDHeader*", 1);
150 tree->SetBranchStatus("AliESDRun*", 1);
151 tree->SetBranchStatus("AliESDZDC*", 1);
152 tree->SetBranchStatus("PrimaryVertex*", 1);
153 tree->SetBranchStatus("SPDVertex*", 1);
154 tree->SetBranchStatus("AliESDVZERO*", 1);
156 esd->ReadFromTree(tree);
158 Int_t nevents = (Int_t)tree->GetEntries();
159 printf("\n No. of events in ESD tree = %d\n", nevents);
160 for(Int_t iEvent=0; iEvent<nevents; iEvent++){
161 // get the event summary data
162 tree->GetEvent(iEvent);
165 if(esd->GetEventType() == 7){
167 Error("CheckESD", "no ESD object found for event %d", iEvent);
171 Double_t sumQznc=0., sumQzpc=0., sumQzna=0., sumQzpa=0.;
173 AliESDZDC *esdZDC = esd->GetESDZDC();
174 //printf(" ev.%d \n",nevPhys);
179 Double_t centrZNC[2]={-999.,-999.}, centrZNA[2]={-999.,-999.};
180 esdZDC->GetZNCentroidInPbPb(2760.,centrZNC, centrZNA);
182 Double_t energyZNC = esdZDC->GetZDCN1Energy();
183 Double_t energyZPC = esdZDC->GetZDCP1Energy();
184 Double_t energyZNA = esdZDC->GetZDCN2Energy();
185 Double_t energyZPA = esdZDC->GetZDCP2Energy();
186 Double_t energyZEM1 = esdZDC->GetZDCEMEnergy(0);
187 Double_t energyZEM2 = esdZDC->GetZDCEMEnergy(1);
188 const Double_t * towZNC = esdZDC->GetZN1TowerEnergy();
189 const Double_t * towZPC = esdZDC->GetZP1TowerEnergy();
190 const Double_t * towZNA = esdZDC->GetZN2TowerEnergy();
191 const Double_t * towZPA = esdZDC->GetZP2TowerEnergy();
192 UInt_t iWord = esdZDC->GetESDQuality();
194 if((iWord & 0x00000001) == 0x00000001){
198 if((iWord & 0x00000002) == 0x00000002){
202 if((iWord & 0x00000004) == 0x00000004){
206 if((iWord & 0x00000008) == 0x00000008){
210 if((iWord & 0x00000010) == 0x00000010){
214 if((iWord & 0x00000020) == 0x00000020){
218 enZNC->Fill(energyZNC);
219 enZPC->Fill(energyZPC);
220 enZNA->Fill(energyZNA);
221 enZPA->Fill(energyZPA);
222 enZEM1->Fill(energyZEM1);
223 enZEM2->Fill(energyZEM2);
225 for(Int_t jj=0; jj<5; jj++){
227 if((iWord & 0x00000010) == 0x00000010) hZNCTow[jj]->Fill(towZNC[jj]);
228 if((iWord & 0x00000020) == 0x00000020) hZPCTow[jj]->Fill(towZPC[jj]);
229 if((iWord & 0x00000001) == 0x00000001) hZNATow[jj]->Fill(towZNA[jj]);
230 if((iWord & 0x00000002) == 0x00000002) hZPATow[jj]->Fill(towZPA[jj]);
233 hZNCTow[jj]->Fill(towZNC[jj]);
234 hZPCTow[jj]->Fill(towZPC[jj]);
235 hZNATow[jj]->Fill(towZNA[jj]);
236 hZPATow[jj]->Fill(towZPA[jj]);
241 if((iWord & 0x00000010) == 0x00000010) sumQznc += towZNC[jj];
242 if((iWord & 0x00000020) == 0x00000020) sumQzpc += towZPC[jj];
243 if((iWord & 0x00000001) == 0x00000001) sumQzna += towZNA[jj];
244 if((iWord & 0x00000002) == 0x00000002) sumQzpa += towZPA[jj];
247 sumQznc += towZNC[jj];
248 sumQzpc += towZPC[jj];
249 sumQzna += towZNA[jj];
250 sumQzpa += towZPA[jj];
256 if(centrZNA[0]!=-999. && centrZNA[1]!=-999) centroidZNsideA->Fill(centrZNA[0], centrZNA[1], towZNA[0]);
257 if(centrZNC[0]!=-999. && centrZNC[1]!=-999) centroidZNsideC->Fill(centrZNC[0], centrZNC[1], towZNC[0]);
259 if((iWord & 0x00000010) == 0x00000010) {
260 hSumQZNC->Fill(sumQznc);
263 if((iWord & 0x00000020) == 0x00000020) {
264 hSumQZPC->Fill(sumQzpc);
269 hSumQZNC->Fill(sumQznc);
271 hSumQZPC->Fill(sumQzpc);
274 hSumQZNA->Fill(sumQzna);
275 hSumQZPA->Fill(sumQzpa);
278 Int_t tdcData[32][4];
279 Float_t tdcCorr[32][4];
280 for(int ij=0; ij<32; ij++){
281 for(int ik=0; ik<4;ik++){
282 tdcData[ij][ik] = 9999.;
283 tdcCorr[ij][ik] = -9999./0.025;
286 Float_t tdcC=-9999./0.025, tdcA=-9999./0.025, tdcGate=-9999./0.025, tdcL0=-9999./0.025;
287 Float_t tdcDiff=-9999./0.025, tdcSum=-9999./0.025;
288 Float_t tdcZPC=-9999./0.025, tdcZPA=-9999./0.025;
289 Float_t tdcZEM1=-9999./0.025, tdcZEM2=-9999./0.025;
290 Float_t tdcZNCcorr=-9999./0.025, tdcZNAcorr=-9999./0.025;
292 for(Int_t itdc=0; itdc<21; itdc++){
293 for(Int_t j=0; j<4; j++){
295 tdcData[itdc][j] = esdZDC->GetZDCTDCData(itdc, j);
296 if(tdcData[itdc][j] == 0.) continue; //change in 9999
298 //printf(" TDC ch.%d hit %d: %f ns\n",itdc,j,0.025*esdZDC->GetZDCTDCData(itdc, j));
299 tdcCorr[itdc][j] = esdZDC->GetZDCTDCCorrected(itdc, j);
300 //printf(" %f ns\n",esdZDC->GetZDCTDCCorrected(itdc, j));
301 if(itdc==12 && j==0 && (tdcData[10][0]!=0. && tdcData[12][0]!=0.)){ //change in 9999!!!
302 tdcDiff = esdZDC->GetZDCTimeDiff();
303 tdcSum = esdZDC->GetZDCTimeSum();
306 if(itdc==8 && tdcData[itdc][j]!=0.){
307 tdcZEM1 = 0.025*(tdcData[itdc][j]);
309 else if(itdc==9 && tdcData[itdc][j]!=0.){
310 tdcZEM2 = 0.025*(tdcData[itdc][j]);
312 else if(itdc==10 && tdcData[itdc][j]!=0.){
313 tdcC = 0.025*(tdcData[itdc][j]);
314 tdcZNCcorr = tdcCorr[itdc][j];
315 hTDCcorr[0]->Fill(tdcZNCcorr);
317 else if(itdc==11 && tdcData[itdc][j]!=0.){
318 tdcZPC = 0.025*(tdcData[itdc][j]);
320 else if(itdc==12 && tdcData[itdc][j]!=0.){
321 tdcA = 0.025*(tdcData[itdc][j]);
322 tdcZNAcorr = tdcCorr[itdc][j];
323 hTDCcorr[1]->Fill(tdcZNAcorr);
325 else if(itdc==13 && tdcData[itdc][j]!=0.){
326 tdcZPA = 0.025*(tdcData[itdc][j]);
328 else if(itdc==14 && tdcData[itdc][j]!=0.){
329 tdcGate = 0.025*tdcData[itdc][j];
330 hTDC[3]->Fill(tdcGate);
332 else if(itdc==15 && tdcData[itdc][j]!=0.){
333 tdcL0 = 0.025*tdcData[itdc][j];
334 hTDC[2]->Fill(tdcL0);
336 if(tdcC!=-9999./0.025) hTDC[0]->Fill(tdcC-tdcL0);
337 if(tdcA!=-9999./0.025) hTDC[1]->Fill(tdcA-tdcL0);
338 if(tdcZPC!=-9999./0.025) hTDC[6]->Fill(tdcZPC-tdcL0);
339 if(tdcZPA!=-9999./0.025) hTDC[7]->Fill(tdcZPA-tdcL0);
340 if(tdcZEM1!=-9999./0.025) hTDC[8]->Fill(tdcZEM1-tdcL0);
341 if(tdcZEM2!=-9999./0.025) hTDC[9]->Fill(tdcZEM2-tdcL0);
342 if(tdcC!=-9999./0.025 && tdcA!=-9999./0.025 && tdcL0!=-9999./0.025){
345 hTDC[4]->Fill(tdcC+tdcA);
346 hTDC[5]->Fill(tdcC-tdcA);
347 //printf(" TDCdata: sum %f diff %f ", tdcC+tdcA, tdcC-tdcA);
348 //hDebunch->Fill(tdcC-tdcA+2.1, tdcC+tdcA+65.5);
350 if(tdcZNAcorr!=-9999./0.025 && tdcZNCcorr!=-9999./0.025 && tdcL0!=-9999./0.025){
351 hTDCcorr[2]->Fill(tdcZNCcorr-tdcZNAcorr);
352 hTDCcorr[3]->Fill(tdcZNCcorr+tdcZNAcorr);
353 hDebunch->Fill(tdcDiff, tdcSum);
354 //printf(" TDCcorr: sum %f diff %f (ns) \n", tdcSum, tdcDiff);
357 else if(itdc==18 && tdcData[itdc][j]!=0.){
358 hTDC[10]->Fill(0.025*tdcData[itdc][j]-tdcL0);
371 }//if(nAnalyzedFiles<=nMaxFiles)
373 printf("\t %d files analyzed\n\n",nMaxFiles);
378 /* printf(" No. of events over threshold: ZNA: %d ZPA: %d ZEM1: %d "
379 " ZEM2: %d ZNC: %d ZPC: %d\n\n",
380 nevZNA, nevZPA, nevZEM1, nevZEM2, nevZNC, nevZPC);*/
382 TFile * fileout = new TFile("ESDhistos.root","recreate");
384 centroidZNsideC->Write();
385 centroidZNsideA->Write();
392 for(Int_t jj=0; jj<5; jj++){
393 hZNCTow[jj]->Write();
394 hZPCTow[jj]->Write();
395 hZNATow[jj]->Write();
396 hZPATow[jj]->Write();
404 for(Int_t jj=0; jj<11; jj++) hTDC[jj]->Write();
405 for(Int_t jj=0; jj<4; jj++) hTDCcorr[jj]->Write();
410 //***********************************************************
411 // #### ROOT initialization
413 gStyle->SetCanvasColor(10);
414 gStyle->SetFrameFillColor(10);
415 gStyle->SetOptTitle(1);
416 if(esdWordCut) gStyle->SetOptStat(1111111);
417 else gStyle->SetOptStat(1111);
418 gStyle->SetOptFit(0);
419 gStyle->SetTitleTextColor(4);
420 gStyle->SetStatTextColor(4);
421 gStyle->SetStatX(0.92);
422 gStyle->SetStatY(0.92);
423 gStyle->SetLineColor(1);
424 gStyle->SetPalette(1);
425 gStyle->SetPadTopMargin(0.04);
426 gStyle->SetPadRightMargin(0.04);
427 gStyle->SetPadBottomMargin(0.14);
428 gStyle->SetPadLeftMargin(0.16);
431 //-------------------------------------------------
432 TCanvas *c1 = new TCanvas("c1","ZDCs + ZEMs signals",400,0,500,800);
437 enZNC->SetLineColor(kBlue);
438 enZNC->SetFillColor(kBlue);
442 enZPC->SetLineColor(kBlue+3);
443 enZPC->SetFillColor(kBlue+3);
446 enZEM1->SetLineColor(kRed);
447 enZEM1->SetFillColor(kRed);
451 enZEM2->SetLineColor(kRed);
452 enZEM2->SetFillColor(kRed);
457 enZNA->SetLineColor(kRed);
458 enZNA->SetFillColor(kRed);
462 enZPA->SetLineColor(kRed+1);
463 enZPA->SetFillColor(kRed+1);
465 //-------------------------------------------------
466 TCanvas *c3 = new TCanvas("c3","Side C ZDCs",0,0,800,400);
470 hZNCTow[0]->SetLineColor(kBlue);
471 hZNCTow[0]->SetFillColor(kBlue);
472 hZNCTow[0]->Draw("");
475 hZNCTow[1]->SetLineColor(kBlue);
476 hZNCTow[1]->SetFillColor(kBlue);
477 hZNCTow[1]->Draw("");
480 hZNCTow[2]->SetLineColor(kBlue);
481 hZNCTow[2]->SetFillColor(kBlue);
482 hZNCTow[2]->Draw("");
485 hZNCTow[3]->SetLineColor(kBlue);
486 hZNCTow[3]->SetFillColor(kBlue);
487 hZNCTow[3]->Draw("");
490 hZNCTow[4]->SetLineColor(kBlue);
491 hZNCTow[4]->SetFillColor(kBlue);
492 hZNCTow[4]->Draw("");
496 hZPCTow[0]->SetLineColor(kBlue+3);
497 hZPCTow[0]->SetFillColor(kBlue+3);
498 hZPCTow[0]->Draw("");
501 hZPCTow[1]->SetLineColor(kBlue+3);
502 hZPCTow[1]->SetFillColor(kBlue+3);
503 hZPCTow[1]->Draw("");
506 hZPCTow[2]->SetLineColor(kBlue+3);
507 hZPCTow[2]->SetFillColor(kBlue+3);
508 hZPCTow[2]->Draw("");
511 hZPCTow[3]->SetLineColor(kBlue+3);
512 hZPCTow[3]->SetFillColor(kBlue+3);
513 hZPCTow[3]->Draw("");
516 hZPCTow[4]->SetLineColor(kBlue+3);
517 hZPCTow[4]->SetFillColor(kBlue+3);
518 hZPCTow[4]->Draw("");
521 //-------------------------------------------------
522 TCanvas *c32 = new TCanvas("c32","side A ZDCs",700,0,800,400);
526 hZNATow[0]->SetLineColor(kRed);
527 hZNATow[0]->SetFillColor(kRed);
528 hZNATow[0]->Draw("");
531 hZNATow[1]->SetLineColor(kRed);
532 hZNATow[1]->SetFillColor(kRed);
533 hZNATow[1]->Draw("");
536 hZNATow[2]->SetLineColor(kRed);
537 hZNATow[2]->SetFillColor(kRed);
538 hZNATow[2]->Draw("");
541 hZNATow[3]->SetLineColor(kRed);
542 hZNATow[3]->SetFillColor(kRed);
543 hZNATow[3]->Draw("");
546 hZNATow[4]->SetLineColor(kRed);
547 hZNATow[4]->SetFillColor(kRed);
548 hZNATow[4]->Draw("");
552 hZPATow[0]->SetLineColor(kRed+1);
553 hZPATow[0]->SetFillColor(kRed+1);
554 hZPATow[0]->Draw("");
557 hZPATow[1]->SetLineColor(kRed+1);
558 hZPATow[1]->SetFillColor(kRed+1);
559 hZPATow[1]->Draw("");
562 hZPATow[2]->SetLineColor(kRed+1);
563 hZPATow[2]->SetFillColor(kRed+1);
564 hZPATow[2]->Draw("");
567 hZPATow[3]->SetLineColor(kRed+1);
568 hZPATow[3]->SetFillColor(kRed+1);
569 hZPATow[3]->Draw("");
572 hZPATow[4]->SetLineColor(kRed+1);
573 hZPATow[4]->SetFillColor(kRed+1);
574 hZPATow[4]->Draw("");
576 //-------------------------------------------------
577 TCanvas *c4 = new TCanvas("c4","TDCs",400,0,700,500);
580 hTDC[1]->SetFillColor(kPink); hTDC[1]->SetLineColor(kPink);
583 hTDC[3]->SetFillColor(kPink+4); hTDC[3]->SetLineColor(kPink+4);
586 hTDC[5]->SetFillColor(kGreen); hTDC[5]->SetLineColor(kGreen);
589 hTDC[7]->SetFillColor(kGreen+2); hTDC[7]->SetLineColor(kGreen+2);
592 hTDC[8]->SetFillColor(kAzure); hTDC[8]->SetLineColor(kAzure);
595 hTDC[9]->SetFillColor(kAzure+5); hTDC[9]->SetLineColor(kAzure+5);