11 // TODO read number of bits from AliVEvent?
13 #define NMAXCLASSES 100
15 TString bitNames[NBITS] = {
47 void SetHisto(TH1D* h);
48 void SetHisto(TH2D* h);
49 void AddFillSeparationLines(TH1D* h, map<Int_t,Int_t> &fills);
51 //void periodLevelQA(TString inputFileName ="/afs/cern.ch/work/a/aliqaevs/www/data/2012/LHC12h/pass1/trending.root"){
52 void periodLevelQA(TString inputFileName ="trending.root"){
53 gStyle->SetOptStat(0);
54 gStyle->SetLineScalePS(1.5);
55 gStyle->SetPadGridX(0);
56 gStyle->SetPadGridY(1);
58 TFile* f = new TFile(inputFileName.Data());
59 TTree* t = (TTree*) f->Get("trending");
60 TObjArray* classes = new TObjArray();
61 TObjString* activeDetectors = new TObjString();
64 Double_t run_duration = 0;
65 Int_t nBCsPerOrbit = 0;
68 Double_t lumi_seen = 0;
69 Double_t interactionRate = 0;
70 ULong64_t class_l0b[NMAXCLASSES] = {0};
71 ULong64_t class_l0a[NMAXCLASSES] = {0};
72 ULong64_t class_l1b[NMAXCLASSES] = {0};
73 ULong64_t class_l1a[NMAXCLASSES] = {0};
74 ULong64_t class_l2b[NMAXCLASSES] = {0};
75 ULong64_t class_l2a[NMAXCLASSES] = {0};
76 Double_t class_lifetime[NMAXCLASSES] = {0};
77 Double_t class_lumi[NMAXCLASSES] = {0};
78 ULong64_t alias_recorded[NBITS] = {0};
79 ULong64_t alias_reconstructed[NBITS] = {0};
80 ULong64_t alias_accepted[NBITS] = {0};
81 Double_t alias_l0b_rate[NBITS] = {0};
82 Double_t alias_lifetime[NBITS] = {0};
83 Double_t alias_lumi_recorded[NBITS] = {0};
84 Double_t alias_lumi_reconstructed[NBITS] = {0};
85 Double_t alias_lumi_accepted[NBITS] = {0};
87 t->SetBranchAddress("run",&run);
88 t->SetBranchAddress("fill",&fill);
89 t->SetBranchAddress("bcs",&nBCsPerOrbit);
90 t->SetBranchAddress("run_duration",&run_duration);
91 t->SetBranchAddress("mu",&mu);
92 t->SetBranchAddress("interactionRate",&interactionRate);
93 t->SetBranchAddress("refl0b",&refl0b);
94 t->SetBranchAddress("lumi_seen",&lumi_seen);
95 t->SetBranchAddress("classes",&classes);
96 t->SetBranchAddress("class_l0b",&class_l0b);
97 t->SetBranchAddress("class_l0a",&class_l0a);
98 t->SetBranchAddress("class_l1b",&class_l1b);
99 t->SetBranchAddress("class_l1a",&class_l1a);
100 t->SetBranchAddress("class_l2b",&class_l2b);
101 t->SetBranchAddress("class_l2a",&class_l2a);
102 t->SetBranchAddress("class_lifetime",&class_lifetime);
103 t->SetBranchAddress("class_lumi",&class_lumi);
104 t->SetBranchAddress("alias_recorded",&alias_recorded);
105 t->SetBranchAddress("alias_reconstructed",&alias_reconstructed);
106 t->SetBranchAddress("alias_accepted",&alias_accepted);
107 t->SetBranchAddress("alias_l0b_rate",&alias_lifetime);
108 t->SetBranchAddress("alias_lifetime",&alias_lifetime);
109 t->SetBranchAddress("alias_lumi_recorded",&alias_lumi_recorded);
110 t->SetBranchAddress("alias_lumi_reconstructed",&alias_lumi_reconstructed);
111 t->SetBranchAddress("alias_lumi_accepted",&alias_lumi_accepted);
112 t->SetBranchAddress("activeDetectors",&activeDetectors);
114 Int_t nRuns = t->GetEntries();
115 TH2D* hClassL0BvsRun = new TH2D("hClassL0BVsRun","Class L0B vs run",nRuns,0,nRuns,1,0,1);
116 TH2D* hClassL2AvsRun = new TH2D("hClassL2AVsRun","Class L2A vs run",nRuns,0,nRuns,1,0,1);
117 TH2D* hClassLifetimeVsRun = new TH2D("hClassLifetimeVsRun","Lifetime class-by-class vs run",nRuns,0,nRuns,1,0,1);
118 TH2D* hClassLumiVsRun = new TH2D("hClassLumiVsRun","Luminosity class-by-class vs run",nRuns,0,nRuns,1,0,1);
119 hClassL0BvsRun->SetBit(TH1::kCanRebin);
120 hClassL2AvsRun->SetBit(TH1::kCanRebin);
121 hClassLifetimeVsRun->SetBit(TH1::kCanRebin);
122 hClassLumiVsRun->SetBit(TH1::kCanRebin);
123 for (Int_t r=0;r<nRuns;r++){
125 printf("run=%i\n",run);
126 hClassL0BvsRun->GetXaxis()->SetBinLabel(r+1,Form("%i",run));
127 hClassL2AvsRun->GetXaxis()->SetBinLabel(r+1,Form("%i",run));
128 hClassLifetimeVsRun->GetXaxis()->SetBinLabel(r+1,Form("%i",run));
129 hClassLumiVsRun->GetXaxis()->SetBinLabel(r+1,Form("%i",run));
130 for (Int_t i=0;i<classes->GetEntriesFast();i++){
131 TString className = classes->At(i)->GetName();
132 if (className.Contains("-A-")) continue;
133 else if (className.Contains("-C-")) continue;
134 else if (className.Contains("-E-")) continue;
135 else if (className.Contains("-AC-")) continue;
136 else if (className.Contains("-ACE-")) continue;
137 else if (className.Contains("-GA-")) continue;
138 else if (className.Contains("-GC-")) continue;
139 else if (className.Contains("1A-ABCE-")) continue;
140 else if (className.Contains("1C-ABCE-")) continue;
141 else if (className.Contains("C0LSR-ABCE-")) continue;
142 // printf("%30s %12lli %10lli %10lli %10lli %10lli %10lli\n",className.Data(),L0B[i],L0A[i],L1B[i],L1A[i],L2B[i],L2A[i]);
143 hClassL0BvsRun->Fill(Form("%i",run),className.Data(),Double_t(class_l0b[i]));
144 hClassL2AvsRun->Fill(Form("%i",run),className.Data(),Double_t(class_l2a[i]));
145 hClassLifetimeVsRun->Fill(Form("%i",run),className.Data(),class_lifetime[i]);
146 hClassLumiVsRun ->Fill(Form("%i",run),className.Data(),class_lumi[i]);
150 hClassL0BvsRun->LabelsDeflate("Y");
151 hClassL2AvsRun->LabelsDeflate("Y");
152 hClassLifetimeVsRun->LabelsDeflate("Y");
153 hClassLumiVsRun->LabelsDeflate("Y");
155 map<Int_t,Int_t> fills;
156 TH1D* hRecorded[NBITS] = {0x0};
157 TH1D* hReconstructed[NBITS] = {0x0};
158 TH1D* hAccepted[NBITS] = {0x0};
159 TH1D* hRejected[NBITS] = {0x0};
160 TH1D* hAcceptedFraction[NBITS] = {0x0};
161 TH1D* hRejectedFraction[NBITS] = {0x0};
162 TH1D* hLumiRecorded[NBITS] = {0x0};
163 TH1D* hLumiReconstructed[NBITS] = {0x0};
164 TH1D* hLumiAccepted[NBITS] = {0x0};
166 TH2D* hActiveDetectors = new TH2D("hActiveDetectors","Active detectors",nRuns,0,nRuns,AliDAQ::kNDetectors,0,AliDAQ::kNDetectors);
167 TH1D* hInteractionRate = new TH1D("hInteractionRate","Minimum bias interaction rate [Hz]",nRuns,0,nRuns);
168 TH1D* hMu = new TH1D("hMu","Average number of minimum bias collisions per BC",nRuns,0,nRuns);
169 TH1D* hBCs = new TH1D("hBCs","Number of colliding bunches",nRuns,0,nRuns);
170 TH1D* hDuration = new TH1D("hDuration","Duration, s",nRuns,0,nRuns);
171 TH1D* hLumiSeen = new TH1D("hLumiSeen","Luminosity seen, nb-1",nRuns,0,nRuns);
173 for (Int_t iDet=0;iDet<AliDAQ::kNDetectors;iDet++) {
174 // if (!TString(AliDAQ::DetectorName(iDet)).CompareTo("HLT")) continue;
175 // else if (!TString(AliDAQ::DetectorName(iDet)).CompareTo("TRG")) continue;
176 // else if (!TString(AliDAQ::DetectorName(iDet)).CompareTo("MFT")) continue;
177 // else if (!TString(AliDAQ::DetectorName(iDet)).CompareTo("FIT")) continue;
178 // else if (!TString(AliDAQ::DetectorName(iDet)).CompareTo("CPV")) continue;
179 // else if (!TString(AliDAQ::DetectorName(iDet)).CompareTo("DAQ_TEST")) continue;
180 hActiveDetectors->GetYaxis()->SetBinLabel(iDet+1,AliDAQ::DetectorName(iDet));
183 for (Int_t r=0;r<nRuns;r++){
185 hActiveDetectors->GetXaxis()->SetBinLabel(r+1,Form("%i",run));
186 hInteractionRate->GetXaxis()->SetBinLabel(r+1,Form("%i",run));
187 hMu->GetXaxis()->SetBinLabel(r+1,Form("%i",run));
188 hBCs->GetXaxis()->SetBinLabel(r+1,Form("%i",run));
189 hDuration->GetXaxis()->SetBinLabel(r+1,Form("%i",run));
190 hLumiSeen->GetXaxis()->SetBinLabel(r+1,Form("%i",run));
191 for (Int_t iDet=0;iDet<AliDAQ::kNDetectors;iDet++) {
192 // if (!TString(AliDAQ::DetectorName(iDet)).CompareTo("HLT")) continue;
193 // else if (!TString(AliDAQ::DetectorName(iDet)).CompareTo("TRG")) continue;
194 // else if (!TString(AliDAQ::DetectorName(iDet)).CompareTo("MFT")) continue;
195 // else if (!TString(AliDAQ::DetectorName(iDet)).CompareTo("FIT")) continue;
196 // else if (!TString(AliDAQ::DetectorName(iDet)).CompareTo("CPV")) continue;
197 // else if (!TString(AliDAQ::DetectorName(iDet)).CompareTo("DAQ_TEST")) continue;
198 hActiveDetectors->Fill(Form("%i",run),AliDAQ::DetectorName(iDet),activeDetectors->String().Contains(AliDAQ::DetectorName(iDet)));
200 hInteractionRate->SetBinContent(r+1,interactionRate);
201 hMu->SetBinContent(r+1,mu);
202 hBCs->SetBinContent(r+1,nBCsPerOrbit);
203 hDuration->SetBinContent(r+1,run_duration);
204 hLumiSeen->SetBinContent(r+1,lumi_seen);
208 TFile* fclassL0B = new TFile("class_L0B_counts.root","recreate");
209 TCanvas* cClassL0B = new TCanvas("cClassL0B","Class L0B vs run",1800,900);
210 gPad->SetMargin(0.15,0.01,0.08,0.06);
211 SetHisto(hClassL0BvsRun);
212 hClassL0BvsRun->Draw("col");
213 gPad->Print("class_L0B_counts.pdf(");
214 hClassL0BvsRun->Write();
215 TCanvas* cL0B = new TCanvas("cL0B","L0B vs run",1800,500);
216 cL0B->SetMargin(0.05,0.01,0.18,0.06);
217 for (Int_t i=1;i<=hClassL0BvsRun->GetNbinsY();i++){
218 TH1D* h = (TH1D*) hClassL0BvsRun->ProjectionX(Form("hClassL0BvsRun_%02i",i),i,i);
219 h->SetTitle(Form("%s L0B counts: %.0f",hClassL0BvsRun->GetYaxis()->GetBinLabel(i),h->Integral()));
222 AddFillSeparationLines(h,fills);
223 gPad->Print("class_L0B_counts.pdf");
226 gPad->Print("class_L0B_counts.pdf]");
229 TFile* fclassL2A = new TFile("class_L2A_counts.root","recreate");
230 TCanvas* cClassL2A = new TCanvas("cClassL2A","Class L2A vs run",1800,900);
231 gPad->SetMargin(0.15,0.01,0.08,0.06);
232 SetHisto(hClassL2AvsRun);
233 hClassL2AvsRun->Draw("col");
234 gPad->Print("class_L2A_counts.pdf(");
235 hClassL2AvsRun->Write();
236 TCanvas* cL2A = new TCanvas("cL2A","L2A vs run",1800,500);
237 cL2A->SetMargin(0.05,0.01,0.18,0.06);
238 for (Int_t i=1;i<=hClassL2AvsRun->GetNbinsY();i++){
239 TH1D* h = (TH1D*) hClassL2AvsRun->ProjectionX(Form("hClassL2AvsRun_%02i",i),i,i);
240 h->SetTitle(Form("%s L2A counts: %.0f",hClassL2AvsRun->GetYaxis()->GetBinLabel(i),h->Integral()));
243 AddFillSeparationLines(h,fills);
244 gPad->Print("class_L2A_counts.pdf");
247 gPad->Print("class_L2A_counts.pdf]");
250 TFile* fclassLifetime = new TFile("class_lifetime.root","recreate");
251 TCanvas* cClassLifetime = new TCanvas("cClassLifetime","Lifetime class-by-class vs run",1800,900);
252 gPad->SetMargin(0.15,0.01,0.08,0.06);
253 SetHisto(hClassLifetimeVsRun);
254 hClassLifetimeVsRun->Draw("col");
255 gPad->Print("class_lifetime.pdf(");
256 hClassLifetimeVsRun->Write();
257 TCanvas* cL2A = new TCanvas("cLifetime","Lifetime vs run",1800,500);
258 cL2A->SetMargin(0.05,0.01,0.18,0.06);
259 for (Int_t i=1;i<=hClassLifetimeVsRun->GetNbinsY();i++){
260 TH1D* h = (TH1D*) hClassLifetimeVsRun->ProjectionX(Form("hClassLifetimeVsRun_%02i",i),i,i);
261 h->SetTitle(Form("%s lifetime",hClassLifetimeVsRun->GetYaxis()->GetBinLabel(i)));
265 AddFillSeparationLines(h,fills);
266 gPad->Print("class_lifetime.pdf");
269 gPad->Print("class_lifetime.pdf]");
270 fclassLifetime->Close();
272 TFile* fclassLumi = new TFile("class_lumi.root","recreate");
273 TCanvas* cClassLumi = new TCanvas("cClassLumi","Luminosity class-by-class vs run",1800,900);
274 gPad->SetMargin(0.15,0.01,0.08,0.06);
275 SetHisto(hClassLumiVsRun);
276 hClassLumiVsRun->Draw("col");
277 gPad->Print("class_lumi.pdf(");
278 TCanvas* clumi = new TCanvas("clumi","lumi vs run",1800,500);
279 clumi->SetMargin(0.05,0.01,0.18,0.06);
281 for (Int_t i=1;i<=hClassLumiVsRun->GetNbinsY();i++){
282 TH1D* h = (TH1D*) hClassLumiVsRun->ProjectionX(Form("hClassLumiVsRun_%02i",i),i,i);
283 h->SetTitle(Form("%s luminosity [ub-1]: %.0g",hClassLumiVsRun->GetYaxis()->GetBinLabel(i),h->Integral()));
286 AddFillSeparationLines(h,fills);
287 gPad->Print("class_lumi.pdf");
289 gPad->Print("class_lumi.pdf]");
292 SetHisto(hActiveDetectors);
293 SetHisto(hInteractionRate);
299 TCanvas* cActiveDetectors = new TCanvas("active_detectors","Active Detectors",1800,500);
300 cActiveDetectors->SetMargin(0.05,0.01,0.18,0.06);
301 hActiveDetectors->GetYaxis()->SetLabelOffset(0.001);
302 hActiveDetectors->SetMaximum(2);
303 hActiveDetectors->Draw("col");
304 AddFillSeparationLines(hMu,fills);
305 gPad->Print("global_properties.pdf(");
307 TCanvas* cInteractionRate = new TCanvas("cInteractionRate","Interaction Rate",1800,500);
308 cInteractionRate->SetMargin(0.05,0.01,0.18,0.06);
309 hInteractionRate->SetFillColor(0);
310 hInteractionRate->Draw();
311 AddFillSeparationLines(hMu,fills);
312 gPad->Print("global_properties.pdf");
314 TCanvas* cMu = new TCanvas("mu","mu",1800,500);
315 cMu->SetMargin(0.05,0.01,0.18,0.06);
316 hMu->SetFillColor(0);
318 AddFillSeparationLines(hMu,fills);
319 gPad->Print("global_properties.pdf");
321 TCanvas* cBCs = new TCanvas("bcs","bcs",1800,500);
322 cBCs->SetMargin(0.05,0.01,0.18,0.06);
323 hBCs->SetFillColor(0);
325 AddFillSeparationLines(hBCs,fills);
326 gPad->Print("global_properties.pdf");
328 TCanvas* cDuration = new TCanvas("duration","duration",1800,500);
329 cDuration->SetMargin(0.05,0.01,0.18,0.06);
330 hDuration->SetTitle(Form("Duration in seconds: total= %.0f s = %.0f h",hDuration->Integral(),hDuration->Integral()/3600));
331 hDuration->Draw("h");
332 AddFillSeparationLines(hDuration,fills);
333 gPad->Print("global_properties.pdf");
335 TCanvas* cLumiSeen = new TCanvas("lumiseen","lumi seen",1800,500);
336 cLumiSeen->SetMargin(0.05,0.01,0.18,0.06);
337 hLumiSeen->SetTitle(Form("Luminosity seen [1/ub]: total= %.0g",hLumiSeen->Integral()));
338 hLumiSeen->Draw("h");
339 AddFillSeparationLines(hLumiSeen,fills);
340 gPad->Print("global_properties.pdf)");
342 TCanvas* dummy = new TCanvas("dummy","dummy",1800,500);
343 gPad->SetMargin(0.05,0.01,0.18,0.06);
344 gPad->Print("alias_event_statistics.pdf[");
345 gPad->Print("alias_lumi_statistics.pdf[");
346 gPad->Print("accepted_fraction.pdf[");
347 gPad->Print("rejected_fraction.pdf[");
349 TCanvas* cCounts = new TCanvas("c_alias_counts" ,"c_alias_counts" ,1800,500);
350 TCanvas* cLumi = new TCanvas("c_lumi" ,"c_lumi" ,1800,500);
351 TCanvas* cAcceptedFraction = new TCanvas("accepted_fraction","accepted fraction",1800,500);
352 TCanvas* cRejectedFraction = new TCanvas("rejected_fraction","rejected fraction",1800,500);
353 cCounts ->SetMargin(0.05,0.01,0.18,0.06);
354 cLumi ->SetMargin(0.05,0.01,0.18,0.06);
355 cAcceptedFraction->SetMargin(0.05,0.01,0.18,0.06);
356 cRejectedFraction->SetMargin(0.05,0.01,0.18,0.06);
357 cRejectedFraction->SetLogy();
359 for (Int_t ibit=0;ibit<NBITS;ibit++) {
360 const char* bitName = bitNames[ibit];
362 hRecorded[ibit] = new TH1D(Form("hRecorded%02i" ,ibit),Form("Recorded: %s" ,bitName),nRuns,0,nRuns);
363 hReconstructed[ibit] = new TH1D(Form("hReconstructed%02i" ,ibit),Form("Reconstructed: %s" ,bitName),nRuns,0,nRuns);
364 hAccepted[ibit] = new TH1D(Form("hAccepted%02i" ,ibit),Form("Accepted: %s" ,bitName),nRuns,0,nRuns);
365 hRejected[ibit] = new TH1D(Form("hRejected%02i" ,ibit),Form("Rejected: %s" ,bitName),nRuns,0,nRuns);
366 hLumiRecorded[ibit] = new TH1D(Form("hLumiRecorded%02i" ,ibit),Form("Lumi recorded: %s" ,bitName),nRuns,0,nRuns);
367 hLumiReconstructed[ibit] = new TH1D(Form("hLumiReconstructed%02i",ibit),Form("Lumi reconstructed: %s",bitName),nRuns,0,nRuns);
368 hLumiAccepted[ibit] = new TH1D(Form("hLumiAccepted%02i" ,ibit),Form("Lumi accepted: %s" ,bitName),nRuns,0,nRuns);
370 for (Int_t r=0;r<nRuns;r++){
372 hRecorded[ibit] ->GetXaxis()->SetBinLabel(r+1,Form("%i",run));
373 hReconstructed[ibit] ->GetXaxis()->SetBinLabel(r+1,Form("%i",run));
374 hAccepted[ibit] ->GetXaxis()->SetBinLabel(r+1,Form("%i",run));
375 hRejected[ibit] ->GetXaxis()->SetBinLabel(r+1,Form("%i",run));
376 hLumiRecorded[ibit] ->GetXaxis()->SetBinLabel(r+1,Form("%i",run));
377 hLumiReconstructed[ibit]->GetXaxis()->SetBinLabel(r+1,Form("%i",run));
378 hLumiAccepted[ibit] ->GetXaxis()->SetBinLabel(r+1,Form("%i",run));
379 // printf("recorded = %i",alias_recorded[ibit]);
380 // printf("reconstructed = %i",alias_reconstructed[ibit]);
381 hRecorded[ibit] ->SetBinContent(r+1,alias_recorded[ibit]);
382 hReconstructed[ibit] ->SetBinContent(r+1,alias_reconstructed[ibit]);
383 hAccepted[ibit] ->SetBinContent(r+1,alias_accepted[ibit]);
384 hRejected[ibit] ->SetBinContent(r+1,alias_reconstructed[ibit]-alias_accepted[ibit]);
385 hLumiRecorded[ibit] ->SetBinContent(r+1,alias_lumi_recorded[ibit]);
386 hLumiReconstructed[ibit]->SetBinContent(r+1,alias_lumi_reconstructed[ibit]);
387 hLumiAccepted[ibit] ->SetBinContent(r+1,alias_lumi_accepted[ibit]);
389 if (hRecorded[ibit]->Integral()<1) continue;
390 printf("bit=%i %s\n",ibit,bitName);
392 SetHisto(hRecorded[ibit]);
393 SetHisto(hReconstructed[ibit]);
394 SetHisto(hAccepted[ibit]);
395 SetHisto(hRejected[ibit]);
396 SetHisto(hLumiRecorded[ibit]);
397 SetHisto(hLumiReconstructed[ibit]);
398 SetHisto(hLumiAccepted[ibit]);
399 hRecorded[ibit]->Sumw2();
400 hReconstructed[ibit]->Sumw2();
401 hAccepted[ibit]->Sumw2();
402 hRejected[ibit]->Sumw2();
403 hRecorded[ibit]->SetLineColor(kRed+2);
404 hRecorded[ibit]->SetFillColor(kRed+2);
405 hReconstructed[ibit]->SetLineColor(kBlue);
406 hReconstructed[ibit]->SetFillColor(kBlue);
407 hAccepted[ibit]->SetLineColor(kGreen+2);
408 hAccepted[ibit]->SetFillColor(kGreen+2);
409 hLumiRecorded[ibit]->SetLineColor(kRed+2);
410 hLumiRecorded[ibit]->SetFillColor(kRed+2);
411 hLumiReconstructed[ibit]->SetLineColor(kBlue);
412 hLumiReconstructed[ibit]->SetFillColor(kBlue);
413 hLumiAccepted[ibit]->SetLineColor(kGreen+2);
414 hLumiAccepted[ibit]->SetFillColor(kGreen+2);
417 hRecorded[ibit]->SetTitle(Form("%s trigger counts: recorded=%0.f, total=%.0f, accepted=%.0f",bitName,hRecorded[ibit]->Integral(),hReconstructed[ibit]->Integral(),hAccepted[ibit]->Integral()));
418 hRecorded[ibit]->Draw("h");
419 hReconstructed[ibit]->Draw("h same");
420 hAccepted[ibit]->Draw("h same");
421 AddFillSeparationLines(hAccepted[ibit],fills);
423 gPad->Print("alias_event_statistics.pdf");
426 hLumiRecorded[ibit]->SetTitle(Form("%s luminosity [ub-1]: recorded=%.0g, total=%.0g, accepted=%.0g",bitName,hLumiRecorded[ibit]->Integral(),hLumiReconstructed[ibit]->Integral(),hLumiAccepted[ibit]->Integral()));
427 hLumiRecorded[ibit]->Draw("h");
428 hLumiReconstructed[ibit]->Draw("h same");
429 hLumiAccepted[ibit]->Draw("h same");
430 AddFillSeparationLines(hLumiAccepted[ibit],fills);
432 gPad->Print("alias_lumi_statistics.pdf");
434 if (hReconstructed[ibit]->Integral()<1) continue;
435 hAcceptedFraction[ibit] = (TH1D*) hReconstructed[ibit]->Clone(Form("hAcceptedFraction%02i",ibit));
436 hAcceptedFraction[ibit]->SetTitle(Form("Accepted fraction: %s",bitName));
437 hAcceptedFraction[ibit]->Divide(hAccepted[ibit],hReconstructed[ibit],1,1,"B");
438 hAcceptedFraction[ibit]->SetFillColor(0);
439 hAcceptedFraction[ibit]->SetLineWidth(2);
440 hRejectedFraction[ibit] = (TH1D*) hReconstructed[ibit]->Clone(Form("hRejectedFraction%02i",ibit));
441 hRejectedFraction[ibit]->SetTitle(Form("Rejected fraction: %s",bitName));
442 hRejectedFraction[ibit]->Divide(hRejected[ibit],hReconstructed[ibit],1,1,"B");
443 hRejectedFraction[ibit]->SetFillColor(0);
444 hRejectedFraction[ibit]->SetLineWidth(2);
446 cAcceptedFraction->cd();
447 hAcceptedFraction[ibit]->SetTitle(Form("%s: average accepted fraction = %.3f",bitName,hAccepted[ibit]->Integral()/hReconstructed[ibit]->Integral()));
448 hAcceptedFraction[ibit]->Draw();
449 AddFillSeparationLines(hAcceptedFraction[ibit],fills);
450 gPad->Print("accepted_fraction.pdf");
452 cRejectedFraction->cd();
453 hRejectedFraction[ibit]->SetMaximum(1);
454 hRejectedFraction[ibit]->SetTitle(Form("%s: average rejected fraction = %.3f",bitName,hRejected[ibit]->Integral()/hReconstructed[ibit]->Integral()));
455 hRejectedFraction[ibit]->Draw();
456 AddFillSeparationLines(hRejectedFraction[ibit],fills);
457 gPad->Print("rejected_fraction.pdf");
460 dummy->Print("alias_event_statistics.pdf]");
461 dummy->Print("alias_lumi_statistics.pdf]");
462 dummy->Print("accepted_fraction.pdf]");
463 dummy->Print("rejected_fraction.pdf]");
465 TFile* fglobal = new TFile("global_properties.root","recreate");
472 TFile* fstat = new TFile("accepted_event_statistics.root","recreate");
473 for (Int_t ibit=0;ibit<NBITS;ibit++) {
474 if (hRecorded[ibit]) hRecorded[ibit]->Write();
475 if (hReconstructed[ibit]) hReconstructed[ibit]->Write();
476 if (hAccepted[ibit]) hAccepted[ibit]->Write();
480 TFile* faccepted = new TFile("accepted_fraction.root","recreate");
481 for (Int_t ibit=0;ibit<NBITS;ibit++) {
482 if (hAcceptedFraction[ibit]) hAcceptedFraction[ibit]->Write();
486 TFile* frejected = new TFile("rejected_fraction.root","recreate");
487 for (Int_t ibit=0;ibit<NBITS;ibit++) {
488 if (hRejectedFraction[ibit]) hRejectedFraction[ibit]->Write();
494 void SetHisto(TH1D* h){
497 h->GetYaxis()->SetTitleFont(43);
498 h->GetXaxis()->SetLabelFont(43);
499 h->GetYaxis()->SetLabelFont(43);
500 h->GetYaxis()->SetTitleSize(25);
501 h->GetXaxis()->SetLabelSize(15);
502 h->GetYaxis()->SetLabelSize(25);
503 h->GetYaxis()->SetTickLength(0.01);
504 h->GetYaxis()->SetTitleOffset(0.6);
505 h->GetYaxis()->SetDecimals(1);
506 h->SetLineColor(kBlue);
507 h->SetFillColor(kBlue);
508 h->LabelsOption("av");
513 void SetHisto(TH2D* h){
516 h->GetYaxis()->SetTitleFont(43);
517 h->GetXaxis()->SetLabelFont(43);
518 h->GetYaxis()->SetLabelFont(43);
519 h->GetZaxis()->SetLabelFont(43);
520 h->GetYaxis()->SetTitleSize(25);
521 h->GetXaxis()->SetLabelSize(15);
522 h->GetYaxis()->SetLabelSize(15);
523 h->GetZaxis()->SetLabelSize(15);
524 h->GetYaxis()->SetTickLength(0.01);
525 h->GetYaxis()->SetDecimals(1);
526 h->GetXaxis()->LabelsOption("av");
527 h->GetYaxis()->LabelsOption("a");
529 h->SetLineColor(kBlue);
533 void AddFillSeparationLines(TH1D* h, map<Int_t,Int_t> &fills){
535 Double_t ymin = gPad->GetUymin();
536 Double_t ymax = gPad->GetUymax();
537 TLine * fillSeparationLine = new TLine();
538 fillSeparationLine->SetLineColor(kRed);
539 fillSeparationLine->SetLineWidth(1);
540 for(Int_t iBin = 1; iBin < h->GetXaxis()->GetNbins(); iBin++) {
541 UInt_t runOld = atoi(h->GetXaxis()->GetBinLabel(iBin));
542 UInt_t runNew = atoi(h->GetXaxis()->GetBinLabel(iBin + 1));
543 if (fills[runOld]==fills[runNew]) continue;
544 fillSeparationLine->DrawLine(iBin,ymin,iBin,ymax);