]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGPP/EVS/periodLevelQA.C
MFT track shit tool added
[u/mrichter/AliRoot.git] / PWGPP / EVS / periodLevelQA.C
CommitLineData
c0d2a42f 1#include "TFile.h"
2#include "TTree.h"
3#include "TH1D.h"
4#include "TCanvas.h"
5#include "TStyle.h"
6#include "map"
7using namespace std;
8// TODO read number of bits from AliVEvent?
9#define NBITS 29
10TString bitNames[NBITS] = {
11"kMB",
12"kINT7",
13"kMUON",
14"kHighMult",
15"kEMC1",
16"kCINT5",
17"kCMUS5",
18"kMUSH7",
19"kMUL7",
20"kMUU7",
21"kEMC7",
22"kMUS7",
23"kPHI1",
24"kPHI7/kPHI8",
25"kEMCEJE",
26"kEMCEGA",
27"kCentral",
28"kSemiCentral",
29"kDG5",
30"kZED",
31"kSPI7/kSPI8",
32"kINT8",
33"kMuonSingleLowPt8",
34"kMuonSingleHighPt8",
35"kMuonLikeLowPt8",
36"kMuonUnlikeLowPt8",
37"kMuonUnlikeLowPt0",
38"kUserDefined",
39"kTRD"
40};
41
42void SetHisto(TH1D* h);
43void AddFillSeparationLines(TH1D* h, map<Int_t,Int_t> &fills);
44
45void periodLevelQA(TString inputFileName ="trending.root"){
46 TFile* f = new TFile(inputFileName.Data());
47 TTree* t = (TTree*) f->Get("trending");
48 Int_t run;
49 Int_t fill = 0;
50 Int_t nBCsPerOrbit = 0;
51 Double_t duration = 0;
52 Double_t mu = 0;
53 Double_t lumi_seen = 0;
54 UInt_t l0b = 0;
55 Int_t all[NBITS];
56 Int_t accepted[NBITS];
57
58 t->SetBranchAddress("run",&run);
59 t->SetBranchAddress("fill",&fill);
60 t->SetBranchAddress("bcs",&nBCsPerOrbit);
61 t->SetBranchAddress("duration",&duration);
62 t->SetBranchAddress("mu",&mu);
63 t->SetBranchAddress("l0b",&l0b);
64 t->SetBranchAddress("all",&all);
65 t->SetBranchAddress("accepted",&accepted);
66 t->SetBranchAddress("lumi_seen",&lumi_seen);
67 Int_t nRuns = t->GetEntries();
68 map<Int_t,Int_t> fills;
69 TH1D* hAll[NBITS];
70 TH1D* hAccepted[NBITS] = {0x0};
71 TH1D* hRejected[NBITS] = {0x0};
72 TH1D* hAcceptedFraction[NBITS] = {0x0};
73 TH1D* hRejectedFraction[NBITS] = {0x0};
74
75 gStyle->SetOptStat(0);
76 gStyle->SetLineScalePS(1.5);
77 gStyle->SetPadGridX(0);
78 gStyle->SetPadGridY(1);
79 TCanvas* dummy = new TCanvas("dummy","dummy",1800,500);
80 gPad->SetMargin(0.05,0.01,0.18,0.06);
81 gPad->Print("global_properties.pdf[");
82 gPad->Print("accepted_event_statistics.pdf[");
83 gPad->Print("accepted_fraction.pdf[");
84 gPad->Print("rejected_fraction.pdf[");
85
86 TH1D* hMu = new TH1D("hMu","Average number of minimum bias collisions per BC",nRuns,0,nRuns);
87 TH1D* hBCs = new TH1D("hBCs","Number of colliding bunches",nRuns,0,nRuns);
88 TH1D* hDuration = new TH1D("hDuration","Duration, s",nRuns,0,nRuns);
89 TH1D* hLumiSeen = new TH1D("hLumiSeen","Luminosity seen, nb-1",nRuns,0,nRuns);
90
91 for (Int_t r=0;r<nRuns;r++){
92 t->GetEntry(r);
93 hMu->GetXaxis()->SetBinLabel(r+1,Form("%i",run));
94 hBCs->GetXaxis()->SetBinLabel(r+1,Form("%i",run));
95 hDuration->GetXaxis()->SetBinLabel(r+1,Form("%i",run));
96 hLumiSeen->GetXaxis()->SetBinLabel(r+1,Form("%i",run));
97 hMu->SetBinContent(r+1,mu);
98 hBCs->SetBinContent(r+1,nBCsPerOrbit);
99 hDuration->SetBinContent(r+1,duration);
5cbc06d4 100 hLumiSeen->SetBinContent(r+1,lumi_seen/1000.);
c0d2a42f 101 fills[run]=fill;
102 }
103 SetHisto(hMu);
104 SetHisto(hBCs);
105 SetHisto(hDuration);
106 SetHisto(hLumiSeen);
107 TCanvas* cMu = new TCanvas("mu","mu",1800,500);
108 cMu->SetMargin(0.05,0.01,0.18,0.06);
109 hMu->Draw("h");
110 AddFillSeparationLines(hMu,fills);
111 gPad->Print("global_properties.pdf");
112
113 TCanvas* cBCs = new TCanvas("bcs","bcs",1800,500);
114 cBCs->SetMargin(0.05,0.01,0.18,0.06);
115 hBCs->Draw("h");
116 AddFillSeparationLines(hBCs,fills);
117 gPad->Print("global_properties.pdf");
118
119 TCanvas* cDuration = new TCanvas("duration","duration",1800,500);
120 cDuration->SetMargin(0.05,0.01,0.18,0.06);
121 hDuration->SetTitle(Form("Duration in seconds: total= %.0f s = %.0f h",hDuration->Integral(),hDuration->Integral()/3600));
122 hDuration->Draw("h");
123 AddFillSeparationLines(hDuration,fills);
124 gPad->Print("global_properties.pdf");
125
126 TCanvas* cLumiSeen = new TCanvas("lumiseen","lumi seen",1800,500);
127 cLumiSeen->SetMargin(0.05,0.01,0.18,0.06);
5cbc06d4 128 hLumiSeen->SetTitle(Form("Luminosity seen [1/ub]: total= %.0f",hLumiSeen->Integral()));
c0d2a42f 129 hLumiSeen->Draw("h");
130 AddFillSeparationLines(hLumiSeen,fills);
131 gPad->Print("global_properties.pdf");
132
133
134 dummy->Print("global_properties.pdf]");
135
136 for (Int_t ibit=0;ibit<NBITS;ibit++) {
137 printf("bit=%i\n",ibit);
138 const char* bitName = bitNames[ibit];
139 hAll[ibit] = new TH1D(Form("hAll%02i" ,ibit),Form("All: %s" ,bitName),nRuns,0,nRuns);
140 hAccepted[ibit] = new TH1D(Form("hAccepted%02i",ibit),Form("Accepted: %s",bitName),nRuns,0,nRuns);
141 hRejected[ibit] = new TH1D(Form("hRejected%02i",ibit),Form("Rejected: %s",bitName),nRuns,0,nRuns);
142 for (Int_t r=0;r<nRuns;r++){
143 t->GetEntry(r);
144 hAll[ibit] ->GetXaxis()->SetBinLabel(r+1,Form("%i",run));
145 hAccepted[ibit]->GetXaxis()->SetBinLabel(r+1,Form("%i",run));
146 hRejected[ibit]->GetXaxis()->SetBinLabel(r+1,Form("%i",run));
147 hAll[ibit]->SetBinContent(r+1,all[ibit]);
148 if (all[ibit]) hAccepted[ibit]->SetBinContent(r+1,accepted[ibit]);
149 if (all[ibit]) hRejected[ibit]->SetBinContent(r+1,all[ibit]-accepted[ibit]);
150 }
151 if (hAll[ibit]->Integral()<1) continue;
152 SetHisto(hAll[ibit]);
153 SetHisto(hAccepted[ibit]);
154 SetHisto(hRejected[ibit]);
155 hAll[ibit]->Sumw2();
156 hAccepted[ibit]->Sumw2();
157 hRejected[ibit]->Sumw2();
158 hAll[ibit]->SetLineColor(kBlue);
159 hAll[ibit]->SetFillColor(kBlue);
160 hAccepted[ibit]->SetLineColor(kGreen+2);
161 hAccepted[ibit]->SetFillColor(kGreen+2);
162 hAcceptedFraction[ibit] = (TH1D*) hAll[ibit]->Clone(Form("hAcceptedFraction%02i",ibit));
163 hAcceptedFraction[ibit]->SetTitle(Form("Accepted fraction: %s",bitName));
164 hAcceptedFraction[ibit]->Divide(hAccepted[ibit],hAll[ibit],1,1,"B");
165 hAcceptedFraction[ibit]->SetFillColor(0);
166 hAcceptedFraction[ibit]->SetLineWidth(2);
167 hRejectedFraction[ibit] = (TH1D*) hAll[ibit]->Clone(Form("hRejectedFraction%02i",ibit));
168 hRejectedFraction[ibit]->SetTitle(Form("Rejected fraction: %s",bitName));
169 hRejectedFraction[ibit]->Divide(hRejected[ibit],hAll[ibit],1,1,"B");
170 hRejectedFraction[ibit]->SetFillColor(0);
171 hRejectedFraction[ibit]->SetLineWidth(2);
172
173 TCanvas* cAll = new TCanvas(Form("all_%s",bitName),Form("All: %s",bitName),1800,500);
174 cAll->SetMargin(0.05,0.01,0.18,0.06);
175 hAll[ibit]->SetTitle(Form("%s: total=%.0f accepted=%.0f",bitName,hAll[ibit]->Integral(),hAccepted[ibit]->Integral()));
176 hAll[ibit]->Draw("h");
177 hAccepted[ibit]->Draw("h same");
178 AddFillSeparationLines(hAccepted[ibit],fills);
179 gPad->RedrawAxis();
180 gPad->Print("accepted_event_statistics.pdf");
181
182 TCanvas* cAcceptedFraction = new TCanvas(Form("accepted_fraction_%s",bitName),Form("Accepted Fraction: %s",bitName),1800,500);
183 cAcceptedFraction->SetMargin(0.05,0.01,0.18,0.06);
184 hAcceptedFraction[ibit]->SetTitle(Form("%s: average accepted fraction = %.3f",bitName,hAccepted[ibit]->Integral()/hAll[ibit]->Integral()));
185 hAcceptedFraction[ibit]->Draw();
186 AddFillSeparationLines(hAcceptedFraction[ibit],fills);
187 gPad->Print("accepted_fraction.pdf");
188
189 TCanvas* cRejectedFraction = new TCanvas(Form("rejected_fraction_%s",bitName),Form("Rejected Fraction: %s",bitName),1800,500);
190 cRejectedFraction->SetMargin(0.05,0.01,0.18,0.06);
191 hRejectedFraction[ibit]->SetTitle(Form("%s: average rejected fraction = %.3f",bitName,hRejected[ibit]->Integral()/hAll[ibit]->Integral()));
192 hRejectedFraction[ibit]->Draw();
193 AddFillSeparationLines(hRejectedFraction[ibit],fills);
194 gPad->Print("rejected_fraction.pdf");
195
196 }
197 dummy->Print("accepted_event_statistics.pdf]");
198 dummy->Print("accepted_fraction.pdf]");
199 dummy->Print("rejected_fraction.pdf]");
200
5cbc06d4 201 TFile* fglobal = new TFile("global_properties.root","recreate");
202 hMu->Write();
203 hBCs->Write();
204 hDuration->Write();
205 hLumiSeen->Write();
206 fglobal->Close();
207
208 TFile* fstat = new TFile("accepted_event_statistics.root","recreate");
c0d2a42f 209 for (Int_t ibit=0;ibit<NBITS;ibit++) {
210 if (hAll[ibit]) hAll[ibit]->Write();
211 if (hAccepted[ibit]) hAccepted[ibit]->Write();
5cbc06d4 212 }
213 fstat->Close();
214
215 TFile* faccepted = new TFile("accepted_fraction.root","recreate");
216 for (Int_t ibit=0;ibit<NBITS;ibit++) {
c0d2a42f 217 if (hRejectedFraction[ibit]) hRejectedFraction[ibit]->Write();
218 }
5cbc06d4 219 faccepted->Close();
220
221 TFile* frejected = new TFile("rejected_fraction.root","recreate");
222 for (Int_t ibit=0;ibit<NBITS;ibit++) {
223 if (hRejectedFraction[ibit]) hRejectedFraction[ibit]->Write();
224 }
225 frejected->Close();
226
c0d2a42f 227}
228
229void SetHisto(TH1D* h){
230 h->SetTitleFont(43);
231 h->SetTitleSize(25);
232 h->GetYaxis()->SetTitleFont(43);
233 h->GetXaxis()->SetLabelFont(43);
234 h->GetYaxis()->SetLabelFont(43);
235 h->GetYaxis()->SetTitleSize(25);
236 h->GetXaxis()->SetLabelSize(15);
237 h->GetYaxis()->SetLabelSize(25);
238 h->GetYaxis()->SetTickLength(0.01);
239 h->GetYaxis()->SetTitleOffset(0.6);
240 h->GetYaxis()->SetDecimals(1);
241 h->LabelsOption("av");
242 h->SetLineWidth(2);
243 h->SetLineColor(kBlue);
244 h->SetMinimum(0);
245}
246
247void AddFillSeparationLines(TH1D* h, map<Int_t,Int_t> &fills){
248 gPad->Update();
249 Double_t ymin = gPad->GetUymin();
250 Double_t ymax = gPad->GetUymax();
251 TLine * fillSeparationLine = new TLine();
252 fillSeparationLine->SetLineColor(kRed);
253 fillSeparationLine->SetLineWidth(1);
254 for(Int_t iBin = 1; iBin < h->GetXaxis()->GetNbins(); iBin++) {
255 UInt_t runOld = atoi(h->GetXaxis()->GetBinLabel(iBin));
256 UInt_t runNew = atoi(h->GetXaxis()->GetBinLabel(iBin + 1));
257 if (fills[runOld]==fills[runNew]) continue;
258 fillSeparationLine->DrawLine(iBin,ymin,iBin,ymax);
259 }
260}