]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG4/macros/underlyingevent/correct.C
updated macros for starting correction code and plotting
[u/mrichter/AliRoot.git] / PWG4 / macros / underlyingevent / correct.C
1 const char* objectName = "PWG4_LeadingTrackUE/histosLeadingTrackUE";
2 //const char* objectName = "PWG4_LeadingTrackUE/histosLeadingTrackUE_filterbit32";
3
4 void SetRanges(TAxis* axis)
5 {
6   if (strcmp(axis->GetTitle(), "leading p_{T} (GeV/c)") == 0)
7     axis->SetRangeUser(0, 10);
8
9   if (strcmp(axis->GetTitle(), "multiplicity") == 0)
10     axis->SetRangeUser(0, 10);
11 }
12
13 void SetRanges(TH1* hist)
14 {
15   SetRanges(hist->GetXaxis());
16   SetRanges(hist->GetYaxis());
17   SetRanges(hist->GetZaxis());
18 }
19
20 void Prepare1DPlot(TH1* hist)
21 {
22   hist->SetLineWidth(2);
23   hist->SetStats(kFALSE);
24
25   hist->GetXaxis()->SetLabelOffset(0.02);
26   hist->GetXaxis()->SetTitleOffset(1.3);
27   hist->GetYaxis()->SetTitleOffset(1.3);
28
29   SetRanges(hist);
30 }
31
32 void DrawRatio(TH1* corr, TH1* mc, const char* name)
33 {
34   mc->SetLineColor(2);
35
36   TCanvas* canvas3 = new TCanvas(name, name, 600, 600);
37   canvas3->Range(0, 0, 1, 1);
38
39   TPad* pad1 = new TPad(Form("%s_1", name), "", 0, 0.5, 0.98, 0.98);
40   pad1->Draw();
41
42   TPad* pad2 = new TPad(Form("%s_2", name), "", 0, 0.02, 0.98, 0.5);
43   pad2->Draw();
44
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);
51   
52   // no border between them
53   pad1->SetBottomMargin(0);
54   pad2->SetTopMargin(0);
55
56   pad1->cd();
57   pad1->SetGridx();
58   pad1->SetGridy();
59
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);
65
66   Prepare1DPlot(corr);
67
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);
73   Prepare1DPlot(dummy);
74
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);
80   dummy->DrawCopy();
81
82   corr->Draw("SAME");
83   mc->Draw("SAME");
84
85   legend->Draw();
86
87   pad2->cd();
88   //pad2->SetBottomMargin(0.15);
89   //pad2->SetGridx();
90   //pad2->SetGridy();
91
92   TH1* ratio = (TH1*) mc->Clone("ratio");
93   ratio->Divide(corr);
94
95   Float_t minR = TMath::Min(0.91, ratio->GetMinimum() * 0.95);
96   Float_t maxR = TMath::Max(1.09, ratio->GetMaximum() * 1.05);
97   
98   minR = 0.8;
99   maxR = 1.2;
100
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);
114   dummy3.DrawCopy();
115
116   ratio->Draw("SAME");
117
118   canvas3->Modified();
119 }
120
121 void loadlibs()
122 {
123   gSystem->Load("libANALYSIS");
124   gSystem->Load("libANALYSISalice");
125   gSystem->Load("libCORRFW");
126   gSystem->Load("libJETAN");
127   gSystem->Load("libPWG4JetTasks");
128 }
129
130 void CompareBias(const char* mcFile = "PWG4_JetTasksOutput.root", Int_t region, Int_t ueHist)
131 {
132   loadlibs();
133
134   TFile::Open(mcFile);
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);
140   
141   const char* axis = "z";
142   Float_t ptLeadMin = 0;
143   Float_t ptLeadMax = -1;
144   
145   if (ueHist == 2)
146   {
147     ptLeadMin = 0.51 + 4;
148     ptLeadMax = 1.99 + 4;
149     axis = "y";
150   }
151   
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");
157   
158 /*  biasFromData->Draw();
159   biasFromMC->SetLineColor(2);
160   biasFromMC->Draw("SAME");
161   return;*/
162   
163   DrawRatio(biasFromData, biasFromMC, "bias: data vs MC");
164   DrawRatio(biasFromData, biasFromData2, "bias: data vs data two step");
165 }
166   
167 void CompareBiasWithData(const char* mcFile = "PWG4_JetTasksOutput.root", const char* dataFile = "esd.root")
168 {
169   loadlibs();
170
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);
176   
177   biasFromMC   = (TH1*) h->GetNumberDensitypT()->GetBias(AliUEHist::kCFStepReconstructed, AliUEHist::kCFStepTracked, "z")->Clone("biasFromMC");
178   
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);
184   
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");
187   
188   DrawRatio(biasFromData, biasFromMC, "bias: data vs MC");
189   DrawRatio(biasFromData, biasFromData2, "bias: data vs data two step");
190 }
191
192 void Compare(const char* fileName1, const char* fileName2, Int_t step1, Int_t step2)
193 {
194   loadlibs();
195
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);
201
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);
207
208   Int_t region = 0;
209     
210   TH1* hist1 = h->GetNumberDensitypT()->GetUEHist(step1, region);
211   TH1* hist2 = h2->GetNumberDensitypT()->GetUEHist(step2, region);
212
213   DrawRatio(hist1, hist2, "compare");
214 }  
215
216 void CompareRaw(const char* fileName1, const char* fileName2)
217 {
218   loadlibs();
219
220   Compare(fileName1, fileName2, AliUEHist::kCFStepReconstructed, AliUEHist::kCFStepReconstructed);
221 }
222
223 void ProfileMultiplicity(const char* fileName = "PWG4_JetTasksOutput.root")
224 {
225   loadlibs();
226
227   TFile::Open(fileName);
228   list = (TList*) gFile->Get(objectName);
229   AliUEHistograms* h = (AliUEHistograms*) list->FindObject("AliUEHistograms");
230
231   new TCanvas;
232   h->GetCorrelationMultiplicity()->Draw("colz");
233   gPad->SetLogz();
234
235   new TCanvas;
236   h->GetCorrelationMultiplicity()->ProfileX()->DrawCopy()->Fit("pol1", "", "", 1, 10);
237 }
238
239 void SetupRanges(void* obj)
240 {
241   ((AliUEHistograms*) obj)->SetEtaRange(-0.79, 0.79);
242   ((AliUEHistograms*) obj)->SetPtRange(0.51, 100);
243   ((AliUEHistograms*) obj)->SetCombineMinMax(kTRUE);
244 }
245
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)
247 {
248   AliUEHist* corrected = (AliUEHist*) correctedVoid;
249   AliUEHist* comparison = (AliUEHist*) comparisonVoid;
250
251   Int_t beginStep = AliUEHist::kCFStepAll;
252   Int_t endStep = AliUEHist::kCFStepReconstructed;
253   
254   if (compareStep != -1)
255   {
256     beginStep = compareStep;
257     endStep = compareStep;
258   }
259   
260   Int_t beginRegion = 0;
261   Int_t endRegion = 2;
262   
263   if (compareRegion != -1)
264   {
265     beginRegion = compareRegion;
266     endRegion = compareRegion;
267   }
268
269   for (Int_t step=beginStep; step<=endStep; step++)
270   {
271     for (Int_t region=beginRegion; region <= endRegion; region++)
272     {
273       Printf("%f %f", ptLeadMin, ptLeadMax);
274       TH1* corrHist = corrected->GetUEHist(step, region, ptLeadMin, ptLeadMax);
275       TH1* mcHist   = comparison->GetUEHist(step, region, ptLeadMin, ptLeadMax);
276       
277       DrawRatio(corrHist, mcHist, TString(Form("%s: step %d %s %s", name, step, corrected->GetStepTitle(step), corrected->GetRegionTitle(region))));
278     }
279   }
280 }
281
282 void DrawRatios(void* correctedVoid, void* comparisonVoid, Int_t compareStep = -1, Int_t compareRegion = 2, Int_t compareUEHist = 0)
283 {
284   AliUEHistograms* corrected = (AliUEHistograms*) correctedVoid;
285   AliUEHistograms* comparison = (AliUEHistograms*) comparisonVoid;
286
287   if (compareUEHist == 2)
288   {
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);      
291     return;
292   }
293
294   if (compareUEHist == -1)
295   {
296     for (Int_t i=0; i<2; i++)
297       DrawRatios(TString(Form("UE %d", i)), corrected->GetUEHist(i), comparison->GetUEHist(i), compareStep, compareRegion);
298   }
299   else
300     DrawRatios(TString(Form("UE %d", compareUEHist)), corrected->GetUEHist(compareUEHist), comparison->GetUEHist(compareUEHist), compareStep, compareRegion);
301 }
302
303 void CompareEventsTracks(void* corrVoid, void* mcVoid, Int_t compareStep, Int_t compareRegion, Int_t compareUEHist = 0)
304 {
305   AliUEHist* corr = ((AliUEHistograms*) corrVoid)->GetUEHist(compareUEHist);
306   AliUEHist* mc   = ((AliUEHistograms*) mcVoid)->GetUEHist(compareUEHist);
307
308   Float_t ptLeadMin = 0;
309   Float_t ptLeadMax = -1;
310   Int_t axis = 2;
311   
312   if (compareUEHist == 2)
313   {
314     ptLeadMin = 1.01;
315     ptLeadMax = 1.49;
316     axis = 4;
317   }
318
319   TH1* corrHist = corr->GetUEHist(compareStep, compareRegion, ptLeadMin, ptLeadMax);
320   TH1* mcHist   = mc  ->GetUEHist(compareStep, compareRegion, ptLeadMin, ptLeadMax);
321   
322   DrawRatio(corrHist, mcHist, Form("check"));
323   
324   corr->SetBinLimits(corr->GetTrackHist(compareRegion)->GetGrid(compareStep));
325   mc->SetBinLimits(corr->GetTrackHist(compareRegion)->GetGrid(compareStep));
326
327   corrHist =  corr->GetTrackHist(compareRegion)->GetGrid(compareStep)->Project(axis);
328   mcHist   =  mc  ->GetTrackHist(compareRegion)->GetGrid(compareStep)->Project(axis);
329   DrawRatio(corrHist, mcHist, Form("check2"));
330   
331   corrHist =  corr->GetEventHist()->GetGrid(compareStep)->Project(0);
332   mcHist   =  mc  ->GetEventHist()->GetGrid(compareStep)->Project(0);
333   DrawRatio(corrHist, mcHist, Form("check3"));
334 }
335
336 void correctMC(const char* fileNameCorrections, const char* fileNameESD = 0, Int_t compareStep = -1, Int_t compareRegion = 2, Int_t compareUEHist = 0)
337 {
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
341   
342   loadlibs();
343   
344   TFile::Open(fileNameCorrections);
345   list = (TList*) gFile->Get(objectName);
346   AliUEHistograms* corr = (AliUEHistograms*) list->FindObject("AliUEHistograms");
347   
348   if (fileNameESD)
349   {
350     file2 = TFile::Open(fileNameESD);
351     list = (TList*) file2->Get(objectName);
352   }
353   AliUEHistograms* testSample = (AliUEHistograms*) list->FindObject("AliUEHistograms");
354     
355   // copy to esd object
356   AliUEHistograms* esd = new AliUEHistograms;
357   esd->CopyReconstructedData(testSample);
358   
359   SetupRanges(corr);
360   SetupRanges(testSample);
361   SetupRanges(esd);
362   
363   esd->Correct(corr);
364   
365   DrawRatios(esd, testSample, compareStep, compareRegion, compareUEHist);
366   
367   //CompareEventsTracks(esd, testSample, compareStep, compareRegion, compareUEHist);
368 }
369
370 // function to compare only final step for all regions and distributions
371
372 void correctData(const char* fileNameCorrections, const char* fileNameESD, Int_t compareStep = -1, Int_t compareRegion = 2, Int_t compareUEHist = 0)
373 {
374   // corrects fileNameESD with fileNameCorrections and compares the two
375   
376   loadlibs();
377   
378   TFile::Open(fileNameCorrections);
379   list = (TList*) gFile->Get(objectName);
380   AliUEHistograms* corr = (AliUEHistograms*) list->FindObject("AliUEHistograms");
381   
382   file2 = TFile::Open(fileNameESD);
383   list = (TList*) file2->Get(objectName);
384   AliUEHistograms* esd = (AliUEHistograms*) list->FindObject("AliUEHistograms");
385   
386   SetupRanges(corr);
387   SetupRanges(esd);
388   
389   esd->Correct(corr);
390   
391   file3 = TFile::Open("corrected.root", "RECREATE");
392   esd->Write();
393   file3->Close();
394   
395   DrawRatios(esd, corr, compareStep, compareRegion, compareUEHist);
396 }
397
398 void ITSTPCEfficiency(const char* fileNameData, Int_t itsTPC = 0)
399 {
400   // its = 0; tpc = 1
401
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
406
407   TH1F* effHist = new TH1F("effHist", "effHist", 39, pTBins);
408   for (Int_t i=0; i<39; i++)
409   {
410     Int_t bin = i;
411     if (i > 16)
412       bin = 16;
413     effHist->SetBinContent(i+1, (itsTPC == 0) ? effITS[bin] : effTPC[bin]);
414   }
415
416   new TCanvas; effHist->Draw();
417
418   EffectOfModifiedTrackingEfficiency(fileNameData, effHist, (itsTPC == 0) ? "ITS" : "TPC");
419
420
421
422 void EffectOfModifiedTrackingEfficiency(const char* fileNameData, TH1F* trackingEff, const char* name = "EffectOfModifiedTrackingEfficiency")
423 {
424   // trackingEff should contain the change in tracking efficiency, i.e. between before and after in the eta-pT plane
425
426   loadlibs();
427   
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);
434   
435   AliUEHist* ueHist = corrected->GetUEHist(0);
436   Int_t region = 2;
437   
438   // histogram before
439   TH1* before = ueHist->GetUEHist(AliUEHist::kCFStepAll, region);
440
441   // copy histogram
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);
444
445   // reapply tracking efficiency
446   ueHist->CorrectTracks(AliUEHist::kCFStepTriggered, AliUEHist::kCFStepAll, trackingEff, 1);
447
448   // histogram after
449   TH1* after = ueHist->GetUEHist(AliUEHist::kCFStepAll, region);
450   
451   DrawRatio(before, after, name);
452 }
453
454 void ModifyComposition(const char* fileNameData, const char* fileNameCorrections, Int_t id, Bool_t verbose = kFALSE)
455 {
456   loadlibs();
457   
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);
464   
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);
471   
472   ueHist = (AliUEHist*) corrections->GetUEHist(id);
473   
474   // copy histogram
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);
477   
478   // histogram before
479   TH1* before[3];
480   for (Int_t region=0; region<3; region++)
481     before[region] = ueHist->GetUEHist(AliUEHist::kCFStepAll, region);
482   
483   defaultEff = ueHist->GetTrackingEfficiency();
484   defaultEffpT = ueHist->GetTrackingEfficiency(1);
485   defaultContainer = ueHist->GetTrackHistEfficiency();
486   
487   c = new TCanvas;
488   defaultEffpT->Draw("");
489   
490   for (Int_t i=0; i<7; i++)
491   {
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;
501     if (i == 0)
502       scaleFactor = 1;
503     
504     newContainer = (AliCFContainer*) defaultContainer->Clone();
505     
506     // modify, change all steps
507     for (Int_t j=0; j<newContainer->GetNStep(); j++)
508     {
509       THnSparse* grid = newContainer->GetGrid(j)->GetGrid();
510       
511       for (Int_t binIdx = 0; binIdx < grid->GetNbins(); binIdx++)
512       {
513         Int_t bins[5];
514         Double_t value = grid->GetBinContent(binIdx, bins);
515         Double_t error = grid->GetBinError(binIdx);
516         
517         if (bins[2] != correctionIndex)
518           continue;
519     
520         value *= scaleFactor;
521         error *= scaleFactor;
522     
523         grid->SetBinContent(bins, value);
524         grid->SetBinError(bins, error);      
525       }
526     }
527     
528     // put in corrections
529     ueHist->SetTrackHistEfficiency(newContainer);
530     
531     // ratio
532     modifiedEff = ueHist->GetTrackingEfficiency();
533     modifiedEff->Divide(modifiedEff, defaultEff);
534     //modifiedEff->Draw("COLZ");
535     
536     c->cd();
537     modifiedEffpT = ueHist->GetTrackingEfficiency(1);
538     modifiedEffpT->SetLineColor(i+1);
539     modifiedEffpT->Draw("SAME");
540     
541     // apply change in tracking efficiency
542     ueHist->CorrectTracks(AliUEHist::kCFStepTriggered, AliUEHist::kCFStepAll, modifiedEff, 0, 1);
543   
544     for (Int_t region=0; region<3; region++)
545     {
546       // histogram after
547       TH1* after = ueHist->GetUEHist(AliUEHist::kCFStepAll, region);
548       
549       if (verbose)
550         DrawRatio(before[region], (TH1*) after->Clone(), Form("Region %d Composition %d", region, i));
551       
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));
556     }
557     //return;
558   }
559 }