]>
Commit | Line | Data |
---|---|---|
8c1c76e9 | 1 | void DrawMCQAplots(Int_t imode){ |
2 | ||
3 | // if you want to draw differential yield for charm, set imode==4 | |
4 | // if you want to draw differential yield for charm, set imode==5 | |
5 | // if you want to draw differential yield for charm and beauty, set imode==0 | |
6 | // if you want to compare differential yield of electron yield from charm and beauty w/wo acc cut(eta<0.9), set imode==11 | |
7 | // if you want to compare differetail cross section together with NLO prediction, set imode==12 | |
8 | ||
9 | // load libs | |
10 | gSystem->Load("libANALYSIS.so"); | |
11 | gSystem->Load("libANALYSISalice.so"); | |
12 | gSystem->Load("libCORRFW.so"); | |
13 | gSystem->Load("libPWG0base.so"); | |
40a0a69c | 14 | gSystem->Load("libPWGHFhfe.so"); |
8c1c76e9 | 15 | |
16 | // put input file name | |
17 | //char filename[]="./HFEtask.root"; | |
18 | char filename[]="/lustre/alice/train/V006.MC_pp/2011-01-07_1954.4718/mergedPeriods/MC_pp/7TeV/LHC10f7a_c/HFEtask.root"; // pwg3 samples for pp | |
19 | //char NLOcalcc[]="../rootfiles/cpp10CTQ6diff.root"; // p+p 10TeV for cquark (pt, rapidity for q and fragments ) | |
20 | //char NLOcalcb[]="../rootfiles/bpp10CTQ6diff.root"; // p+p 10TeV for bquark (pt, rapidity for q and fragments ) | |
21 | //char NLOcalccb[]="../rootfiles/pp10CTQ6_pt_yall_cb.root"; // p+p 7TeV for c and b (pT only) | |
22 | char NLOcalcc[]="../rootfiles/cpp7CTQ6diff.root"; // p+p 7TeV for cquark (pt, rapidity for q and fragments ) | |
23 | char NLOcalcb[]="../rootfiles/bpp7CTQ6diff.root"; // p+p 7TeV for bquark (pt, rapidity for q and fragments ) | |
24 | char NLOcalccb[]="../rootfiles/pp7CTQ6_pt_yall_cb.root"; // p+p 7TeV for c and b (pT only) | |
25 | ||
26 | ||
27 | if(imode == 4) DrawDifferentialYield(4,filename, NLOcalcc); // charm differentail yield | |
28 | if(imode == 5) DrawDifferentialYield(5,filename, NLOcalcb); // beauty differential yield | |
29 | if(imode == 0) DrawDifferentialYieldBoth(filename, NLOcalccb); // both charm and beauty | |
30 | if(imode == 11) DrawDifferentialYieldAcc(filename); // electron yield w/wo acc cut | |
31 | //if(imode == 12) DrawDifferentialXsectionBoth(filename, NLOcalccb); //be careful, have to look again the overall normalization | |
32 | ||
33 | } | |
34 | ||
35 | //-------------------------- | |
36 | void DrawDifferentialYield(Int_t qtype, char *filename, char *NLOcalc){ | |
37 | ||
38 | TFile *_file[2]; | |
39 | _file[0] = TFile::Open(filename); | |
40 | _file[1] = TFile::Open(NLOcalc); | |
41 | ||
42 | setGeneralStyle(); | |
43 | char configname[]="mcQA"; | |
44 | enum qType {kQuark=0, kantiQuark=1, kHadron=2, kElec=3, kElec2nd=4, keHadron=5, kDeHadron=6}; | |
45 | enum hqType {kCharmQuark=4, kBeautyQuark=5}; | |
46 | Int_t fgkQuark = qtype; | |
47 | const Int_t fgkqType=7; | |
48 | ||
49 | struct hists { | |
50 | TH1F *Pt; | |
51 | TH1F *Eta; | |
52 | TH1F *Y; | |
53 | }; | |
54 | ||
55 | struct histsComm { | |
56 | TH1F *PdgCode; | |
57 | TH1F *Nq; | |
58 | }; | |
59 | ||
60 | hists fHist[7]; | |
61 | histsComm fHistComm; | |
62 | ||
63 | TString kqTypeLabel[fgkqType]; | |
64 | if (fgkQuark == kCharmQuark){ | |
65 | kqTypeLabel[kQuark]="c"; | |
66 | kqTypeLabel[kantiQuark]="cbar"; | |
67 | kqTypeLabel[kHadron]="cHadron"; | |
68 | kqTypeLabel[kElec]="ce"; | |
69 | kqTypeLabel[kElec2nd]="nulle"; | |
70 | kqTypeLabel[keHadron]="ceHadron"; | |
71 | kqTypeLabel[kDeHadron]="nullHadron"; | |
72 | } else if (fgkQuark == kBeautyQuark){ | |
73 | kqTypeLabel[kQuark]="b"; | |
74 | kqTypeLabel[kantiQuark]="bbar"; | |
75 | kqTypeLabel[kHadron]="bHadron"; | |
76 | kqTypeLabel[kElec]="be"; | |
77 | kqTypeLabel[kElec2nd]="bce"; | |
78 | kqTypeLabel[keHadron]="beHadron"; | |
79 | kqTypeLabel[kDeHadron]="bDeHadron"; | |
80 | } | |
81 | Int_t kColorCode[fgkqType]; | |
82 | kColorCode[kQuark]=2; | |
83 | kColorCode[kantiQuark]=2; | |
84 | kColorCode[kHadron]=6; | |
85 | kColorCode[kElec]=4; | |
86 | kColorCode[kElec2nd]=4; | |
87 | kColorCode[keHadron]=3; | |
88 | kColorCode[kDeHadron]=3; | |
89 | ||
90 | Int_t kLineStyle[fgkqType]; | |
91 | kLineStyle[kQuark]=1; | |
92 | kLineStyle[kantiQuark]=1; | |
93 | kLineStyle[kHadron]=3; | |
94 | kLineStyle[kElec]=2; | |
95 | kLineStyle[kElec2nd]=1; | |
96 | kLineStyle[keHadron]=2; | |
97 | kLineStyle[kDeHadron]=1; | |
98 | ||
99 | ||
100 | cPt = new TCanvas("cPt","pT",0,0,600,500); | |
101 | cY = new TCanvas("cY","rapidity",0,0,600,500); | |
102 | cPdg = new TCanvas("cPdg","pdg code",0,0,600,500); | |
103 | cNq = new TCanvas("cNq","number of quark",0,0,600,500); | |
104 | ||
105 | ||
106 | TList *tl = (TList *)_file[0]->Get("HFE_QA")->FindObject("MCqa"); | |
107 | //count # of events | |
108 | TList *tl_result = (TList *)_file[0]->Get("HFE_Results"); | |
109 | AliHFEcontainer *containerhfe = (AliHFEcontainer *) tl_result->FindObject("trackContainer"); | |
110 | if(!containerhfe) { | |
111 | printf("No hfe container \n"); | |
112 | return; | |
113 | } | |
114 | Int_t nEvt = (Int_t) containerhfe->GetNumberOfEvents(); | |
115 | cout << "# of events " << nEvt << endl; | |
116 | ||
117 | Double_t scalefactor = 1./float(nEvt); //normalize with total number of event | |
118 | ||
119 | TString hname; | |
120 | for (Int_t iqType = 0; iqType < fgkqType; iqType++ ){ | |
121 | ||
122 | //pT distribution | |
123 | hname="mcqa_Pt_"; | |
124 | hname=hname+kqTypeLabel[iqType]; | |
125 | fHist[iqType].Pt = (TH1F*)tl->FindObject(hname); | |
126 | fHist[iqType].Pt->SetXTitle("p_{t} [GeV/c]"); | |
127 | fHist[iqType].Pt->SetYTitle("1/N_{Evt}dN/dp_{t} [1/GeVc^{-1}]"); | |
128 | setDataStyle(*fHist[iqType].Pt, kColorCode[iqType], 3, kLineStyle[iqType]); | |
129 | ||
130 | CorrectFromTheWidth(fHist[iqType].Pt); //consider pT bin size | |
131 | fHist[iqType].Pt->Scale(scalefactor); //normalize with # of events | |
132 | if (iqType==1) { | |
133 | fHist[iqType].Pt->Add(fHist[0].Pt); // add Q and Qbar | |
134 | fHist[iqType].Pt->Scale(0.5); // get number of ccbar pair | |
135 | } | |
136 | ||
137 | //eta and rapidity distribution | |
138 | hname="mcqa_Eta_"; | |
139 | hname=hname+kqTypeLabel[iqType]; | |
140 | fHist[iqType].Eta = (TH1F*)tl->FindObject(hname); | |
141 | hname="mcqa_Y_"; | |
142 | hname=hname+kqTypeLabel[iqType]; | |
143 | fHist[iqType].Y = (TH1F*)tl->FindObject(hname); | |
144 | fHist[iqType].Y->SetXTitle("Y"); | |
145 | fHist[iqType].Y->SetYTitle("1/N_{Evt}dN/dY"); | |
146 | setDataStyle(*fHist[iqType].Y, kColorCode[iqType], 3, kLineStyle[iqType]); | |
147 | ||
148 | CorrectFromTheWidth(fHist[iqType].Y); //consider pT bin size | |
149 | fHist[iqType].Y->Scale(scalefactor); //normalize with # of events | |
150 | if (iqType==1) { | |
151 | fHist[iqType].Y->Add(fHist[0].Y); // add Q and Qbar | |
152 | fHist[iqType].Y->Scale(0.5); // get number of ccbar pair | |
153 | } | |
154 | ||
155 | cPt->cd(); | |
156 | setPadStyle(2,gPad); | |
157 | if (iqType==1) fHist[iqType].Pt->Draw(); | |
158 | if(iqType==2 || iqType==3 || iqType==4 || iqType==5 || iqType==6) fHist[iqType].Pt->Draw("same"); | |
159 | ||
160 | cY->cd(); | |
161 | setPadStyle(2,gPad); | |
162 | if (iqType==1) fHist[iqType].Y->Draw(); | |
163 | if(iqType==2 || iqType==3 || iqType==4 || iqType==5 || iqType==6) fHist[iqType].Y->Draw("same"); | |
164 | ||
165 | } | |
166 | ||
167 | cPdg->cd(); | |
168 | hname="mcqa_PdgCode_"; | |
169 | hname=hname+kqTypeLabel[kQuark]+"Hadron"; | |
170 | fHistComm.PdgCode = (TH1F*)tl->FindObject(hname); | |
171 | fHistComm.PdgCode->SetXTitle("hadron pdg code"); | |
172 | fHistComm.PdgCode->SetYTitle("Yield"); | |
173 | setDataStyle(*fHistComm.PdgCode, 2, 2, 1); | |
174 | setPadStyle(2,gPad); | |
175 | fHistComm.PdgCode->Draw(); | |
176 | ||
177 | cNq->cd(); | |
178 | hname="mcqa_Nq_"; | |
179 | hname=hname+kqTypeLabel[kQuark]; | |
180 | fHistComm.Nq = (TH1F*)tl->FindObject(hname); | |
181 | fHistComm.Nq->SetXTitle("number of "+kqTypeLabel[kQuark]+","+kqTypeLabel[kQuark]+"-bar per event"); | |
182 | fHistComm.Nq->SetYTitle("Yield per Event"); | |
183 | setDataStyle(*fHistComm.Nq, 2, 4, 1); | |
184 | setPadStyle(1,gPad); | |
185 | fHistComm.Nq->Scale(scalefactor); | |
186 | fHistComm.Nq->Draw(); | |
187 | ||
188 | ||
189 | ||
190 | TLegend *legend1 = new TLegend(0.50,0.73,0.98,0.99,""); | |
191 | setLegendStyle(*legend1,1); | |
192 | legend1->AddEntry(fHist[0].Pt,kqTypeLabel[kQuark]+"#bar{"+kqTypeLabel[kQuark]+"}"+" pair", "l"); | |
193 | legend1->AddEntry(fHist[2].Pt,kqTypeLabel[kQuark]+" hadrons from "+kqTypeLabel[kQuark]+", #bar{"+kqTypeLabel[kQuark]+"}", "l"); | |
194 | legend1->AddEntry(fHist[3].Pt,"elec. from "+kqTypeLabel[kQuark]+"->e", "l"); | |
195 | if(qtype==5) legend1->AddEntry(fHist[4].Pt,"elec. from "+kqTypeLabel[kQuark]+"->c->e", "l"); | |
196 | legend1->AddEntry(fHist[5].Pt,kqTypeLabel[kQuark]+" hadron decaying "+kqTypeLabel[kQuark]+"->e", "l"); | |
197 | if(qtype==5) legend1->AddEntry(fHist[6].Pt,kqTypeLabel[kQuark]+" hadron decaying "+kqTypeLabel[kQuark]+"->c->e", "l"); | |
198 | ||
199 | TLegend *legend1_ = new TLegend(0.65,0.42,0.90,0.72,""); | |
200 | setLegendStyle(*legend1_,1); | |
201 | legend1_->AddEntry(fHist[0].Pt,"Yield per event", ""); | |
202 | legend1_->AddEntry(fHist[0].Pt,"(0.1<p_{t}<20)", ""); | |
203 | legend1_->AddEntry(fHist[0].Pt,Form("%1.4f",fHist[1].Pt->Integral("width")), "l"); | |
204 | legend1_->AddEntry(fHist[2].Pt,Form("%1.4f",fHist[2].Pt->Integral("width")), "l"); | |
205 | legend1_->AddEntry(fHist[3].Pt,Form("%1.4f",fHist[3].Pt->Integral("width")), "l"); | |
206 | if(qtype==5) legend1_->AddEntry(fHist[4].Pt,Form("%1.4f",fHist[4].Pt->Integral("width")), "l"); | |
207 | legend1_->AddEntry(fHist[5].Pt,Form("%1.4f",fHist[5].Pt->Integral("width")), "l"); | |
208 | if(qtype==5) legend1_->AddEntry(fHist[6].Pt,Form("%1.4f",fHist[6].Pt->Integral("width")), "l"); | |
209 | ||
210 | cPt->cd(); | |
211 | legend1_->Draw(); | |
212 | ||
213 | TLegend *legend2 = new TLegend(0.26,0.15,0.74,0.37,""); | |
214 | setLegendStyle(*legend2,1); | |
215 | legend2->AddEntry(fHist[0].Y,kqTypeLabel[kQuark]+"#bar{"+kqTypeLabel[kQuark]+"}"+" pair", "l"); | |
216 | legend2->AddEntry(fHist[2].Y,kqTypeLabel[kQuark]+" hadrons from "+kqTypeLabel[kQuark], "l"); | |
217 | legend2->AddEntry(fHist[3].Y,"elec. from "+kqTypeLabel[kQuark]+"->e", "l"); | |
218 | if(qtype==5) legend2->AddEntry(fHist[4].Y,"elec. from "+kqTypeLabel[kQuark]+"->c->e", "l"); | |
219 | legend2->AddEntry(fHist[5].Y,kqTypeLabel[kQuark]+" hadron decaying "+kqTypeLabel[kQuark]+"->e", "l"); | |
220 | if(qtype==5) legend2->AddEntry(fHist[6].Y,kqTypeLabel[kQuark]+" hadron decaying "+kqTypeLabel[kQuark]+"->c->e", "l"); | |
221 | ||
222 | TLegend *legend2_ = new TLegend(0.70,0.77,0.98,0.99,""); | |
223 | setLegendStyle(*legend2_,1); | |
224 | legend2_->AddEntry(fHist[0].Y,"Yield per event", ""); | |
225 | legend2_->AddEntry(fHist[0].Y,"(all p_{t},-7.5<Y<7.5)", ""); | |
226 | legend2_->AddEntry(fHist[0].Y,Form("%1.4f",fHist[1].Y->Integral("width")), "l"); | |
227 | legend2_->AddEntry(fHist[2].Y,Form("%1.4f",fHist[2].Y->Integral("width")), "l"); | |
228 | legend2_->AddEntry(fHist[3].Y,Form("%1.4f",fHist[3].Y->Integral("width")), "l"); | |
229 | if(qtype==5) legend2_->AddEntry(fHist[4].Y,Form("%1.4f",fHist[4].Y->Integral("width")), "l"); | |
230 | legend2_->AddEntry(fHist[5].Y,Form("%1.4f",fHist[5].Y->Integral("width")), "l"); | |
231 | if(qtype==5) legend2_->AddEntry(fHist[6].Y,Form("%1.4f",fHist[6].Y->Integral("width")), "l"); | |
232 | ||
233 | cY->cd(); | |
234 | legend2_->Draw(); | |
235 | ||
236 | TLegend *legend3 = new TLegend(0.35,0.80,0.88,0.88,""); | |
237 | setLegendStyle(*legend3,0); | |
238 | legend3->AddEntry(fHistComm.Nq,"semi-leptonic decay", ""); | |
239 | ||
240 | cNq->cd(); | |
241 | legend3->Draw(); | |
242 | ||
243 | Double_t totcrossNLO=0; | |
244 | Double_t scalefactorNLO=0; | |
245 | Double_t totcrossNLOY=0; | |
246 | Double_t scalefactorNLOY=0; | |
247 | if(qtype==4) { | |
248 | //TH1F *hNLO = (TH1F*)_file[1]->Get("hpt_c"); | |
249 | TH1F *hNLO = (TH1F*)_file[1]->Get("hptQwkick"); | |
250 | TH1F *hNLOY = (TH1F*)_file[1]->Get("hyQwkick"); | |
251 | } | |
252 | if(qtype==5) { | |
253 | //if(qtype==5) TH1F *hNLO = (TH1F*)_file[1]->Get("hpt_b"); | |
254 | TH1F *hNLO = (TH1F*)_file[1]->Get("hptQwkick"); | |
255 | TH1F *hNLOY = (TH1F*)_file[1]->Get("hyQwkick"); | |
256 | } | |
257 | // pt | |
258 | totcrossNLO = hNLO->Integral("width"); | |
259 | hNLO->SetMarkerStyle(3); | |
260 | hNLO->SetMarkerColor(1); | |
261 | hNLO->SetLineColor(1); | |
262 | hNLO->SetLineWidth(2); | |
263 | scalefactorNLO = (fHist[1].Pt->Integral("width"))/totcrossNLO; // normalize to the b-bbar total cross section | |
264 | hNLO->Scale(scalefactorNLO); | |
265 | // rapidity | |
266 | totcrossNLOY = hNLOY->Integral("width"); | |
267 | hNLOY->SetMarkerStyle(3); | |
268 | hNLOY->SetMarkerColor(1); | |
269 | hNLOY->SetLineColor(1); | |
270 | hNLOY->SetLineWidth(2); | |
271 | scalefactorNLOY = (fHist[1].Y->Integral("width"))/totcrossNLOY; // normalize to the b-bbar total cross section | |
272 | hNLOY->Scale(scalefactorNLOY); | |
273 | ||
274 | cPt->cd(); | |
275 | hNLO->Draw("samep"); | |
276 | if(qtype==4) legend1->AddEntry(hNLO,"charm from NLO", "lp"); | |
277 | if(qtype==5) legend1->AddEntry(hNLO,"bottom from NLO", "lp"); | |
278 | legend1->Draw(); | |
279 | ||
280 | cY->cd(); | |
281 | hNLOY->Draw("samep"); | |
282 | if(qtype==4) legend2->AddEntry(hNLOY,"charm from NLO", "lp"); | |
283 | if(qtype==5) legend2->AddEntry(hNLOY,"bottom from NLO", "lp"); | |
284 | legend2->Draw(); | |
285 | } | |
286 | ||
287 | //-------------------------- | |
288 | void DrawDifferentialYieldBoth(char *filename, char *NLOcalc){ | |
289 | ||
290 | TFile *_file[1]; | |
291 | _file[0] = TFile::Open(filename); | |
292 | _file[1] = TFile::Open(NLOcalc); | |
293 | ||
294 | setGeneralStyle(); | |
295 | char configname[]="mcQA"; | |
296 | enum qType {kQuark, kantiQuark, kHadron, kElec, kElec2nd, keHadron, kDeHadron}; | |
297 | const Int_t fgkqType=7; | |
298 | ||
299 | struct hists { | |
300 | TH1F *Pt; | |
301 | TH1F *Eta; | |
302 | TH1F *Y; | |
303 | }; | |
304 | ||
305 | hists fHist[2][7]; | |
306 | ||
307 | TString kqTypeLabel[2][fgkqType]; | |
308 | kqTypeLabel[0][kQuark]="c"; | |
309 | kqTypeLabel[0][kantiQuark]="cbar"; | |
310 | kqTypeLabel[0][kHadron]="cHadron"; | |
311 | kqTypeLabel[0][kElec]="ce"; | |
312 | kqTypeLabel[0][kElec2nd]="nulle"; | |
313 | kqTypeLabel[0][keHadron]="ceHadron"; | |
314 | kqTypeLabel[0][kDeHadron]="nullHadron"; | |
315 | kqTypeLabel[1][kQuark]="b"; | |
316 | kqTypeLabel[1][kantiQuark]="bbar"; | |
317 | kqTypeLabel[1][kHadron]="bHadron"; | |
318 | kqTypeLabel[1][kElec]="be"; | |
319 | kqTypeLabel[1][kElec2nd]="bce"; | |
320 | kqTypeLabel[1][keHadron]="beHadron"; | |
321 | kqTypeLabel[1][kDeHadron]="bDeHadron"; | |
322 | ||
323 | Int_t kColorCode[2][fgkqType]; | |
324 | for(Int_t iq=0; iq<7; iq++){ | |
325 | kColorCode[0][iq]=4; | |
326 | kColorCode[1][iq]=2; | |
327 | } | |
328 | ||
329 | Int_t kLineStyle[fgkqType]; | |
330 | kLineStyle[kQuark]=1; | |
331 | kLineStyle[kantiQuark]=1; | |
332 | kLineStyle[kHadron]=2; | |
333 | kLineStyle[kElec]=2; | |
334 | kLineStyle[kElec2nd]=1; | |
335 | kLineStyle[keHadron]=2; | |
336 | kLineStyle[kDeHadron]=1; | |
337 | ||
338 | ||
339 | cPt = new TCanvas("cPt","pT of Quark & Hadron",0,0,600,500); | |
340 | cY = new TCanvas("cY","rapidity of Quark & Hadron",0,0,600,500); | |
341 | ||
342 | cPtElec = new TCanvas("cPtElec","pT of Electron",0,0,600,500); | |
343 | cYQElec = new TCanvas("cYElec","rapidity of Electron",0,0,600,500); | |
344 | ||
345 | TList *tl = (TList *)_file[0]->Get("HFE_QA")->FindObject("MCqa"); | |
346 | //count # of events | |
347 | TList *tl_result = (TList *)_file[0]->Get("HFE_Results"); | |
348 | AliHFEcontainer *containerhfe = (AliHFEcontainer *) tl_result->FindObject("trackContainer"); | |
349 | if(!containerhfe) { | |
350 | printf("No hfe container \n"); | |
351 | return; | |
352 | } | |
353 | Int_t nEvt = (Int_t) containerhfe->GetNumberOfEvents(); | |
354 | cout << "# of events " << nEvt << endl; | |
355 | ||
356 | Double_t scalefactor = 1./float(nEvt); //normalize with total number of event | |
357 | ||
358 | TString hname; | |
359 | for (Int_t iHQ= 0; iHQ < 2; iHQ++ ){ | |
360 | for (Int_t iqType = 0; iqType < fgkqType; iqType++ ){ | |
361 | ||
362 | //pT distribution | |
363 | hname="mcqa_Pt_"; | |
364 | hname=hname+kqTypeLabel[iHQ][iqType]; | |
365 | fHist[iHQ][iqType].Pt = (TH1F*)tl->FindObject(hname); | |
366 | fHist[iHQ][iqType].Pt->SetXTitle("p_{t} [GeV/c]"); | |
367 | fHist[iHQ][iqType].Pt->SetYTitle("1/N_{Evt}dN/dp_{t} [1/GeVc^{-1}]"); | |
368 | setDataStyle(*fHist[iHQ][iqType].Pt, kColorCode[iHQ][iqType], 3, kLineStyle[iqType]); | |
369 | ||
370 | CorrectFromTheWidth(fHist[iHQ][iqType].Pt); //consider pT bin size | |
371 | fHist[iHQ][iqType].Pt->Scale(scalefactor); //normalize with # of events | |
372 | if (iqType==1) { | |
373 | fHist[iHQ][iqType].Pt->Add(fHist[iHQ][0].Pt); // Q+Qbar | |
374 | fHist[iHQ][iqType].Pt->Scale(0.5); // pair | |
375 | } | |
376 | ||
377 | //eta and rapidity distribution | |
378 | hname="mcqa_Eta_"; | |
379 | hname=hname+kqTypeLabel[iHQ][iqType]; | |
380 | fHist[iHQ][iqType].Eta = (TH1F*)tl->FindObject(hname); | |
381 | hname="mcqa_Y_"; | |
382 | hname=hname+kqTypeLabel[iHQ][iqType]; | |
383 | fHist[iHQ][iqType].Y = (TH1F*)tl->FindObject(hname); | |
384 | fHist[iHQ][iqType].Y->SetXTitle("Y"); | |
385 | fHist[iHQ][iqType].Y->SetYTitle("1/N_{Evt}dN/dY"); | |
386 | setDataStyle(*fHist[iHQ][iqType].Y, kColorCode[iHQ][iqType], 3, kLineStyle[iqType]); | |
387 | ||
388 | CorrectFromTheWidth(fHist[iHQ][iqType].Y); //consider Y bin size | |
389 | fHist[iHQ][iqType].Y->Scale(scalefactor); //normalize with # of events | |
390 | if (iqType==1) { | |
391 | fHist[iHQ][iqType].Y->Add(fHist[iHQ][0].Y); // Q+Qbar | |
392 | fHist[iHQ][iqType].Y->Scale(0.5); // pair | |
393 | } | |
394 | } | |
395 | } | |
396 | ||
397 | Int_t iorder[2] = {0,1}; | |
398 | if (fHist[0][1].Pt->GetEntries() < fHist[1][1].Pt->GetEntries()) {iorder[0]=1; iorder[1]=0;}; | |
399 | ||
400 | cPt->cd(); | |
401 | setPadStyle(2,gPad); | |
402 | fHist[iorder[0]][1].Pt->Draw(); | |
403 | fHist[iorder[1]][1].Pt->Draw("same"); | |
404 | fHist[iorder[0]][2].Pt->Draw("same"); | |
405 | fHist[iorder[1]][2].Pt->Draw("same"); | |
406 | ||
407 | cY->cd(); | |
408 | setPadStyle(2,gPad); | |
409 | fHist[iorder[0]][1].Y->Draw(); | |
410 | fHist[iorder[1]][1].Y->Draw("same"); | |
411 | fHist[iorder[0]][2].Y->Draw("same"); | |
412 | fHist[iorder[1]][2].Y->Draw("same"); | |
413 | ||
414 | cPtElec->cd(); | |
415 | setPadStyle(2,gPad); | |
416 | fHist[iorder[0]][3].Pt->Draw(); | |
417 | fHist[iorder[1]][3].Pt->Draw("same"); | |
418 | fHist[1][4].Pt->Draw("same"); | |
419 | ||
420 | cYElec->cd(); | |
421 | setPadStyle(2,gPad); | |
422 | fHist[iorder[0]][3].Y->Draw(); | |
423 | fHist[iorder[1]][3].Y->Draw("same"); | |
424 | fHist[1][4].Y->Draw("same"); | |
425 | ||
426 | ||
427 | TLegend *legend1 = new TLegend(0.50,0.77,0.98,0.99,""); | |
428 | setLegendStyle(*legend1,1); | |
429 | for (Int_t iHQ= 0; iHQ < 2; iHQ++ ){ | |
430 | legend1->AddEntry(fHist[iHQ][0].Pt,kqTypeLabel[iHQ][kQuark]+"#bar{"+kqTypeLabel[iHQ][kQuark]+"}"+" pair", "l"); | |
431 | legend1->AddEntry(fHist[iHQ][2].Pt,kqTypeLabel[iHQ][kQuark]+" hadrons from "+kqTypeLabel[iHQ][kQuark], "l"); | |
432 | } | |
433 | TLegend *legend1_ = new TLegend(0.65,0.42,0.90,0.72,""); | |
434 | setLegendStyle(*legend1_,1); | |
435 | legend1_->AddEntry(fHist[0][0].Pt,"Yield per event", ""); | |
436 | legend1_->AddEntry(fHist[0][0].Pt,"(0.1<p_{t}<20)", ""); | |
437 | for (Int_t iHQ= 0; iHQ < 2; iHQ++ ){ | |
438 | legend1_->AddEntry(fHist[iHQ][0].Pt,Form("%1.4f",fHist[iHQ][1].Pt->Integral("width")), "l"); | |
439 | legend1_->AddEntry(fHist[iHQ][2].Pt,Form("%1.4f",fHist[iHQ][2].Pt->Integral("width")), "l"); | |
440 | } | |
441 | ||
442 | TLegend *legend2 = new TLegend(0.50,0.77,0.98,0.99,""); | |
443 | setLegendStyle(*legend2,1); | |
444 | for (Int_t iHQ= 0; iHQ < 2; iHQ++ ){ | |
445 | legend2->AddEntry(fHist[iHQ][3].Pt,"elec. from "+kqTypeLabel[iHQ][kQuark]+"->e", "l"); | |
446 | if(iHQ==1) legend2->AddEntry(fHist[iHQ][4].Pt,"elec. from "+kqTypeLabel[iHQ][kQuark]+"->c->e", "l"); | |
447 | } | |
448 | TLegend *legend2_ = new TLegend(0.65,0.42,0.90,0.72,""); | |
449 | setLegendStyle(*legend2_,1); | |
450 | legend2_->AddEntry(fHist[0][0].Pt,"Yield per event", ""); | |
451 | legend2_->AddEntry(fHist[0][0].Pt,"(0.1<p_{t}<20)", ""); | |
452 | for (Int_t iHQ= 0; iHQ < 2; iHQ++ ){ | |
453 | legend2_->AddEntry(fHist[iHQ][3].Pt,Form("%1.4f",fHist[iHQ][3].Pt->Integral("width")), "l"); | |
454 | if(iHQ==1) legend2_->AddEntry(fHist[iHQ][4].Pt,Form("%1.4f",fHist[iHQ][4].Pt->Integral("width")), "l"); | |
455 | } | |
456 | ||
457 | ||
458 | TLegend *legend3 = new TLegend(0.26,0.15,0.74,0.37,""); | |
459 | setLegendStyle(*legend3,1); | |
460 | for (Int_t iHQ= 0; iHQ < 2; iHQ++ ){ | |
461 | legend3->AddEntry(fHist[iHQ][0].Y,kqTypeLabel[iHQ][kQuark]+"#bar{"+kqTypeLabel[iHQ][kQuark]+"}"+" pair", "l"); | |
462 | legend3->AddEntry(fHist[iHQ][2].Y,kqTypeLabel[iHQ][kQuark]+" hadrons from "+kqTypeLabel[iHQ][kQuark], "l"); | |
463 | } | |
464 | TLegend *legend3_ = new TLegend(0.70,0.77,0.98,0.99,""); | |
465 | setLegendStyle(*legend3_,1); | |
466 | legend3_->AddEntry(fHist[0][0].Y,"Yield per event", ""); | |
467 | legend3_->AddEntry(fHist[0][0].Y,"(all p_{t},-7.5<Y<7.5)", ""); | |
468 | for (Int_t iHQ= 0; iHQ < 2; iHQ++ ){ | |
469 | legend3_->AddEntry(fHist[iHQ][0].Y,Form("%1.4f",fHist[iHQ][1].Y->Integral("width")), "l"); | |
470 | legend3_->AddEntry(fHist[iHQ][2].Y,Form("%1.4f",fHist[iHQ][2].Y->Integral("width")), "l"); | |
471 | } | |
472 | ||
473 | TLegend *legend4 = new TLegend(0.30,0.15,0.70,0.27,""); | |
474 | setLegendStyle(*legend4,1); | |
475 | for (Int_t iHQ= 0; iHQ < 2; iHQ++ ){ | |
476 | legend4->AddEntry(fHist[iHQ][3].Y,"elec. from "+kqTypeLabel[iHQ][kQuark]+"->e", "l"); | |
477 | if(iHQ==1) legend4->AddEntry(fHist[iHQ][4].Y,"elec. from "+kqTypeLabel[iHQ][kQuark]+"->c->e", "l"); | |
478 | } | |
479 | TLegend *legend4_ = new TLegend(0.70,0.82,0.98,0.99,""); | |
480 | setLegendStyle(*legend4_,1); | |
481 | legend4_->AddEntry(fHist[0][0].Y,"Yield per event", ""); | |
482 | legend4_->AddEntry(fHist[0][0].Y,"(all p_{t},-7.5<Y<7.5)", ""); | |
483 | for (Int_t iHQ= 0; iHQ < 2; iHQ++ ){ | |
484 | legend4_->AddEntry(fHist[iHQ][3].Y,Form("%1.4f",fHist[iHQ][3].Y->Integral("width")), "l"); | |
485 | if(iHQ==1) legend4_->AddEntry(fHist[iHQ][4].Y,Form("%1.4f",fHist[iHQ][4].Y->Integral("width")), "l"); | |
486 | } | |
487 | ||
488 | ||
489 | cPt->cd(); | |
490 | legend1->Draw(); | |
491 | legend1_->Draw(); | |
492 | ||
493 | cPtElec->cd(); | |
494 | legend2->Draw(); | |
495 | legend2_->Draw(); | |
496 | ||
497 | cY->cd(); | |
498 | legend3->Draw(); | |
499 | legend3_->Draw(); | |
500 | ||
501 | cYElec->cd(); | |
502 | legend4->Draw(); | |
503 | legend4_->Draw(); | |
504 | ||
505 | TH1F *hNLOc = (TH1F*)_file[1]->Get("hpt_c"); | |
506 | TH1F *hNLOb = (TH1F*)_file[1]->Get("hpt_b"); | |
507 | Double_t ctotcrossNLO = hNLOc->Integral("width"); | |
508 | Double_t btotcrossNLO = hNLOb->Integral("width"); | |
509 | Double_t cscalefactorNLO = (fHist[0][1].Pt->Integral("width"))/ctotcrossNLO; // normalize to the b-bbar total cross section | |
510 | Double_t bscalefactorNLO = (fHist[1][1].Pt->Integral("width"))/btotcrossNLO; // normalize to the b-bbar total cross section | |
511 | hNLOc->Scale(cscalefactorNLO); | |
512 | hNLOb->Scale(bscalefactorNLO); | |
513 | cPt->cd(); | |
514 | hNLOc->SetMarkerStyle(28); | |
515 | hNLOb->SetMarkerStyle(3); | |
516 | hNLOc->SetMarkerColor(1); | |
517 | hNLOb->SetMarkerColor(1); | |
518 | hNLOc->Draw("samep"); | |
519 | hNLOb->Draw("samep"); | |
520 | legend1->AddEntry(hNLOc,"charm from NLO", "p"); | |
521 | legend1->AddEntry(hNLOb,"bottom from NLO", "p"); | |
522 | legend1->Draw(); | |
523 | ||
524 | } | |
525 | ||
526 | ||
527 | //-------------------------- | |
528 | void DrawDifferentialYieldAcc(char *filename){ | |
529 | ||
530 | TFile *_file[1]; | |
531 | _file[0] = TFile::Open(filename); | |
532 | ||
533 | setGeneralStyle(); | |
534 | char configname[]="mcQA"; | |
535 | enum qType {kQuark, kantiQuark, kHadron, kElec, kElec2nd, keHadron, kDeHadron}; | |
536 | const Int_t fgkqType=7; | |
537 | ||
538 | struct hists { | |
539 | TH1F *Pt; | |
540 | TH1F *Eta; | |
541 | TH1F *Y; | |
542 | TH1F *barrel_Pt; | |
543 | TH1F *barrel_Eta; | |
544 | TH1F *barrel_Y; | |
545 | }; | |
546 | ||
547 | hists fHist[2][7]; | |
548 | ||
549 | TString kqTypeLabel[2][fgkqType]; | |
550 | kqTypeLabel[0][kQuark]="c"; | |
551 | kqTypeLabel[0][kElec]="ce"; | |
552 | kqTypeLabel[0][kElec2nd]="nulle"; | |
553 | kqTypeLabel[1][kQuark]="b"; | |
554 | kqTypeLabel[1][kElec]="be"; | |
555 | kqTypeLabel[1][kElec2nd]="bce"; | |
556 | ||
557 | Int_t kColorCode[2][fgkqType][2]; | |
558 | for(Int_t iq=0; iq<7; iq++){ | |
559 | kColorCode[0][iq][0]=kRed; | |
560 | kColorCode[1][iq][0]=kBlue; | |
561 | } | |
562 | kColorCode[1][kElec2nd][0]=kBlack; | |
563 | ||
564 | Int_t kMarkerStyle[2][2][fgkqType]; | |
565 | kMarkerStyle[0][0][kElec]=24; | |
566 | kMarkerStyle[0][1][kElec]=25; | |
567 | kMarkerStyle[1][0][kElec]=20; | |
568 | kMarkerStyle[1][1][kElec]=21; | |
569 | kMarkerStyle[0][1][kElec2nd]=25; | |
570 | kMarkerStyle[1][1][kElec2nd]=21; | |
571 | ||
572 | Int_t kLineStyle[fgkqType]; | |
573 | kLineStyle[kElec]=1; | |
574 | kLineStyle[kElec2nd]=1; | |
575 | ||
576 | cPtElec = new TCanvas("cPtElec","pT of Electron",0,0,600,500); | |
577 | cYQElec = new TCanvas("cYElec","rapidity of Electron",0,0,600,500); | |
578 | ||
579 | TList *tl = (TList *)_file[0]->Get("HFE_QA")->FindObject("MCqa"); | |
580 | //count # of events | |
581 | TList *tl_result = (TList *)_file[0]->Get("HFE_Results"); | |
582 | AliHFEcontainer *containerhfe = (AliHFEcontainer *) tl_result->FindObject("trackContainer"); | |
583 | if(!containerhfe) { | |
584 | printf("No hfe container \n"); | |
585 | return; | |
586 | } | |
587 | Int_t nEvt = (Int_t) containerhfe->GetNumberOfEvents(); | |
588 | cout << "# of events " << nEvt << endl; | |
589 | ||
590 | Double_t scalefactor = 1./float(nEvt); //normalize with total number of event | |
591 | ||
592 | TString hname; | |
593 | for (Int_t iHQ= 0; iHQ < 2; iHQ++ ){ | |
594 | for (Int_t iqType = 3; iqType < 5; iqType++ ){ | |
595 | ||
596 | //pT distribution | |
597 | hname="mcqa_Pt_"; | |
598 | hname=hname+kqTypeLabel[iHQ][iqType]; | |
599 | fHist[iHQ][iqType].Pt = (TH1F*)tl->FindObject(hname); | |
600 | fHist[iHQ][iqType].Pt->SetXTitle("p_{t} [GeV/c]"); | |
601 | fHist[iHQ][iqType].Pt->SetYTitle("1/N_{Evt}dN/dp_{t} [1/GeVc^{-1}]"); | |
602 | setDataStyle(*fHist[iHQ][iqType].Pt, kColorCode[iHQ][iqType][0], 1, kLineStyle[iqType]); | |
603 | fHist[iHQ][iqType].Pt->SetMarkerStyle(kMarkerStyle[0][iHQ][iqType]); | |
604 | ||
605 | fHist[iHQ][iqType].Pt->Sumw2(); | |
606 | CorrectFromTheWidth(fHist[iHQ][iqType].Pt); //consider pT bin size | |
607 | fHist[iHQ][iqType].Pt->Scale(scalefactor); //normalize with # of events | |
608 | fHist[iHQ][iqType].Pt->Scale(0.5); //to get (e+e-)/2 | |
609 | ||
610 | hname="mcqa_barrel_Pt_"; | |
611 | hname=hname+kqTypeLabel[iHQ][iqType]; | |
612 | fHist[iHQ][iqType].barrel_Pt = (TH1F*)tl->FindObject(hname); | |
613 | fHist[iHQ][iqType].barrel_Pt->SetXTitle("p_{t} [GeV/c]"); | |
614 | fHist[iHQ][iqType].barrel_Pt->SetYTitle("1/N_{Evt}dN/dp_{t} [1/GeVc^{-1}]"); | |
615 | setDataStyle(*fHist[iHQ][iqType].barrel_Pt, kColorCode[iHQ][iqType][0], 1, kLineStyle[iqType]); | |
616 | fHist[iHQ][iqType].barrel_Pt->SetMarkerStyle(kMarkerStyle[1][iHQ][iqType]); | |
617 | ||
618 | fHist[iHQ][iqType].barrel_Pt->Sumw2(); | |
619 | CorrectFromTheWidth(fHist[iHQ][iqType].barrel_Pt); //consider pT bin size | |
620 | fHist[iHQ][iqType].barrel_Pt->Scale(scalefactor); //normalize with # of events | |
621 | fHist[iHQ][iqType].barrel_Pt->Scale(0.5); //to get (e+e-)/2 | |
622 | ||
623 | ||
624 | //eta and rapidity distribution | |
625 | hname="mcqa_Eta_"; | |
626 | hname=hname+kqTypeLabel[iHQ][iqType]; | |
627 | fHist[iHQ][iqType].Eta = (TH1F*)tl->FindObject(hname); | |
628 | hname="mcqa_Y_"; | |
629 | hname=hname+kqTypeLabel[iHQ][iqType]; | |
630 | fHist[iHQ][iqType].Y = (TH1F*)tl->FindObject(hname); | |
631 | fHist[iHQ][iqType].Y->SetXTitle("Y"); | |
632 | fHist[iHQ][iqType].Y->SetYTitle("1/N_{Evt}dN/dY"); | |
633 | setDataStyle(*fHist[iHQ][iqType].Y, kColorCode[iHQ][iqType][0], 1, kLineStyle[iqType]); | |
634 | fHist[iHQ][iqType].Y->SetMarkerStyle(kMarkerStyle[0][1][iqType]); | |
635 | ||
636 | fHist[iHQ][iqType].Y->Rebin(2); | |
637 | fHist[iHQ][iqType].Y->Sumw2(); | |
638 | CorrectFromTheWidth(fHist[iHQ][iqType].Y); //consider Y bin size | |
639 | fHist[iHQ][iqType].Y->Scale(scalefactor); //normalize with # of events | |
640 | fHist[iHQ][iqType].Y->Scale(0.5); //to get (e+e-)/2 | |
641 | ||
642 | hname="mcqa_barrel_Eta_"; | |
643 | hname=hname+kqTypeLabel[iHQ][iqType]; | |
644 | fHist[iHQ][iqType].barrel_Eta = (TH1F*)tl->FindObject(hname); | |
645 | hname="mcqa_barrel_Y_"; | |
646 | hname=hname+kqTypeLabel[iHQ][iqType]; | |
647 | fHist[iHQ][iqType].barrel_Y = (TH1F*)tl->FindObject(hname); | |
648 | fHist[iHQ][iqType].barrel_Y->SetXTitle("Y"); | |
649 | fHist[iHQ][iqType].barrel_Y->SetYTitle("1/N_{Evt}dN/dY"); | |
650 | setDataStyle(*fHist[iHQ][iqType].barrel_Y, kColorCode[iHQ][iqType][0], 1, kLineStyle[iqType]); | |
651 | fHist[iHQ][iqType].barrel_Y->SetMarkerStyle(kMarkerStyle[1][iHQ][iqType]); | |
652 | ||
653 | fHist[iHQ][iqType].barrel_Y->Rebin(2); | |
654 | fHist[iHQ][iqType].barrel_Y->Sumw2(); | |
655 | CorrectFromTheWidth(fHist[iHQ][iqType].barrel_Y); //consider Y bin size | |
656 | fHist[iHQ][iqType].barrel_Y->Scale(scalefactor); //normalize with # of events | |
657 | fHist[iHQ][iqType].barrel_Y->Scale(0.5); //to get (e+e-)/2 | |
658 | } | |
659 | } | |
660 | ||
661 | Int_t iorder[2] = {0,1}; | |
662 | if (fHist[0][3].Pt->GetEntries() < fHist[1][3].Pt->GetEntries()) {iorder[0]=1; iorder[1]=0;}; | |
663 | ||
664 | cPtElec->cd(); | |
665 | setPadStyle(2,gPad); | |
666 | fHist[iorder[0]][3].Pt->SetAxisRange(0,10,"X"); | |
667 | fHist[iorder[0]][3].Pt->Draw("p"); | |
668 | fHist[iorder[1]][3].Pt->Draw("samep"); | |
669 | fHist[1][4].Pt->Draw("samep"); | |
670 | fHist[iorder[0]][3].barrel_Pt->Draw("samep"); | |
671 | fHist[iorder[1]][3].barrel_Pt->Draw("samep"); | |
672 | fHist[1][4].barrel_Pt->Draw("samep"); | |
673 | ||
674 | cYElec->cd(); | |
675 | setPadStyle(2,gPad); | |
676 | fHist[iorder[0]][3].Y->Draw(); | |
677 | fHist[iorder[1]][3].Y->Draw("same"); | |
678 | fHist[1][4].Y->Draw("same"); | |
679 | fHist[iorder[0]][3].barrel_Y->Draw("samelp"); | |
680 | fHist[iorder[1]][3].barrel_Y->Draw("samelp"); | |
681 | fHist[1][4].barrel_Y->Draw("samelp"); | |
682 | ||
683 | ||
684 | TLegend *legend2 = new TLegend(0.62,0.74,0.98,0.99,""); | |
685 | setLegendStyle(*legend2,1); | |
686 | for (Int_t iHQ= 0; iHQ < 2; iHQ++ ){ | |
687 | legend2->AddEntry(fHist[iHQ][3].Pt,"(e+e^{-})/2, "+kqTypeLabel[iHQ][kQuark]+"->e", "p"); | |
688 | legend2->AddEntry(fHist[iHQ][3].barrel_Pt,"(e+e^{-})/2, "+kqTypeLabel[iHQ][kQuark]+"->e |#eta<0.9|", "p"); | |
689 | if(iHQ==1) legend2->AddEntry(fHist[iHQ][4].Pt,"(e+e^{-})/2, "+kqTypeLabel[iHQ][kQuark]+"->c->e", "p"); | |
690 | if(iHQ==1) legend2->AddEntry(fHist[iHQ][4].barrel_Pt,"(e+e^{-})/2, "+kqTypeLabel[iHQ][kQuark]+"->c->e |#eta<0.9|", "p"); | |
691 | } | |
692 | TLegend *legend2_ = new TLegend(0.62,0.42,0.98,0.72,""); | |
693 | setLegendStyle(*legend2_,1); | |
694 | legend2_->AddEntry(fHist[0][0].Pt,"(e+e^{-})/2, yield per event", ""); | |
695 | legend2_->AddEntry(fHist[0][0].Pt,"(0.1<p_{t}<20)", ""); | |
696 | for (Int_t iHQ= 0; iHQ < 2; iHQ++ ){ | |
697 | legend2_->AddEntry(fHist[iHQ][3].Pt,Form("%1.4f",fHist[iHQ][3].Pt->Integral("width")), "p"); | |
698 | legend2_->AddEntry(fHist[iHQ][3].barrel_Pt,Form("%1.4f",fHist[iHQ][3].barrel_Pt->Integral("width")), "p"); | |
699 | if(iHQ==1) legend2_->AddEntry(fHist[iHQ][4].Pt,Form("%1.4f",fHist[iHQ][4].Pt->Integral("width")), "p"); | |
700 | if(iHQ==1) legend2_->AddEntry(fHist[iHQ][4].barrel_Pt,Form("%1.4f",fHist[iHQ][4].barrel_Pt->Integral("width")), "p"); | |
701 | } | |
702 | ||
703 | ||
704 | TLegend *legend4 = new TLegend(0.30,0.12,0.70,0.36,""); | |
705 | setLegendStyle(*legend4,1); | |
706 | for (Int_t iHQ= 0; iHQ < 2; iHQ++ ){ | |
707 | legend4->AddEntry(fHist[iHQ][3].Y,"(e+e^{-})/2, "+kqTypeLabel[iHQ][kQuark]+"->e", "p"); | |
708 | legend4->AddEntry(fHist[iHQ][3].barrel_Y,"(e+e^{-})/2, "+kqTypeLabel[iHQ][kQuark]+"->e |#eta<0.9|", "p"); | |
709 | if(iHQ==1) legend4->AddEntry(fHist[iHQ][4].Y,"(e+e^{-})/2, "+kqTypeLabel[iHQ][kQuark]+"->c->e", "p"); | |
710 | if(iHQ==1) legend4->AddEntry(fHist[iHQ][4].barrel_Y,"(e+e^{-})/2, "+kqTypeLabel[iHQ][kQuark]+"->c->e |#eta<0.9|", "p"); | |
711 | } | |
712 | TLegend *legend4_ = new TLegend(0.65,0.72,0.98,0.99,""); | |
713 | setLegendStyle(*legend4_,1); | |
714 | legend4_->AddEntry(fHist[0][0].Y,"(e+e^{-})/2, yield per event", ""); | |
715 | legend4_->AddEntry(fHist[0][0].Y,"(all p_{t})", ""); | |
716 | for (Int_t iHQ= 0; iHQ < 2; iHQ++ ){ | |
717 | legend4_->AddEntry(fHist[iHQ][3].Y,Form("%1.4f",fHist[iHQ][3].Y->Integral("width")), "p"); | |
718 | legend4_->AddEntry(fHist[iHQ][3].barrel_Y,Form("%1.4f",fHist[iHQ][3].barrel_Y->Integral("width")), "p"); | |
719 | if(iHQ==1) legend4_->AddEntry(fHist[iHQ][4].Y,Form("%1.4f",fHist[iHQ][4].Y->Integral("width")), "p"); | |
720 | if(iHQ==1) legend4_->AddEntry(fHist[iHQ][4].barrel_Y,Form("%1.4f",fHist[iHQ][4].barrel_Y->Integral("width")), "p"); | |
721 | } | |
722 | ||
723 | ||
724 | cPtElec->cd(); | |
725 | legend2->Draw(); | |
726 | legend2_->Draw(); | |
727 | ||
728 | cYElec->cd(); | |
729 | legend4->Draw(); | |
730 | legend4_->Draw(); | |
731 | ||
732 | } | |
733 | ||
734 | //-------------------------- | |
735 | void DrawDifferentialXsectionBoth(char *filename, char *NLOcalc){ | |
736 | ||
737 | TFile *_file[1]; | |
738 | _file[0] = TFile::Open(filename); | |
739 | _file[1] = TFile::Open(NLOcalc); | |
740 | ||
741 | setGeneralStyle(); | |
742 | char configname[]="mcQA"; | |
743 | enum qType {kQuark, kantiQuark, kHadron, kElec, kElec2nd, keHadron, kDeHadron}; | |
744 | const Int_t fgkqType=7; | |
745 | ||
746 | struct hists { | |
747 | TH1F *Pt; | |
748 | }; | |
749 | ||
750 | hists fHist[2][7]; | |
751 | ||
752 | TString kqTypeLabel[2][fgkqType]; | |
753 | kqTypeLabel[0][kQuark]="c"; | |
754 | kqTypeLabel[0][kantiQuark]="cbar"; | |
755 | kqTypeLabel[0][kHadron]="cHadron"; | |
756 | kqTypeLabel[0][kElec]="ce"; | |
757 | kqTypeLabel[0][kElec2nd]="nulle"; | |
758 | kqTypeLabel[0][keHadron]="ceHadron"; | |
759 | kqTypeLabel[0][kDeHadron]="nullHadron"; | |
760 | kqTypeLabel[1][kQuark]="b"; | |
761 | kqTypeLabel[1][kantiQuark]="bbar"; | |
762 | kqTypeLabel[1][kHadron]="bHadron"; | |
763 | kqTypeLabel[1][kElec]="be"; | |
764 | kqTypeLabel[1][kElec2nd]="bce"; | |
765 | kqTypeLabel[1][keHadron]="beHadron"; | |
766 | kqTypeLabel[1][kDeHadron]="bDeHadron"; | |
767 | ||
768 | Int_t kColorCode[2][fgkqType]; | |
769 | for(Int_t iq=0; iq<7; iq++){ | |
770 | kColorCode[0][iq]=4; | |
771 | kColorCode[1][iq]=2; | |
772 | } | |
773 | ||
774 | Int_t kLineStyle[fgkqType]; | |
775 | kLineStyle[kQuark]=1; | |
776 | kLineStyle[kantiQuark]=1; | |
777 | kLineStyle[kHadron]=2; | |
778 | kLineStyle[kElec]=2; | |
779 | kLineStyle[kElec2nd]=1; | |
780 | kLineStyle[keHadron]=2; | |
781 | kLineStyle[kDeHadron]=1; | |
782 | ||
783 | ||
784 | cPt = new TCanvas("cPt","pT of Quark & Hadron",0,0,600,500); | |
785 | ||
786 | Double_t totcrossNLO[2]; | |
787 | TH1F *hNLOc = (TH1F*)_file[1]->Get("hpt_c"); | |
788 | TH1F *hNLOb = (TH1F*)_file[1]->Get("hpt_b"); | |
789 | totcrossNLO[0] = hNLOc->Integral("width"); | |
790 | totcrossNLO[1] = hNLOb->Integral("width"); | |
791 | cPt->cd(); | |
792 | setPadStyle(2,gPad); | |
793 | hNLOc->SetMarkerStyle(28); | |
794 | hNLOb->SetMarkerStyle(3); | |
795 | hNLOc->SetMarkerColor(1); | |
796 | hNLOb->SetMarkerColor(1); | |
797 | hNLOc->Draw("p"); | |
798 | hNLOb->Draw("samep"); | |
799 | ||
800 | ||
801 | TList *tl = (TList *)_file[0]->Get("HFE_QA")->FindObject("MCqa"); | |
802 | //count # of events | |
803 | TList *tl_result = (TList *)_file[0]->Get("HFE_Results"); | |
804 | AliHFEcontainer *containerhfe = (AliHFEcontainer *) tl_result->FindObject("trackContainer"); | |
805 | if(!containerhfe) { | |
806 | printf("No hfe container \n"); | |
807 | return; | |
808 | } | |
809 | Int_t nEvt = (Int_t) containerhfe->GetNumberOfEvents(); | |
810 | cout << "# of events " << nEvt << endl; | |
811 | ||
812 | Double_t scalefactor = 1./float(nEvt); //normalize with total number of event | |
813 | ||
814 | TString hname; | |
815 | for (Int_t iHQ= 0; iHQ < 2; iHQ++ ){ | |
816 | for (Int_t iqType = 0; iqType < 3; iqType++ ){ | |
817 | ||
818 | //pT distribution | |
819 | hname="mcqa_Pt_"; | |
820 | hname=hname+kqTypeLabel[iHQ][iqType]; | |
821 | fHist[iHQ][iqType].Pt = (TH1F*)tl->FindObject(hname); | |
822 | fHist[iHQ][iqType].Pt->SetXTitle("p_{t} [GeV/c]"); | |
823 | fHist[iHQ][iqType].Pt->SetYTitle("1/N_{Evt}dN/dp_{t} [1/GeVc^{-1}]"); | |
824 | setDataStyle(*fHist[iHQ][iqType].Pt, kColorCode[iHQ][iqType], 3, kLineStyle[iqType]); | |
825 | ||
826 | CorrectFromTheWidth(fHist[iHQ][iqType].Pt); //consider pT bin size | |
827 | fHist[iHQ][iqType].Pt->Scale(scalefactor); //normalize with # of events | |
828 | if (iqType==1) { | |
829 | fHist[iHQ][iqType].Pt->Add(fHist[iHQ][0].Pt); //Q+Qbar | |
830 | fHist[iHQ][iqType].Pt->Scale(0.5); // pari | |
831 | Double_t xfactor = fHist[iHQ][iqType].Pt->Integral("width"); | |
832 | fHist[iHQ][iqType].Pt->Scale(totcrossNLO[iHQ]/xfactor); //consider pT bin size | |
833 | } | |
834 | } | |
835 | } | |
836 | ||
837 | Int_t iorder[2] = {0,1}; | |
838 | if (fHist[0][1].Pt->GetEntries() < fHist[1][1].Pt->GetEntries()) {iorder[0]=1; iorder[1]=0;}; | |
839 | ||
840 | cPt->cd(); | |
841 | setPadStyle(2,gPad); | |
842 | fHist[iorder[0]][1].Pt->Draw("same"); | |
843 | fHist[iorder[1]][1].Pt->Draw("same"); | |
844 | ||
845 | TLegend *legend1 = new TLegend(0.50,0.77,0.98,0.99,""); | |
846 | setLegendStyle(*legend1,1); | |
847 | for (Int_t iHQ= 0; iHQ < 2; iHQ++ ){ | |
848 | legend1->AddEntry(fHist[iHQ][0].Pt,kqTypeLabel[iHQ][kQuark]+"#bar{"+kqTypeLabel[iHQ][kQuark]+"}"+" pair", "l"); | |
849 | } | |
850 | legend1->AddEntry(hNLOc,"charm from NLO", "p"); | |
851 | legend1->AddEntry(hNLOb,"bottom from NLO", "p"); | |
852 | ||
853 | cPt->cd(); | |
854 | legend1->Draw(); | |
855 | ||
856 | } | |
857 | //-------------------------- | |
858 | void setDataStyle(TH1F &h, Int_t lc, Int_t lw, Int_t ls){ | |
859 | ||
860 | h.SetLineColor(lc); | |
861 | h.SetLineWidth(lw); | |
862 | h.SetLineStyle(ls); | |
863 | h.SetMarkerColor(lc); | |
864 | ||
865 | } | |
866 | ||
867 | //-------------------------- | |
868 | void setLegendStyle(TLegend &legend, Int_t bs){ | |
869 | ||
870 | legend.SetBorderSize(bs); | |
871 | legend.SetFillColor(0); | |
872 | legend.SetTextFont(132); | |
873 | legend.SetTextSize(0.04); | |
874 | legend.SetMargin(0.15); | |
875 | ||
876 | } | |
877 | ||
878 | //-------------------------- | |
879 | void setPadStyle(Int_t lvl, TPad *pad){ | |
880 | ||
881 | pad->SetLogy(); | |
882 | if(lvl>0) gPad->SetGridy(); | |
883 | if(lvl>1) gPad->SetGridx(); | |
884 | ||
885 | } | |
886 | ||
887 | //-------------------------- | |
888 | void setGeneralStyle(){ | |
889 | ||
890 | gStyle->SetPalette(1); | |
891 | ||
892 | gStyle->SetFrameBorderMode(0); | |
893 | gStyle->SetFrameFillColor(0); | |
894 | gStyle->SetPadBorderSize(0); | |
895 | gStyle->SetPadBorderMode(0); | |
896 | gStyle->SetCanvasColor(0); | |
897 | gStyle->SetCanvasBorderSize(10); | |
898 | ||
899 | gStyle->SetOptStat(0); | |
900 | gStyle->SetOptTitle(0); | |
901 | gStyle->SetTitleFillColor(10); | |
902 | gStyle->SetTitleBorderSize(0); | |
903 | gStyle->SetTitleSize(0.04,"X"); | |
904 | gStyle->SetTitleSize(0.04,"Y"); | |
905 | gStyle->SetTitleFont(132,"X"); | |
906 | gStyle->SetTitleFont(132,"Y"); | |
907 | gStyle->SetTitleXOffset(0.9); | |
908 | gStyle->SetTitleYOffset(0.9); | |
909 | gStyle->SetLabelFont(132,"X"); | |
910 | gStyle->SetLabelFont(132,"Y"); | |
911 | gStyle->SetLabelSize(0.04,"X"); | |
912 | gStyle->SetLabelSize(0.04,"Y"); | |
913 | ||
914 | gStyle->SetTitleSize(0.05,"X"); | |
915 | gStyle->SetTitleSize(0.05,"Y"); | |
916 | gStyle->SetLineWidth(2); | |
917 | ||
918 | } | |
919 | ||
920 | void CorrectFromTheWidth(TH1F *h1) const { | |
921 | // | |
922 | // Correct from the width of the bins --> dN/dp_{T} (GeV/c)^{-1} | |
923 | // | |
924 | ||
925 | TAxis *axis = h1->GetXaxis(); | |
926 | Int_t nbinX = h1->GetNbinsX(); | |
927 | ||
928 | for(Int_t i = 1; i <= nbinX; i++) { | |
929 | ||
930 | Double_t width = axis->GetBinWidth(i); | |
931 | Double_t content = h1->GetBinContent(i); | |
932 | Double_t error = h1->GetBinError(i); | |
933 | h1->SetBinContent(i,content/width); | |
934 | h1->SetBinError(i,error/width); | |
935 | } | |
936 | ||
937 | } | |
938 |