1 #include "AliAnalysisMultPbTrackHistoManager.h"
10 #include "TDatabasePDG.h"
11 #include "AliPhysicsSelection.h"
12 #include "AliESDtrackCuts.h"
13 #include "AliAnalysisMultPbCentralitySelector.h"
17 AliAnalysisMultPbTrackHistoManager * hManData = 0;
18 AliAnalysisMultPbTrackHistoManager * hManCorr = 0;
19 TH2D * hEvStatData = 0;
20 TH2D * hEvStatCorr = 0;
22 const Int_t kHistoFitCompoments = 3;
23 TH1D * gHistoCompoments[kHistoFitCompoments];
26 void LoadData(TString dataFolder, TString correctionFolder);
28 void CheckSecondaries(Double_t & fracWeak, Double_t &fracMaterial);
30 void ShowAcceptanceInVzSlices() ;
31 TH1D * GetRatioIntegratedFractions (TH1 * hNum, TH1 * hDenum) ;
32 TH1D * GetCumulativeHisto (TH1 * h) ;
33 static Double_t HistoSum(const double * x, const double* p);
34 TF1 * GetFunctionHistoSum() ;
35 TF1 * GetMTExp(Float_t norm=68, Float_t t=25) ;
36 TF1 * GetHagedorn(Float_t norm=68, Float_t pt0=25, Float_t n=13) ;
37 TF1 * GetLevy(Double_t temp=0.1, Double_t n=7, Double_t norm=10, const char * name="fLevy") ;
38 void PrintCanvas(TCanvas* c,const TString formats) ;
41 Bool_t doPrint=kFALSE;// disable PrintCanvas
44 void correct(TString dataFolder = "./output/LHC10g2d_130844_V0M_bin_10/", TString correctionFolder = "./output/LHC10g2a_130844_V0M_bin_10/") {
46 // Load stuff and set some styles
48 LoadData(dataFolder,correctionFolder);
50 // ShowAcceptanceInVzSlices();
53 // TODO add some cool printout for cuts and centrality selection
57 Double_t fractionWeak = 1, fractionMaterial=1;
58 // CheckSecondaries(fractionWeak, fractionMaterial);
59 cout << "Rescaling secondaries correction, weak: " << fractionWeak << ", material: " << fractionMaterial <<endl;
63 // FIXME: Gen should be projected including overflow in z?
64 TH1D * hDataPt = (TH1D*) hManData->GetHistoPt(AliAnalysisMultPbTrackHistoManager::kHistoRec, -0.5,0.5,-10,10)->Clone("hDataPt");
65 TH1D * hMCPtGen = hManCorr->GetHistoPt(AliAnalysisMultPbTrackHistoManager::kHistoGen, -0.5,0.5,-10,10);
66 TH1D * hMCPtRec = hManCorr->GetHistoPt(AliAnalysisMultPbTrackHistoManager::kHistoRec, -0.5,0.5,-10,10);
67 TH1D * hMCPtPri = hManCorr->GetHistoPt(AliAnalysisMultPbTrackHistoManager::kHistoRecPrim, -0.5,0.5,-10,10);
68 TH1D * hMCPtSeM = hManCorr->GetHistoPt(AliAnalysisMultPbTrackHistoManager::kHistoRecSecMat, -0.5,0.5,-10,10);
69 TH1D * hMCPtSeW = hManCorr->GetHistoPt(AliAnalysisMultPbTrackHistoManager::kHistoRecSecWeak, -0.5,0.5,-10,10);
70 TH1D * hMCPtFak = hManCorr->GetHistoPt(AliAnalysisMultPbTrackHistoManager::kHistoRecFake, -0.5,0.5,-10,10);
72 TCanvas * cdata = new TCanvas ("cData", "Data");
75 // hMCPtRec->Draw("same");
77 TCanvas * cMC = new TCanvas ("cMC", "Monte Carlo");
81 hMCPtRec ->Draw("same");
82 hMCPtPri ->Draw("same");
83 hMCPtSeM ->Draw("same");
84 hMCPtSeW ->Draw("same");
85 hMCPtFak ->Draw("same");
87 cout << "Fake/All Rec = " << hMCPtFak->Integral()/hMCPtRec->Integral() << endl;
88 cout << "SM/All Rec = " << hMCPtSeM->Integral()/hMCPtRec->Integral() << endl;
89 cout << "SW/All Rec = " << hMCPtSeW->Integral()/hMCPtRec->Integral() << endl;
92 // Compute efficiency and subtract secondaries and fakes after rescaling to data
93 // PRIM_DATA = ALL_DATA - SEC_MC/ALL_MC*ALL_DATA - FAK_MC/ALL_MC*ALL_DATA
94 // TRUE_DATA = PRIM_DATA * GEN_MC/PRIM_MC
96 TH1D * hEffPt = (TH1D*) hMCPtPri->Clone("hEffPt");
97 hEffPt->Divide(hMCPtPri,hMCPtGen,1,1,"B");
99 TH1D * hCorSeM = (TH1D*) hMCPtSeM->Clone("hEffPt");
100 hCorSeM->Divide(hMCPtSeM,hMCPtRec,1,1,"B");
101 hCorSeM->Scale(fractionMaterial);// rescale material correction
102 hCorSeM->Multiply(hDataPt);
104 TH1D * hCorSeW = (TH1D*) hMCPtSeW->Clone("hEffPt");
105 hCorSeW->Divide(hMCPtSeW,hMCPtRec,1,1,"B");
106 hCorSeW->Scale(fractionWeak);// rescale weak correction
107 hCorSeW->Multiply(hDataPt);
109 TH1D * hCorFak = (TH1D*) hMCPtFak->Clone("hEffPt");
110 hCorFak->Divide(hMCPtFak,hMCPtRec,1,1,"B");
111 hCorFak->Multiply(hDataPt);
113 TH1D * hCorrected = (TH1D*) hDataPt->Clone("hCorrected");
114 hCorrected->Add(hCorSeM,-1);
115 hCorrected->Add(hCorSeW,-1);
116 hCorrected->Add(hCorFak,-1);
117 hCorrected->Divide(hEffPt);
118 hCorrected->SetMarkerStyle(kOpenStar);
122 hCorrected->SetLineColor(kBlack);
123 hCorrected->SetMarkerColor(kBlack);
124 hCorrected->Draw("same");
125 hMCPtGen->DrawClone("same");
127 hCorrected->Fit(f,"", "same");
128 hCorrected->Fit(f,"IME", "same");
129 cout << "dN/deta = " << f->Integral(0,100) << " +- " << f->IntegralError(0,100) << endl;
130 cout << "Generated dN/deta (correction) = " << hMCPtGen->Integral("width") << endl;
131 // FIXME: comment this out
132 TH1D * hDataGen = hManData->GetHistoPt(AliAnalysisMultPbTrackHistoManager::kHistoGen, -0.5,0.5,-10,10);
133 cout << "Generated dN/deta (data) = " << hDataGen->Integral("width") << endl;
134 hDataGen->Draw("same");
137 void CheckSecondaries(Double_t &fracWeak, Double_t &fracMaterial) {
138 // Returns the fraction you need to rescale the secondaries from weak decays for.
141 TH1D * hDataDCA = hManData->GetHistoDCA(AliAnalysisMultPbTrackHistoManager::kHistoRec );
142 // TH1D * hMCDCAGen = hManCorr->GetHistoDCA(AliAnalysisMultPbTrackHistoManager::kHistoGen );
143 TH1D * hMCDCARec = hManCorr->GetHistoDCA(AliAnalysisMultPbTrackHistoManager::kHistoRec );
144 TH1D * hMCDCAPri = hManCorr->GetHistoDCA(AliAnalysisMultPbTrackHistoManager::kHistoRecPrim );
145 TH1D * hMCDCASW = hManCorr->GetHistoDCA(AliAnalysisMultPbTrackHistoManager::kHistoRecSecWeak );
146 TH1D * hMCDCASM = hManCorr->GetHistoDCA(AliAnalysisMultPbTrackHistoManager::kHistoRecSecMat );
147 TH1D * hMCDCAFak = hManCorr->GetHistoDCA(AliAnalysisMultPbTrackHistoManager::kHistoRecFake );
150 TCanvas * cCumulative = new TCanvas("cDCAculumative","DCA cumulative distributions");
152 GetCumulativeHisto(hMCDCAPri )->Draw();
153 GetRatioIntegratedFractions(hMCDCASW, hMCDCARec )->Draw("same");
154 GetRatioIntegratedFractions(hMCDCASM, hMCDCARec )->Draw("same");
155 GetRatioIntegratedFractions(hMCDCAPri,hMCDCARec )->Draw("same");
158 TCanvas * c1 = new TCanvas("cDCAFit", "Fit to the DCA distributions");
162 // hMCDCARec ->Draw("same");
163 // hMCDCAPri ->Draw("same");
164 // hMCDCASW ->Draw("same");
165 // hMCDCASM ->Draw("same");
166 // hMCDCAFak ->Draw("same");
169 // Fit the DCA distribution. Uses a TF1 made by summing histograms
170 TH1D * hMCPrimSMFak = (TH1D*) hMCDCAPri->Clone("hMCPrimSMFak");
171 // hMCPrimSMFak->Add(hMCDCASM);
172 hMCPrimSMFak->Add(hMCDCAFak);
174 // Set the components which are used in HistoSum, the static
175 // function for GetFunctionHistoSum
176 gHistoCompoments[0] = (TH1D*) hMCPrimSMFak->Clone();
177 gHistoCompoments[1] = (TH1D*) hMCDCASW->Clone();
178 gHistoCompoments[2] = (TH1D*) hMCDCASM->Clone();
179 TF1 * fHistos = GetFunctionHistoSum();
180 fHistos->SetParameters(1,1,1);
181 fHistos->SetLineColor(kRed);
183 hDataDCA->Fit(fHistos,"","",0,200);
184 // Rescale the components and draw to see how it looks like
185 hMCPrimSMFak->Scale(fHistos->GetParameter(0));
186 hMCDCASW ->Scale(fHistos->GetParameter(1));
187 hMCDCASM ->Scale(fHistos->GetParameter(2));
188 hMCPrimSMFak->Draw("same");
189 hMCDCASW ->Draw("same");
190 hMCDCASM ->Draw("same");
191 // compute scaling factors
192 fracWeak = fHistos->GetParameter(1)/fHistos->GetParameter(0);
193 fracMaterial = fHistos->GetParameter(2)/fHistos->GetParameter(0);
199 // compares the Vz distribution in data and in MC
200 TCanvas * c1 = new TCanvas("cVz", "Vertex Z distribution");
202 TH1D * hData = hManData->GetHistoVz(AliAnalysisMultPbTrackHistoManager::kHistoRec );
203 TH1D * hCorr = hManCorr->GetHistoVz(AliAnalysisMultPbTrackHistoManager::kHistoRec );
211 gSystem->Load("libVMC");
212 gSystem->Load("libTree");
213 gSystem->Load("libSTEERBase");
214 gSystem->Load("libESD");
215 gSystem->Load("libAOD");
216 gSystem->Load("libANALYSIS");
217 gSystem->Load("libANALYSISalice");
218 gSystem->Load("libCORRFW");
219 gSystem->Load("libMinuit");
220 gSystem->Load("libPWG2Spectra");
221 gSystem->Load("libPWG0base");
223 gROOT->ProcessLine(gSystem->ExpandPathName(".include $ALICE_ROOT/PWG0/multPbPb"));
224 gROOT->ProcessLine(gSystem->ExpandPathName(".include $ALICE_ROOT/PWG1/background"));
225 // Load helper classes
226 // TODO: replace this by a list of TOBJStrings
227 TString taskName("$ALICE_ROOT/PWG0/multPbPb/AliAnalysisTaskMultPbTracks.cxx+");
228 TString histoManName("$ALICE_ROOT/PWG0/multPbPb/AliAnalysisMultPbTrackHistoManager.cxx+");
229 TString centrName("$ALICE_ROOT/PWG0/multPbPb/AliAnalysisMultPbCentralitySelector.cxx+");
230 TString listName("$ALICE_ROOT/PWG1/background/AliHistoListWrapper.cxx+");
232 gSystem->ExpandPathName(taskName);
233 gSystem->ExpandPathName(histoManName);
234 gSystem->ExpandPathName(centrName);
235 gSystem->ExpandPathName(listName);
238 gROOT->LoadMacro(listName +(debug?"+g":""));
239 gROOT->LoadMacro(histoManName+(debug?"+g":""));
240 gROOT->LoadMacro(centrName +(debug?"+g":""));
241 gROOT->LoadMacro(taskName +(debug?"+g":""));
244 gROOT->LoadMacro("/Users/mfloris/Work/ALICE/ANALYSIS/HistoFitter/fcn.cxx+g");
245 gROOT->LoadMacro("/Users/mfloris/Work/ALICE/ANALYSIS/HistoFitter/AliHistoFitter.cxx+g");
253 hManData->GetHistoPtEtaVz(AliAnalysisMultPbTrackHistoManager::kHistoRec) ->SetLineColor(kBlack);
254 hManCorr->GetHistoPtEtaVz(AliAnalysisMultPbTrackHistoManager::kHistoGen) ->SetLineColor(kRed );
255 hManCorr->GetHistoPtEtaVz(AliAnalysisMultPbTrackHistoManager::kHistoRec) ->SetLineColor(kRed );
256 hManCorr->GetHistoPtEtaVz(AliAnalysisMultPbTrackHistoManager::kHistoRecPrim)->SetLineColor(kGreen);
257 hManCorr->GetHistoPtEtaVz(AliAnalysisMultPbTrackHistoManager::kHistoRecSecMat) ->SetLineColor(kBlue );
258 hManCorr->GetHistoPtEtaVz(AliAnalysisMultPbTrackHistoManager::kHistoRecSecWeak) ->SetLineColor(kBlue );
259 hManCorr->GetHistoPtEtaVz(AliAnalysisMultPbTrackHistoManager::kHistoRecFake)->SetLineColor(kCyan );
261 hManData->GetHistoPtEtaVz(AliAnalysisMultPbTrackHistoManager::kHistoRec) ->SetMarkerColor(kBlack);
262 hManCorr->GetHistoPtEtaVz(AliAnalysisMultPbTrackHistoManager::kHistoGen) ->SetMarkerColor(kRed );
263 hManCorr->GetHistoPtEtaVz(AliAnalysisMultPbTrackHistoManager::kHistoRec) ->SetMarkerColor(kRed );
264 hManCorr->GetHistoPtEtaVz(AliAnalysisMultPbTrackHistoManager::kHistoRecPrim)->SetMarkerColor(kGreen);
265 hManCorr->GetHistoPtEtaVz(AliAnalysisMultPbTrackHistoManager::kHistoRecSecMat) ->SetMarkerColor(kBlue );
266 hManCorr->GetHistoPtEtaVz(AliAnalysisMultPbTrackHistoManager::kHistoRecSecWeak) ->SetMarkerColor(kBlue );
267 hManCorr->GetHistoPtEtaVz(AliAnalysisMultPbTrackHistoManager::kHistoRecFake)->SetMarkerColor(kCyan );
269 hManData->GetHistoPtEtaVz(AliAnalysisMultPbTrackHistoManager::kHistoRec) ->SetMarkerStyle(kFullCircle);
270 hManCorr->GetHistoPtEtaVz(AliAnalysisMultPbTrackHistoManager::kHistoGen) ->SetMarkerStyle(kFullSquare);
271 hManCorr->GetHistoPtEtaVz(AliAnalysisMultPbTrackHistoManager::kHistoRec) ->SetMarkerStyle(kOpenSquare);
272 hManCorr->GetHistoPtEtaVz(AliAnalysisMultPbTrackHistoManager::kHistoRecPrim)->SetMarkerStyle(kOpenSquare);
273 hManCorr->GetHistoPtEtaVz(AliAnalysisMultPbTrackHistoManager::kHistoRecSecMat) ->SetMarkerStyle(kOpenSquare);
274 hManCorr->GetHistoPtEtaVz(AliAnalysisMultPbTrackHistoManager::kHistoRecSecWeak) ->SetMarkerStyle(kOpenCircle);
275 hManCorr->GetHistoPtEtaVz(AliAnalysisMultPbTrackHistoManager::kHistoRecFake)->SetMarkerStyle(kOpenSquare);
277 hManData->GetHistoDCA(AliAnalysisMultPbTrackHistoManager::kHistoRec) ->SetLineColor(kBlack);
278 hManCorr->GetHistoDCA(AliAnalysisMultPbTrackHistoManager::kHistoGen) ->SetLineColor(kRed );
279 hManCorr->GetHistoDCA(AliAnalysisMultPbTrackHistoManager::kHistoRec) ->SetLineColor(kRed );
280 hManCorr->GetHistoDCA(AliAnalysisMultPbTrackHistoManager::kHistoRecPrim)->SetLineColor(kGreen);
281 hManCorr->GetHistoDCA(AliAnalysisMultPbTrackHistoManager::kHistoRecSecMat) ->SetLineColor(kBlue );
282 hManCorr->GetHistoDCA(AliAnalysisMultPbTrackHistoManager::kHistoRecSecWeak) ->SetLineColor(kBlue-7 );
283 hManCorr->GetHistoDCA(AliAnalysisMultPbTrackHistoManager::kHistoRecFake)->SetLineColor(kCyan );
285 hManData->GetHistoDCA(AliAnalysisMultPbTrackHistoManager::kHistoRec) ->SetMarkerColor(kBlack);
286 hManCorr->GetHistoDCA(AliAnalysisMultPbTrackHistoManager::kHistoGen) ->SetMarkerColor(kRed );
287 hManCorr->GetHistoDCA(AliAnalysisMultPbTrackHistoManager::kHistoRec) ->SetMarkerColor(kRed );
288 hManCorr->GetHistoDCA(AliAnalysisMultPbTrackHistoManager::kHistoRecPrim)->SetMarkerColor(kGreen);
289 hManCorr->GetHistoDCA(AliAnalysisMultPbTrackHistoManager::kHistoRecSecMat) ->SetMarkerColor(kBlue );
290 hManCorr->GetHistoDCA(AliAnalysisMultPbTrackHistoManager::kHistoRecSecWeak) ->SetMarkerColor(kBlue-7 );
291 hManCorr->GetHistoDCA(AliAnalysisMultPbTrackHistoManager::kHistoRecFake)->SetMarkerColor(kCyan );
293 hManData->GetHistoDCA(AliAnalysisMultPbTrackHistoManager::kHistoRec) ->SetMarkerStyle(kFullCircle);
294 hManCorr->GetHistoDCA(AliAnalysisMultPbTrackHistoManager::kHistoGen) ->SetMarkerStyle(kFullSquare);
295 hManCorr->GetHistoDCA(AliAnalysisMultPbTrackHistoManager::kHistoRec) ->SetMarkerStyle(kOpenSquare);
296 hManCorr->GetHistoDCA(AliAnalysisMultPbTrackHistoManager::kHistoRecPrim)->SetMarkerStyle(kOpenSquare);
297 hManCorr->GetHistoDCA(AliAnalysisMultPbTrackHistoManager::kHistoRecSecMat) ->SetMarkerStyle(kOpenSquare);
298 hManCorr->GetHistoDCA(AliAnalysisMultPbTrackHistoManager::kHistoRecSecWeak) ->SetMarkerStyle(kOpenSquare);
299 hManCorr->GetHistoDCA(AliAnalysisMultPbTrackHistoManager::kHistoRecFake)->SetMarkerStyle(kOpenSquare);
304 void LoadData(TString dataFolder, TString correctionFolder){
306 // Get histo manager for data and MC + stat histos
307 TFile * fData = new TFile(dataFolder+"multPbPbtracks.root");
308 TFile * fCorr = new TFile(correctionFolder+"multPbPbtracks.root");
309 TFile * fStatData = new TFile(dataFolder+"event_stat.root");
310 TFile * fStatCorr = new TFile(correctionFolder+"event_stat.root");
312 hManData = (AliAnalysisMultPbTrackHistoManager*) fData->Get("histoManager");
313 hManCorr = (AliAnalysisMultPbTrackHistoManager*) fCorr->Get("histoManager");
314 AliESDtrackCuts * cutsData = (AliESDtrackCuts*) fData->Get("AliESDtrackCuts");
315 AliESDtrackCuts * cutsCorr = (AliESDtrackCuts*) fCorr->Get("AliESDtrackCuts");
316 if (cutsData != cutsCorr) {
317 cout << "ERROR: MC and data do not have the same cuts" << endl;
321 hEvStatData = (TH2D*) fStatData->Get("fHistStatistics");
322 hEvStatCorr = (TH2D*) fStatCorr->Get("fHistStatistics");
324 AliAnalysisMultPbCentralitySelector * centrData = (AliAnalysisMultPbCentralitySelector*) fData->Get("");
327 Int_t irowGoodTrigger = 1;
328 if (hEvStatCorr && hEvStatData) {
329 // hManData->ScaleHistos(75351.36/1.015);// Nint for run 104892 estimated correcting for the trigger efficiency, multiplied for the physics selection efficiency which I'm not correcting for the time being
330 // hManData->ScaleHistos(hEvStatData->GetBinContent(AliPhysicsSelection::kStatAccepted,irowGoodTrigger));
331 // hManCorr->ScaleHistos(hEvStatCorr->GetBinContent(AliPhysicsSelection::kStatAccepted,irowGoodTrigger));
332 hManData->ScaleHistos(hManData->GetHistoStats()->GetBinContent(AliAnalysisMultPbTrackHistoManager::kStatVtx));
333 hManCorr->ScaleHistos(hManCorr->GetHistoStats()->GetBinContent(AliAnalysisMultPbTrackHistoManager::kStatVtx));
335 cout << "WARNING!!! ARBITRARY SCALING" << endl;
336 hManData->ScaleHistos(1000);
337 hManCorr->ScaleHistos(1000);
341 TF1 * GetHagedorn(Float_t norm, Float_t pt0, Float_t n) {
344 Double_t mass = TDatabasePDG::Instance()->GetParticle("pi+")->Mass();
346 f=new TF1("fHagedorn",Form("(x/sqrt(x*x+%f*%f))*x*[0]*( 1 + x/[1] )^(-[2])",mass,mass),0,10);
347 f->SetParameters(norm, pt0, n);
348 f->SetParLimits(1, 0.01, 10);
349 f->SetParNames("norm", "pt0", "n");
356 TF1 * GetMTExp(Float_t norm, Float_t t) {
359 Double_t mass = TDatabasePDG::Instance()->GetParticle("pi+")->Mass();
361 f=new TF1("fMTExp",Form("(x/sqrt(x*x+%f*%f))*x*[0]*exp(-sqrt(x*x+%f*%f)/[1])",mass,mass,mass,mass),0,10);
362 f->SetParameters(norm, t);
363 // f->SetParLimits(1, 0.01);
364 f->SetParNames("norm", "T");
371 TF1 * GetLevy(Double_t temp, Double_t n, Double_t norm, const char * name) {
374 Double_t mass = TDatabasePDG::Instance()->GetParticle("pi+")->Mass();
377 sprintf(formula,"(x/sqrt(x*x+[3]*[3]))*x*( [0]*([1]-1)*([1]-2) )/( [1]*[2]*( [1]*[2]+[3]*([1]-2) ) ) * ( 1 + (sqrt([3]*[3]+x*x) -[3])/([1]*[2]) )^(-[1])");
378 TF1* f=new TF1(name,formula,0,10);
379 f->SetParameters(norm, n, temp,mass);
380 f->SetParLimits(2, 0.01, 10);
381 f->SetParNames("norm (dN/dy)", "n", "T", "mass");
382 f->FixParameter(3,mass);
390 TH1D * GetCumulativeHisto (TH1 * h) {
391 // Returns a cumulative histogram
392 // FIXME: put this method in a tools class
393 TH1D * hInt = (TH1D*) h->Clone(TString(h->GetName())+"_Int");
395 Float_t integral = h->Integral(-1,-1); // Consider under/over flow!
396 Int_t nbin = h->GetNbinsX();
397 for(Int_t ibin = 1; ibin <= nbin; ibin++){
398 Double_t content = h->Integral(-1,ibin) / integral;
399 hInt->SetBinContent(ibin, content);
404 TH1D * GetRatioIntegratedFractions (TH1 * hNum, TH1 * hDenum) {
405 // Returns the the ratio of integrated histograms
406 // FIXME: put this method in a tools class
407 TH1D * hRatio = (TH1D*) hNum->Clone(TString(hNum->GetName())+hDenum->GetName()+"_RatioIntegrated");
409 Int_t nbin = hNum->GetNbinsX();
410 for(Int_t ibin = 1; ibin <= nbin; ibin++){
411 Double_t content = hNum->Integral(-1,ibin) / hDenum->Integral(-1,ibin);// consider underflow
412 hRatio->SetBinContent(ibin, content);
417 void ShowAcceptanceInVzSlices() {
418 TCanvas * cvz = new TCanvas("cvz","acc #times eff vs vz");
419 for(Int_t ivz = -10; ivz < -6; ivz+=2){
421 Bool_t first = kTRUE;
422 TH1D * hMCPtPri = hManCorr->GetHistoPt(AliAnalysisMultPbTrackHistoManager::kHistoRecPrim , -0.5,0.5,ivz,ivz+2);
423 TH1D * hMCPtGen = hManCorr->GetHistoPt(AliAnalysisMultPbTrackHistoManager::kHistoGen, -0.5,0.5,ivz,ivz+2);
424 TH1D * hMCPtPriD = hManData->GetHistoPt(AliAnalysisMultPbTrackHistoManager::kHistoRecPrim , -0.5,0.5,ivz,ivz+2);
425 TH1D * hMCPtGenD = hManData->GetHistoPt(AliAnalysisMultPbTrackHistoManager::kHistoGen, -0.5,0.5,ivz,ivz+2);
427 TH1D * hEff = (TH1D*)hMCPtPri->Clone(Form("hEff_vz_%d_%d",ivz,ivz+2));
428 hEff->Divide(hMCPtPri,hMCPtGen,1,1,"B");
429 TH1D * hEffD = (TH1D*)hMCPtPriD->Clone(Form("hEffD_vz_%d_%d",ivz,ivz+2));
430 hEffD->Divide(hMCPtPriD,hMCPtGenD,1,1,"B");
431 hEffD->SetLineColor(kRed);
432 cout << "ivz " << ivz << endl;
435 cout << "First" << endl;
439 // hMCPtPri->Draw("same");
442 cout << "Same" << endl;
445 // hMCPtGen->Draw("");
446 // hMCPtPri->Draw("same");
449 // cvz->WaitPrimitive();
452 //hManCorr->GetHistoVz(AliAnalysisMultPbTrackHistoManager::kHistoRecPrim )->Draw();
453 // hManCorr->GetHistoVz(AliAnalysisMultPbTrackHistoManager::kHistoRec )->Draw("");
454 // hManCorr->GetHistoVz(AliAnalysisMultPbTrackHistoManager::kHistoGen )->Draw("same");
459 TF1 * GetFunctionHistoSum() {
461 TF1 * f = new TF1 ("fHistoSum",HistoSum,0,50,kHistoFitCompoments);
462 f->SetParNames("Primaries+Fakes", "Sec. Weak decays","Sec. Material");
468 static Double_t HistoSum(const double * x, const double* p){
469 // This function uses a global array of histograms, rescaled by some
470 // parameters, to define a function
471 // The array is called gHistoCompoments
472 // The size of the arrays is given by the global constant kHistoFitCompoments
476 for(Int_t icomp = 0; icomp < kHistoFitCompoments; icomp++){
477 // value += gHistoCompoments[icomp]-Interpolate(xx) * p[icomp];
478 Int_t ibin = gHistoCompoments[icomp]->FindBin(xx);
479 value += gHistoCompoments[icomp]->GetBinContent(ibin) * p[icomp];
486 void PrintCanvas(TCanvas* c,const TString formats) {
487 // print a canvas in every of the given comma-separated formats
488 // ensure the canvas is updated
491 gSystem->ProcessEvents();
492 TObjArray * arr = formats.Tokenize(",");
493 TIterator * iter = arr->MakeIterator();
494 TObjString * element = 0;
495 TString name =c ->GetName();
496 name.ReplaceAll(" ","_");
497 name.ReplaceAll("+","Plus");
498 name.ReplaceAll("-","");
499 while ((element = (TObjString*) iter->Next())) {
500 c->Print(name+ "."+element->GetString());