1 const char* objectName = "PWG4_LeadingTrackUE/histosLeadingTrackUE";
2 //const char* objectName = "PWG4_LeadingTrackUE/histosLeadingTrackUE_filterbit32";
4 void SetRanges(TAxis* axis)
6 if (strcmp(axis->GetTitle(), "leading p_{T} (GeV/c)") == 0)
7 axis->SetRangeUser(0, 10);
9 if (strcmp(axis->GetTitle(), "multiplicity") == 0)
10 axis->SetRangeUser(0, 10);
13 void SetRanges(TH1* hist)
15 SetRanges(hist->GetXaxis());
16 SetRanges(hist->GetYaxis());
17 SetRanges(hist->GetZaxis());
20 void Prepare1DPlot(TH1* hist)
22 hist->SetLineWidth(2);
23 hist->SetStats(kFALSE);
25 hist->GetXaxis()->SetLabelOffset(0.02);
26 hist->GetXaxis()->SetTitleOffset(1.3);
27 hist->GetYaxis()->SetTitleOffset(1.3);
32 void DrawRatio(TH1* corr, TH1* mc, const char* name)
36 TCanvas* canvas3 = new TCanvas(name, name, 600, 600);
37 canvas3->Range(0, 0, 1, 1);
39 TPad* pad1 = new TPad(Form("%s_1", name), "", 0, 0.5, 0.98, 0.98);
42 TPad* pad2 = new TPad(Form("%s_2", name), "", 0, 0.02, 0.98, 0.5);
45 pad1->SetRightMargin(0.01);
46 pad2->SetRightMargin(0.01);
47 pad1->SetTopMargin(0.05);
48 pad1->SetLeftMargin(0.13);
49 pad2->SetLeftMargin(0.13);
50 pad2->SetBottomMargin(0.22);
52 // no border between them
53 pad1->SetBottomMargin(0);
54 pad2->SetTopMargin(0);
60 TLegend* legend = new TLegend(0.15, 0.65, 0.55, 0.90);
61 legend->SetFillColor(0);
62 legend->AddEntry(corr, "Corrected");
63 legend->AddEntry(mc, "MC prediction");
64 legend->SetTextSize(0.08);
68 TH2F* dummy = new TH2F("dummy", "", 100, corr->GetXaxis()->GetBinLowEdge(1), corr->GetXaxis()->GetBinUpEdge(corr->GetNbinsX()), 1000, 0, TMath::Max(corr->GetMaximum(), mc->GetMaximum()) * 1.1);
69 dummy->SetStats(kFALSE);
70 dummy->SetXTitle(corr->GetXaxis()->GetTitle());
71 dummy->SetYTitle(corr->GetYaxis()->GetTitle());
72 dummy->GetYaxis()->SetTitleOffset(1);
75 dummy->GetXaxis()->SetLabelSize(0.08);
76 dummy->GetYaxis()->SetLabelSize(0.08);
77 dummy->GetXaxis()->SetTitleSize(0.08);
78 dummy->GetYaxis()->SetTitleSize(0.08);
79 dummy->GetYaxis()->SetTitleOffset(0.8);
88 //pad2->SetBottomMargin(0.15);
92 TH1* ratio = (TH1*) mc->Clone("ratio");
95 Float_t minR = TMath::Min(0.91, ratio->GetMinimum() * 0.95);
96 Float_t maxR = TMath::Max(1.09, ratio->GetMaximum() * 1.05);
101 TH1F dummy3("dummy3", ";;Ratio: MC / corr", 100, corr->GetXaxis()->GetBinLowEdge(1), corr->GetXaxis()->GetBinUpEdge(corr->GetNbinsX()));
102 dummy3.SetXTitle(corr->GetXaxis()->GetTitle());
103 Prepare1DPlot(&dummy3);
104 dummy3.SetStats(kFALSE);
105 for (Int_t i=1; i<=100; ++i)
106 dummy3.SetBinContent(i, 1);
107 dummy3.GetYaxis()->SetRangeUser(minR, maxR);
108 dummy3.SetLineWidth(2);
109 dummy3.GetXaxis()->SetLabelSize(0.08);
110 dummy3.GetYaxis()->SetLabelSize(0.08);
111 dummy3.GetXaxis()->SetTitleSize(0.08);
112 dummy3.GetYaxis()->SetTitleSize(0.08);
113 dummy3.GetYaxis()->SetTitleOffset(0.8);
123 gSystem->Load("libANALYSIS");
124 gSystem->Load("libANALYSISalice");
125 gSystem->Load("libCORRFW");
126 gSystem->Load("libJETAN");
127 gSystem->Load("libPWG4JetTasks");
130 void CompareBias(const char* mcFile = "PWG4_JetTasksOutput.root", Int_t region, Int_t ueHist)
135 list = (TList*) gFile->Get(objectName);
136 AliUEHistograms* h = (AliUEHistograms*) list->FindObject("AliUEHistograms");
137 h->SetEtaRange(-0.79, 0.79);
138 h->SetPtRange(0.51, 100);
139 h->SetCombineMinMax(kTRUE);
141 const char* axis = "z";
142 Float_t ptLeadMin = 0;
143 Float_t ptLeadMax = -1;
147 ptLeadMin = 0.51 + 4;
148 ptLeadMax = 1.99 + 4;
152 biasFromData = (TH1*) h->GetUEHist(ueHist)->GetBias(AliUEHist::kCFStepBiasStudy, AliUEHist::kCFStepReconstructed, region, axis, ptLeadMin, ptLeadMax)->Clone("biasFromData");
153 biasFromData2 = (TH1*) h->GetUEHist(ueHist)->GetBias(AliUEHist::kCFStepBiasStudy2, AliUEHist::kCFStepReconstructed, region, axis, ptLeadMin, ptLeadMax)->Clone("biasFromData2");
154 //biasFromData = (TH1*) h->GetUEHist(ueHist)->GetBias(AliUEHist::kCFStepReconstructed, AliUEHist::kCFStepRealLeading, region, axis)->Clone("biasFromData");
155 biasFromMC = (TH1*) h->GetUEHist(ueHist)->GetBias(AliUEHist::kCFStepReconstructed, AliUEHist::kCFStepTracked, region, axis, ptLeadMin, ptLeadMax)->Clone("biasFromMC");
156 //biasFromMC = (TH1*) h->GetUEHist(ueHist)->GetBias(AliUEHist::kCFStepReconstructed, AliUEHist::kCFStepRealLeading, region, axis)->Clone("biasFromMC");
158 /* biasFromData->Draw();
159 biasFromMC->SetLineColor(2);
160 biasFromMC->Draw("SAME");
163 DrawRatio(biasFromData, biasFromMC, "bias: data vs MC");
164 DrawRatio(biasFromData, biasFromData2, "bias: data vs data two step");
167 void CompareBiasWithData(const char* mcFile = "PWG4_JetTasksOutput.root", const char* dataFile = "esd.root")
171 file1 = TFile::Open(mcFile);
172 list = (TList*) file1->Get(objectName);
173 AliUEHistograms* h = (AliUEHistograms*) list->FindObject("AliUEHistograms");
174 h->SetEtaRange(-0.79, 0.79);
175 h->SetPtRange(0.51, 100);
177 biasFromMC = (TH1*) h->GetNumberDensitypT()->GetBias(AliUEHist::kCFStepReconstructed, AliUEHist::kCFStepTracked, "z")->Clone("biasFromMC");
179 file2 = TFile::Open(dataFile);
180 list = (TList*) file2->Get(objectName);
181 AliUEHistograms* h2 = (AliUEHistograms*) list->FindObject("AliUEHistograms");
182 h2->SetEtaRange(-0.79, 0.79);
183 h2->SetPtRange(0.51, 100);
185 biasFromData = (TH1*) h2->GetNumberDensitypT()->GetBias(AliUEHist::kCFStepBiasStudy, AliUEHist::kCFStepReconstructed, "z")->Clone("biasFromData");
186 biasFromData2 = (TH1*) h2->GetNumberDensitypT()->GetBias(AliUEHist::kCFStepBiasStudy2, AliUEHist::kCFStepReconstructed, "z")->Clone("biasFromData2");
188 DrawRatio(biasFromData, biasFromMC, "bias: data vs MC");
189 DrawRatio(biasFromData, biasFromData2, "bias: data vs data two step");
192 void Compare(const char* fileName1, const char* fileName2, Int_t step1, Int_t step2)
196 file1 = TFile::Open(fileName1);
197 list = (TList*) file1->Get(objectName);
198 AliUEHistograms* h = (AliUEHistograms*) list->FindObject("AliUEHistograms");
199 h->SetEtaRange(-0.79, 0.79);
200 h->SetPtRange(0.51, 100);
202 file2 = TFile::Open(fileName2);
203 list = (TList*) file2->Get(objectName);
204 AliUEHistograms* h2 = (AliUEHistograms*) list->FindObject("AliUEHistograms");
205 h2->SetEtaRange(-0.79, 0.79);
206 h2->SetPtRange(0.51, 100);
210 TH1* hist1 = h->GetNumberDensitypT()->GetUEHist(step1, region);
211 TH1* hist2 = h2->GetNumberDensitypT()->GetUEHist(step2, region);
213 DrawRatio(hist1, hist2, "compare");
216 void CompareRaw(const char* fileName1, const char* fileName2)
220 Compare(fileName1, fileName2, AliUEHist::kCFStepReconstructed, AliUEHist::kCFStepReconstructed);
223 void ProfileMultiplicity(const char* fileName = "PWG4_JetTasksOutput.root")
227 TFile::Open(fileName);
228 list = (TList*) gFile->Get(objectName);
229 AliUEHistograms* h = (AliUEHistograms*) list->FindObject("AliUEHistograms");
232 h->GetCorrelationMultiplicity()->Draw("colz");
236 h->GetCorrelationMultiplicity()->ProfileX()->DrawCopy()->Fit("pol1", "", "", 1, 10);
239 void SetupRanges(void* obj)
241 ((AliUEHistograms*) obj)->SetEtaRange(-0.79, 0.79);
242 ((AliUEHistograms*) obj)->SetPtRange(0.51, 100);
243 ((AliUEHistograms*) obj)->SetCombineMinMax(kTRUE);
246 void DrawRatios(const char* name, void* correctedVoid, void* comparisonVoid, Int_t compareStep = -1, Int_t compareRegion = 2, Float_t ptLeadMin = -1, Float_t ptLeadMax = -1)
248 AliUEHist* corrected = (AliUEHist*) correctedVoid;
249 AliUEHist* comparison = (AliUEHist*) comparisonVoid;
251 Int_t beginStep = AliUEHist::kCFStepAll;
252 Int_t endStep = AliUEHist::kCFStepReconstructed;
254 if (compareStep != -1)
256 beginStep = compareStep;
257 endStep = compareStep;
260 Int_t beginRegion = 0;
263 if (compareRegion != -1)
265 beginRegion = compareRegion;
266 endRegion = compareRegion;
269 for (Int_t step=beginStep; step<=endStep; step++)
271 for (Int_t region=beginRegion; region <= endRegion; region++)
273 Printf("%f %f", ptLeadMin, ptLeadMax);
274 TH1* corrHist = corrected->GetUEHist(step, region, ptLeadMin, ptLeadMax);
275 TH1* mcHist = comparison->GetUEHist(step, region, ptLeadMin, ptLeadMax);
277 DrawRatio(corrHist, mcHist, TString(Form("%s: step %d %s %s", name, step, corrected->GetStepTitle(step), corrected->GetRegionTitle(region))));
282 void DrawRatios(void* correctedVoid, void* comparisonVoid, Int_t compareStep = -1, Int_t compareRegion = 2, Int_t compareUEHist = 0)
284 AliUEHistograms* corrected = (AliUEHistograms*) correctedVoid;
285 AliUEHistograms* comparison = (AliUEHistograms*) comparisonVoid;
287 if (compareUEHist == 2)
289 for (Float_t ptLeadMin = 2.51; ptLeadMin < 4; ptLeadMin += 2)
290 DrawRatios(TString(Form("UE %d pT %f", compareUEHist, ptLeadMin)), corrected->GetUEHist(compareUEHist), comparison->GetUEHist(compareUEHist), compareStep, compareRegion, ptLeadMin, ptLeadMin + 1.98);
294 if (compareUEHist == -1)
296 for (Int_t i=0; i<2; i++)
297 DrawRatios(TString(Form("UE %d", i)), corrected->GetUEHist(i), comparison->GetUEHist(i), compareStep, compareRegion);
300 DrawRatios(TString(Form("UE %d", compareUEHist)), corrected->GetUEHist(compareUEHist), comparison->GetUEHist(compareUEHist), compareStep, compareRegion);
303 void CompareEventsTracks(void* corrVoid, void* mcVoid, Int_t compareStep, Int_t compareRegion, Int_t compareUEHist = 0)
305 AliUEHist* corr = ((AliUEHistograms*) corrVoid)->GetUEHist(compareUEHist);
306 AliUEHist* mc = ((AliUEHistograms*) mcVoid)->GetUEHist(compareUEHist);
308 Float_t ptLeadMin = 0;
309 Float_t ptLeadMax = -1;
312 if (compareUEHist == 2)
319 TH1* corrHist = corr->GetUEHist(compareStep, compareRegion, ptLeadMin, ptLeadMax);
320 TH1* mcHist = mc ->GetUEHist(compareStep, compareRegion, ptLeadMin, ptLeadMax);
322 DrawRatio(corrHist, mcHist, Form("check"));
324 corr->SetBinLimits(corr->GetTrackHist(compareRegion)->GetGrid(compareStep));
325 mc->SetBinLimits(corr->GetTrackHist(compareRegion)->GetGrid(compareStep));
327 corrHist = corr->GetTrackHist(compareRegion)->GetGrid(compareStep)->Project(axis);
328 mcHist = mc ->GetTrackHist(compareRegion)->GetGrid(compareStep)->Project(axis);
329 DrawRatio(corrHist, mcHist, Form("check2"));
331 corrHist = corr->GetEventHist()->GetGrid(compareStep)->Project(0);
332 mcHist = mc ->GetEventHist()->GetGrid(compareStep)->Project(0);
333 DrawRatio(corrHist, mcHist, Form("check3"));
336 void correctMC(const char* fileNameCorrections, const char* fileNameESD = 0, Int_t compareStep = -1, Int_t compareRegion = 2, Int_t compareUEHist = 0)
338 // corrects the reconstructed step in fileNameESD with fileNameCorr
339 // if fileNameESD is 0 data from fileNameCorr is taken
340 // afterwards the corrected distributions are compared with the MC stored in fileNameESD
344 TFile::Open(fileNameCorrections);
345 list = (TList*) gFile->Get(objectName);
346 AliUEHistograms* corr = (AliUEHistograms*) list->FindObject("AliUEHistograms");
350 file2 = TFile::Open(fileNameESD);
351 list = (TList*) file2->Get(objectName);
353 AliUEHistograms* testSample = (AliUEHistograms*) list->FindObject("AliUEHistograms");
355 // copy to esd object
356 AliUEHistograms* esd = new AliUEHistograms;
357 esd->CopyReconstructedData(testSample);
360 SetupRanges(testSample);
365 DrawRatios(esd, testSample, compareStep, compareRegion, compareUEHist);
367 //CompareEventsTracks(esd, testSample, compareStep, compareRegion, compareUEHist);
370 // function to compare only final step for all regions and distributions
372 void correctData(const char* fileNameCorrections, const char* fileNameESD, Int_t compareStep = -1, Int_t compareRegion = 2, Int_t compareUEHist = 0)
374 // corrects fileNameESD with fileNameCorrections and compares the two
378 TFile::Open(fileNameCorrections);
379 list = (TList*) gFile->Get(objectName);
380 AliUEHistograms* corr = (AliUEHistograms*) list->FindObject("AliUEHistograms");
382 file2 = TFile::Open(fileNameESD);
383 list = (TList*) file2->Get(objectName);
384 AliUEHistograms* esd = (AliUEHistograms*) list->FindObject("AliUEHistograms");
391 file3 = TFile::Open("corrected.root", "RECREATE");
395 DrawRatios(esd, corr, compareStep, compareRegion, compareUEHist);
398 void ITSTPCEfficiency(const char* fileNameData, Int_t itsTPC = 0)
402 // uncertainty from dN/dpT paper
403 Double_t pTBins[] = {0.0, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 12.0, 14.0, 16.0, 18.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 100.0};
404 Float_t effITS[] = {0., 0., 0.995, 0.98, 0.986, 0.996, 0.999, 0.997, 0.997, 1.008, 1.005, 1.022, 1.021, 1.021, 1.035, 1.04, 1.03 }; // the last three are the same because i don't have entries
405 Float_t effTPC[] = {0., 0, 1.042, 1.026,1.021, 1.018, 1.015, 1.015, 1.012, 1.012, 1.007, 1.0075,1.006, 1.006, 1.004, 1.004, 1.009 }; // the last bins put as if they were the same
407 TH1F* effHist = new TH1F("effHist", "effHist", 39, pTBins);
408 for (Int_t i=0; i<39; i++)
413 effHist->SetBinContent(i+1, (itsTPC == 0) ? effITS[bin] : effTPC[bin]);
416 new TCanvas; effHist->Draw();
418 EffectOfModifiedTrackingEfficiency(fileNameData, effHist, (itsTPC == 0) ? "ITS" : "TPC");
422 void EffectOfModifiedTrackingEfficiency(const char* fileNameData, TH1F* trackingEff, const char* name = "EffectOfModifiedTrackingEfficiency")
424 // trackingEff should contain the change in tracking efficiency, i.e. between before and after in the eta-pT plane
428 TFile::Open(fileNameData);
429 list = (TList*) gFile->Get(objectName);
430 AliUEHistograms* corrected = (AliUEHistograms*) list->FindObject("AliUEHistograms");
431 corrected->SetEtaRange(-0.79, 0.79);
432 corrected->SetPtRange(0.51, 100);
433 corrected->SetCombineMinMax(kTRUE);
435 AliUEHist* ueHist = corrected->GetUEHist(0);
439 TH1* before = ueHist->GetUEHist(AliUEHist::kCFStepAll, region);
442 // the CFStepTriggered step is overwritten here and cannot be used for comparison afterwards anymore
443 ueHist->CorrectTracks(AliUEHist::kCFStepAll, AliUEHist::kCFStepTriggered, (TH1*) 0, 0, -1);
445 // reapply tracking efficiency
446 ueHist->CorrectTracks(AliUEHist::kCFStepTriggered, AliUEHist::kCFStepAll, trackingEff, 1);
449 TH1* after = ueHist->GetUEHist(AliUEHist::kCFStepAll, region);
451 DrawRatio(before, after, name);
454 void ModifyComposition(const char* fileNameData, const char* fileNameCorrections, Int_t id, Bool_t verbose = kFALSE)
458 TFile::Open(fileNameData);
459 list = (TList*) gFile->Get(objectName);
460 AliUEHistograms* corrected = (AliUEHistograms*) list->FindObject("AliUEHistograms");
461 corrected->SetEtaRange(-0.79, 0.79);
462 corrected->SetPtRange(0.51, 100);
463 corrected->SetCombineMinMax(kTRUE);
465 file2 = TFile::Open(fileNameCorrections);
466 list2 = (TList*) file2->Get(objectName);
467 AliUEHistograms* corrections = (AliUEHistograms*) list2->FindObject("AliUEHistograms");
468 corrections->SetEtaRange(-0.79, 0.79);
469 corrections->SetPtRange(0.51, 100);
470 corrections->SetCombineMinMax(kTRUE);
472 ueHist = (AliUEHist*) corrections->GetUEHist(id);
475 // the CFStepTriggered step is overwritten here and cannot be used for comparison afterwards anymore
476 ueHist->CorrectTracks(AliUEHist::kCFStepAll, AliUEHist::kCFStepTriggered, (TH1*) 0, 0);
480 for (Int_t region=0; region<3; region++)
481 before[region] = ueHist->GetUEHist(AliUEHist::kCFStepAll, region);
483 defaultEff = ueHist->GetTrackingEfficiency();
484 defaultEffpT = ueHist->GetTrackingEfficiency(1);
485 defaultContainer = ueHist->GetTrackHistEfficiency();
488 defaultEffpT->Draw("");
490 for (Int_t i=0; i<7; i++)
492 // case 0: // default
493 // case 1: // + 30% kaons
494 // case 2: // - 30% kaons
495 // case 3: // + 30% protons
496 // case 4: // - 30% protons
497 // case 5: // + 30% others
498 // case 6: // - 30% others
499 Int_t correctionIndex = (i+1) / 2 + 1; // bin 1 == protons, bin 2 == kaons, ...
500 Double_t scaleFactor = (i % 2 == 1) ? 1.3 : 0.7;
504 newContainer = (AliCFContainer*) defaultContainer->Clone();
506 // modify, change all steps
507 for (Int_t j=0; j<newContainer->GetNStep(); j++)
509 THnSparse* grid = newContainer->GetGrid(j)->GetGrid();
511 for (Int_t binIdx = 0; binIdx < grid->GetNbins(); binIdx++)
514 Double_t value = grid->GetBinContent(binIdx, bins);
515 Double_t error = grid->GetBinError(binIdx);
517 if (bins[2] != correctionIndex)
520 value *= scaleFactor;
521 error *= scaleFactor;
523 grid->SetBinContent(bins, value);
524 grid->SetBinError(bins, error);
528 // put in corrections
529 ueHist->SetTrackHistEfficiency(newContainer);
532 modifiedEff = ueHist->GetTrackingEfficiency();
533 modifiedEff->Divide(modifiedEff, defaultEff);
534 //modifiedEff->Draw("COLZ");
537 modifiedEffpT = ueHist->GetTrackingEfficiency(1);
538 modifiedEffpT->SetLineColor(i+1);
539 modifiedEffpT->Draw("SAME");
541 // apply change in tracking efficiency
542 ueHist->CorrectTracks(AliUEHist::kCFStepTriggered, AliUEHist::kCFStepAll, modifiedEff, 0, 1);
544 for (Int_t region=0; region<3; region++)
547 TH1* after = ueHist->GetUEHist(AliUEHist::kCFStepAll, region);
550 DrawRatio(before[region], (TH1*) after->Clone(), Form("Region %d Composition %d", region, i));
552 // ratio is flat, extract deviation
553 after->Divide(before[region]);
554 after->Fit("pol0", "0");
555 Printf("Deviation for region %d case %d is %.2f %%", region, i, 100.0 - 100.0 * after->GetFunction("pol0")->GetParameter(0));