1 #if !defined(__CINT__) || defined(__MAKECINT__)
2 #include <TInterpreter.h>
4 #include <TObjString.h>
15 #include <TLegendEntry.h>
17 #include <TPaveText.h>
18 #include <TDatabasePDG.h>
19 #include <TGraphErrors.h>
20 #include <TGraphAsymmErrors.h>
23 #include "AliAODRecoDecayHF.h"
24 #include "AliRDHFCuts.h"
25 #include "AliRDHFCutsDplustoKpipi.h"
26 #include "AliRDHFCutsD0toKpi.h"
27 #include "AliHFMassFitter.h"
28 #include "AliEventPlaneResolution.h"
32 // Common variables: to be configured by the user
33 TString filname="AnalysisResultsgoodruns.root";
34 TString listname="coutputv2D0Std";//"coutputv2D0RAACuts"; //"coutputv2D0Std";
35 TString filcutsname="AnalysisResultsgoodruns.root";
40 const Int_t nFinalPtBins=3;
41 Double_t ptlims[nFinalPtBins+1]={2.,5.,8.,12.};
42 Double_t sigmaRangeForSig=2.5;
43 Double_t sigmaRangeForBkg=4.5;
44 Int_t rebinHistoSideBands[nFinalPtBins]={2,2,2};
45 Bool_t useConstantvsBkgVsMass=kFALSE;
46 Int_t rebinHistov2Mass[nFinalPtBins]={2,2,5};
48 Int_t minPtBin[nFinalPtBins]={-1,-1,-1};
49 Int_t maxPtBin[nFinalPtBins]={-1,-1,-1};
51 // systematic errors for 2-5, 5-8 and 8-12 (no run-by-run weights)
53 Double_t systErrMeth1[nFinalPtBins]={
58 Double_t systErrMeth2[nFinalPtBins]={
65 // systematic errors for 2-5, 5-8 and 8-12 (93 runs with run-by-run weights)
66 Double_t systErrMeth1[nFinalPtBins]={
71 Double_t systErrMeth2[nFinalPtBins]={
78 // systematic errors for 2-5, 5-8 and 8-12 (93 runs with run-by-run weights, RAA cuts)
80 Double_t systErrMeth1[nFinalPtBins]={
85 Double_t systErrMeth2[nFinalPtBins]={
92 // output of mass fitter
95 Double_t signalFromFit,esignalFromFit;
96 Double_t massFromFit,sigmaFromFit;
101 void LoadMassHistos(TList* lst, TH2F** hMassDphi);
102 Bool_t DefinePtBins(TDirectoryFile* df);
103 Double_t v2vsMass(Double_t *x, Double_t *par);
104 Double_t GetEPResolution(TList* lst, Double_t &rcflow, Double_t &rcfhigh);
105 Bool_t FitMassSpectrum(TH1F* hMass, TPad* pad);
106 TH1F* DoSideBands(Int_t iFinalPtBin, TH2F* hMassDphi, TH1F* hMass, Int_t rebin, TCanvas* c1, Int_t optBkg=0);
107 TF1* DoFitv2vsMass(Int_t iFinalPtBin, TH2F* hMassDphi, TH1F* hMass, Int_t rebin, TCanvas* c2, Int_t optErrors=0, Bool_t useConst=kTRUE);
110 void Extractv2from2Dhistos(){
112 gInterpreter->ExecuteMacro("$ALICE_ROOT/PWG3/vertexingHF/macros/LoadLibraries.C");
114 TFile* filcuts=new TFile(filcutsname.Data());
115 TDirectoryFile* dfcuts=(TDirectoryFile*)filcuts->Get("PWG3_D2H_HFv2");
116 Bool_t binOK=DefinePtBins(dfcuts);
119 TFile* fil=new TFile(filname.Data());
120 TDirectoryFile* df=(TDirectoryFile*)fil->Get("PWG3_D2H_HFv2");
121 TList* lst=(TList*)df->Get(listname.Data());
123 printf("ERROR: list %s not found in file\n",listname.Data());
126 Double_t rcfmin,rcfmax;
127 Double_t resolFull=GetEPResolution(lst,rcfmin,rcfmax);
128 Double_t resolSyst=(rcfmax-rcfmin)/2./resolFull;
129 printf("Relative Systematic Error on RCF=%f\n",resolSyst);
131 TH2F** hMassDphi=new TH2F*[nFinalPtBins];
132 for(Int_t iFinalPtBin=0; iFinalPtBin<nFinalPtBins; iFinalPtBin++){
133 hMassDphi[iFinalPtBin]=0x0;
135 LoadMassHistos(lst, hMassDphi);
137 TCanvas** c1=new TCanvas*[nFinalPtBins];
138 TCanvas** c2=new TCanvas*[nFinalPtBins];
140 Double_t v2M1[nFinalPtBins],errv2M1[nFinalPtBins];
141 Double_t v2M2[nFinalPtBins],errv2M2[nFinalPtBins];
143 gStyle->SetPalette(1);
144 gStyle->SetOptTitle(0);
146 for(Int_t iFinalPtBin=0; iFinalPtBin<nFinalPtBins; iFinalPtBin++){
147 printf("**************** BIN %d ******************\n",iFinalPtBin);
148 printf("\n--------- Method 1: Side Bands ----------\n");
149 TH1F* hMass=(TH1F*)hMassDphi[iFinalPtBin]->ProjectionY();
151 c1[iFinalPtBin]=new TCanvas(Form("cMeth1PtBin%d",iFinalPtBin),Form("Meth1PtBin%d",iFinalPtBin));
152 c1[iFinalPtBin]->Divide(2,2);
153 c1[iFinalPtBin]->cd(1);
154 hMassDphi[iFinalPtBin]->Draw("colz");
155 c1[iFinalPtBin]->cd(2);
156 Bool_t out=FitMassSpectrum(hMass,(TPad*)gPad);
159 TH1F* hCos2PhiSig=DoSideBands(iFinalPtBin,hMassDphi[iFinalPtBin],hMass,rebinHistoSideBands[iFinalPtBin],c1[iFinalPtBin]);
160 Double_t v2obsM1=hCos2PhiSig->GetMean();
161 Double_t errv2obsM1=hCos2PhiSig->GetMeanError();
162 printf("v2obs = %f +- %f\n",v2obsM1,errv2obsM1);
163 v2M1[iFinalPtBin]=v2obsM1/resolFull;
164 errv2M1[iFinalPtBin]=errv2obsM1/resolFull;
165 printf("v2 = %f +- %f\n",v2M1[iFinalPtBin],errv2M1[iFinalPtBin]);
167 printf("\n--------- Method 2: S/S+B ----------\n");
168 c2[iFinalPtBin]=new TCanvas(Form("cMeth2Bin%d",iFinalPtBin),Form("Meth2Bin%d",iFinalPtBin));
169 TF1* fv2=DoFitv2vsMass(iFinalPtBin,hMassDphi[iFinalPtBin],hMass,rebinHistov2Mass[iFinalPtBin],c2[iFinalPtBin],0,useConstantvsBkgVsMass);
171 Double_t v2obsM2=fv2->GetParameter(3);
172 Double_t errv2obsM2=fv2->GetParError(3);
173 printf("v2obs = %f +- %f\n",v2obsM2,errv2obsM2);
174 v2M2[iFinalPtBin]=v2obsM2/resolFull;
175 errv2M2[iFinalPtBin]=errv2obsM2/resolFull;
176 printf("v2 = %f +- %f\n",v2M2[iFinalPtBin],errv2M2[iFinalPtBin]);
177 c1[iFinalPtBin]->SaveAs(Form("cMeth1Bin%d.root",iFinalPtBin));
178 c2[iFinalPtBin]->SaveAs(Form("cMeth2Bin%d.root",iFinalPtBin));
181 printf("\n--------- Summary ------------\n");
183 TH1F* hv2m1=new TH1F("hv2m1","Side Band subtraction",nFinalPtBins,ptlims);
184 TH1F* hv2m2=new TH1F("hv2m2","Fit to v2 vs. mass",nFinalPtBins,ptlims);
185 for(Int_t iFinalPtBin=0; iFinalPtBin<nFinalPtBins; iFinalPtBin++){
186 printf("PtBin %d v2method1 = %f +- %f v2method2 = %f +-%f\n",iFinalPtBin,
187 v2M1[iFinalPtBin],errv2M1[iFinalPtBin],
188 v2M2[iFinalPtBin],errv2M2[iFinalPtBin]
190 hv2m1->SetBinContent(iFinalPtBin+1,v2M1[iFinalPtBin]);
191 hv2m1->SetBinError(iFinalPtBin+1,errv2M1[iFinalPtBin]);
192 hv2m2->SetBinContent(iFinalPtBin+1,v2M2[iFinalPtBin]);
193 hv2m2->SetBinError(iFinalPtBin+1,errv2M2[iFinalPtBin]);
196 TH1F* hSystErr1=(TH1F*)hv2m1->Clone("hSystErr1");
197 TH1F* hSystErr2=(TH1F*)hv2m2->Clone("hSystErr2");
198 for(Int_t iFinalPtBin=0; iFinalPtBin<nFinalPtBins; iFinalPtBin++){
199 Double_t systRes1=resolSyst*v2M1[iFinalPtBin];
200 Double_t systRes2=resolSyst*v2M2[iFinalPtBin];
201 printf("%f\n",systRes1);
202 Double_t syste1=TMath::Sqrt(systErrMeth1[iFinalPtBin]*systErrMeth1[iFinalPtBin]+systRes1*systRes1);
203 Double_t syste2=TMath::Sqrt(systErrMeth2[iFinalPtBin]*systErrMeth2[iFinalPtBin]+systRes2*systRes2);
204 hSystErr1->SetBinError(iFinalPtBin+1,syste1);
205 hSystErr2->SetBinError(iFinalPtBin+1,syste2);
209 Double_t maxy=TMath::Max(hv2m2->GetMaximum(),hv2m1->GetMaximum())+0.1;
210 Double_t miny=TMath::Min(hv2m2->GetMinimum(),hv2m1->GetMinimum())-0.1;
211 TH2F* hempty=new TH2F("hempty","",10,0.,hv2m1->GetXaxis()->GetXmax()+2.,10,miny,maxy);
212 hempty->GetXaxis()->SetTitle("p_{t} (GeV/c)");
213 hempty->GetYaxis()->SetTitle("v_{2}");
215 TCanvas* cv2=new TCanvas("cv2","v2");
217 hv2m1->SetMarkerStyle(26);
218 hSystErr1->SetFillColor(kGray);
219 hSystErr1->SetFillStyle(3002);
220 hSystErr1->Draw("e2same");
222 hv2m2->SetLineColor(kRed+1);
223 hv2m2->SetMarkerColor(kRed+1);
224 hv2m2->SetMarkerStyle(20);
225 hSystErr2->SetFillColor(kRed-9);
226 hSystErr2->SetFillStyle(3005);
227 hSystErr2->Draw("e2same");
232 TLegend* leg2=new TLegend(0.5,0.7,0.89,0.89);
233 leg2->SetFillStyle(0);
234 TLegendEntry* ent=leg2->AddEntry(hv2m1,"Side Band subtraction","P");
235 ent->SetTextColor(hv2m1->GetMarkerColor());
236 ent=leg2->AddEntry(hv2m2,"Fit to v2 vs. mass","P");
237 ent->SetTextColor(hv2m2->GetMarkerColor());
240 cv2->SaveAs("Dzero-v2-2Dmethods.gif");
242 TFile* outfil=new TFile("Dzero-v2-2Dmethods.root","recreate");
252 Double_t v2vsMass(Double_t *x, Double_t *par){
253 // Fit function for signal+background
254 // par[0] = S/B at the mass peak
260 Double_t fracsig=par[0]*TMath::Exp(-(x[0]-par[1])*(x[0]-par[1])/2./par[2]/par[2]);
261 Double_t fracbkg=1-fracsig;
262 return par[3]*fracsig+par[4]*fracbkg;
265 Double_t v2vsMassLin(Double_t *x, Double_t *par){
266 // Fit function for signal+background
267 // par[0] = S/B at the mass peak
271 // par[4] = v2back constant
272 // par[5] = v2back slope
274 Double_t fracsig=par[0]*TMath::Exp(-(x[0]-par[1])*(x[0]-par[1])/2./par[2]/par[2]);
275 Double_t fracbkg=1-fracsig;
276 return par[3]*fracsig+(par[4]+par[5]*x[0])*fracbkg;
279 Bool_t FitMassSpectrum(TH1F* hMass, TPad* pad){
281 Int_t nMassBins=hMass->GetNbinsX();
284 Double_t hmin=hMass->GetBinLowEdge(hMinBin);
285 Double_t hmax=hMass->GetBinLowEdge(hMaxBin)+hMass->GetBinWidth(hMaxBin);
286 Float_t massD=TDatabasePDG::Instance()->GetParticle(mesonPDG)->Mass();
288 AliHFMassFitter* fitter=new AliHFMassFitter(hMass,hmin,hmax,2,0,0);
289 fitter->SetReflectionSigmaFactor(factor4refl);
290 fitter->SetInitialGaussianMean(massD);
291 Bool_t out=fitter->MassFitter(0);
292 if(!out) return kFALSE;
293 fitter->Signal(sigmaRangeForSig, signalFromFit,esignalFromFit);
294 massFromFit=fitter->GetMean();
295 sigmaFromFit=fitter->GetSigma();
296 fB1=fitter->GetBackgroundFullRangeFunc();
297 fB2=fitter->GetBackgroundRecalcFunc();
298 fSB=fitter->GetMassFunc();
299 if(!fB1) return kFALSE;
300 if(!fB2) return kFALSE;
301 if(!fSB) return kFALSE;
303 fitter->DrawHere(gPad,3.,0.);
308 TH1F* DoSideBands(Int_t iFinalPtBin,
315 // Build histo with cos(2*deltaphi) distribution for signal
317 Double_t hmin=hMass->GetBinLowEdge(hMinBin);
318 Double_t hmax=hMass->GetBinLowEdge(hMaxBin)+hMass->GetBinWidth(hMaxBin);
320 Double_t minMassSig=massFromFit-sigmaRangeForSig*sigmaFromFit;
321 Double_t maxMassSig=massFromFit+sigmaRangeForSig*sigmaFromFit;
322 Int_t minBinSig=hMass->FindBin(minMassSig);
323 Int_t maxBinSig=hMass->FindBin(maxMassSig);
324 Double_t minMassSigBin=hMass->GetBinLowEdge(minBinSig);
325 Double_t maxMassSigBin=hMass->GetBinLowEdge(maxBinSig)+hMass->GetBinWidth(maxBinSig);
326 printf("Signal Fit Limits = %f %f\n",minMassSigBin,maxMassSigBin);
327 Double_t maxMassBkgLow=massFromFit-sigmaRangeForBkg*sigmaFromFit;
328 Int_t minBinBkgLow=hMinBin;
329 Int_t maxBinBkgLow=hMass->FindBin(maxMassBkgLow);
330 Double_t minMassBkgLowBin=hmin;
331 Double_t maxMassBkgLowBin=hMass->GetBinLowEdge(maxBinBkgLow)+hMass->GetBinWidth(maxBinBkgLow);
332 Double_t minMassBkgHi=massFromFit+sigmaRangeForBkg*sigmaFromFit;
333 Int_t minBinBkgHi=hMass->FindBin(minMassBkgHi);
334 Int_t maxBinBkgHi=hMaxBin;
335 Double_t minMassBkgHiBin=hMass->GetBinLowEdge(minBinBkgHi);
336 Double_t maxMassBkgHiBin=hmax;
337 printf("BKG Fit Limits = %f %f && %f %f\n",minMassBkgLowBin,maxMassBkgLowBin,minMassBkgHiBin,maxMassBkgHiBin);
338 Double_t bkgSig=fB2->Integral(minMassSigBin,maxMassSigBin);
339 Double_t bkgLow=fB2->Integral(minMassBkgLowBin,maxMassBkgLowBin);
340 Double_t bkgHi=fB2->Integral(minMassBkgHiBin,maxMassBkgHiBin);
341 printf("Background integrals = %f %f %f\n",bkgLow,bkgSig,bkgHi);
343 TBox* bleft=new TBox(minMassBkgLowBin,0.,maxMassBkgLowBin,hMass->GetMaximum());
344 bleft->SetFillColor(kRed+1);
345 bleft->SetFillStyle(3002);
347 TBox* bright=new TBox(minMassBkgHiBin,0.,maxMassBkgHiBin,hMass->GetMaximum());
348 bright->SetFillColor(kBlue+1);
349 bright->SetFillStyle(3002);
351 TBox* bsig=new TBox(minMassSigBin,0.,maxMassSigBin,hMass->GetMaximum()*2);
352 bsig->SetFillColor(1);
353 bsig->SetFillStyle(3002);
356 TH1F* hCos2PhiBkgLo=(TH1F*)hMassDphi->ProjectionX(Form("hCos2PhiBkgLoBin%d",iFinalPtBin),minBinBkgLow,maxBinBkgLow);
357 TH1F* hCos2PhiBkgHi=(TH1F*)hMassDphi->ProjectionX(Form("hCos2PhiBkgHiBin%d",iFinalPtBin),minBinBkgHi,maxBinBkgHi);
358 TH1F* hCos2PhiSigReg=(TH1F*)hMassDphi->ProjectionX(Form("hCos2PhiBkgSigBin%d",iFinalPtBin),minBinSig,maxBinSig);
360 hCos2PhiBkgLo->Rebin(rebin);
361 hCos2PhiBkgHi->Rebin(rebin);
362 hCos2PhiSigReg->Rebin(rebin);
363 hCos2PhiSigReg->SetLineWidth(2);
364 hCos2PhiBkgLo->SetLineWidth(2);
365 hCos2PhiBkgHi->SetLineWidth(2);
366 hCos2PhiBkgLo->SetLineColor(kRed+1);
367 hCos2PhiBkgHi->SetLineColor(kBlue+1);
369 TH1F* hCos2PhiBkgLoScal=(TH1F*)hCos2PhiBkgLo->Clone(Form("hCos2PhiBkgLoScalBin%d",iFinalPtBin));
370 hCos2PhiBkgLoScal->Scale(bkgSig/bkgLow);
371 TH1F* hCos2PhiBkgHiScal=(TH1F*)hCos2PhiBkgHi->Clone(Form("hCos2PhiBkgHiScalBin%d",iFinalPtBin));
372 hCos2PhiBkgHiScal->Scale(bkgSig/bkgHi);
373 hCos2PhiBkgLoScal->SetLineWidth(2);
374 hCos2PhiBkgHiScal->SetLineWidth(2);
375 hCos2PhiBkgLoScal->SetLineColor(kRed+1);
376 hCos2PhiBkgHiScal->SetLineColor(kBlue+1);
377 TH1F* hCos2PhiBkgAver=0x0;
379 hCos2PhiBkgAver=(TH1F*)hCos2PhiBkgLoScal->Clone(Form("hCos2PhiBkgAverBin%d",iFinalPtBin));
380 hCos2PhiBkgAver->Add(hCos2PhiBkgHiScal);
381 hCos2PhiBkgAver->Scale(0.5);
382 }else if(optBkg==-1){
383 hCos2PhiBkgAver=(TH1F*)hCos2PhiBkgLoScal->Clone(Form("hCos2PhiBkgAverBin%d",iFinalPtBin));
385 hCos2PhiBkgAver=(TH1F*)hCos2PhiBkgHiScal->Clone(Form("hCos2PhiBkgAverBin%d",iFinalPtBin));
387 hCos2PhiBkgAver->SetLineWidth(2);
388 hCos2PhiBkgAver->SetLineColor(kGreen+1);
389 TH1F* hCos2PhiSig=(TH1F*)hCos2PhiSigReg->Clone(Form("hCos2PhiSigBin%d",iFinalPtBin));
390 hCos2PhiSig->Add(hCos2PhiBkgAver,-1.);
392 TLegend* leg0=new TLegend(0.3,0.6,0.75,0.89);
393 TPaveText* t0= new TPaveText(0.15,0.70,0.45,0.89,"NDC");
396 hCos2PhiSigReg->Draw();
397 hCos2PhiBkgLoScal->Draw("same");
398 hCos2PhiBkgHiScal->Draw("same");
399 hCos2PhiBkgAver->Draw("same");
400 leg0->SetFillColor(0);
401 TLegendEntry* ent=leg0->AddEntry(hCos2PhiSigReg,"Signal region","L");
402 ent->SetTextColor(hCos2PhiSigReg->GetLineColor());
403 ent=leg0->AddEntry(hCos2PhiBkgLoScal,"Left side band","L");
404 ent->SetTextColor(hCos2PhiBkgLoScal->GetLineColor());
405 ent=leg0->AddEntry(hCos2PhiBkgHiScal,"Right side band","L");
406 ent->SetTextColor(hCos2PhiBkgHiScal->GetLineColor());
407 ent=leg0->AddEntry(hCos2PhiBkgAver,"Average of side bands","L");
408 ent->SetTextColor(hCos2PhiBkgAver->GetLineColor());
411 hCos2PhiSig->Draw("EP");
413 t0->AddText(Form("v2=%.3f+-%.3f\n",hCos2PhiSig->GetMean(),hCos2PhiSig->GetMeanError()));
421 delete hCos2PhiBkgLo;
422 delete hCos2PhiBkgHi;
423 delete hCos2PhiSigReg;
424 delete hCos2PhiBkgLoScal;
425 delete hCos2PhiBkgHiScal;
426 delete hCos2PhiBkgAver;
428 printf("Signal from mass fitter = %f Signal from subracted histo= %f\n",
429 signalFromFit,hCos2PhiSig->Integral());
434 TF1* DoFitv2vsMass(Int_t iFinalPtBin, TH2F* hMassDphi, TH1F* hMass, Int_t rebin, TCanvas* c2, Int_t optErrors, Bool_t useConst){
436 Int_t npars=fSB->GetNpar();
437 Double_t sigmaSB=fSB->GetParameter(npars-1);
438 Double_t massSB=fSB->GetParameter(npars-2);
439 Double_t integr=fSB->GetParameter(npars-3);
440 Double_t sOverAll=(fSB->Eval(massSB)-fB2->Eval(massSB))/fSB->Eval(massSB);
441 printf("mass=%f S+B=%f bkg=%f S/(S+B)=%f\n",massSB,fSB->Eval(massSB),fB2->Eval(massSB),sOverAll);
442 printf("Number of parameters: %d. Signal params: %f %f %f\n",npars,massSB,sigmaSB,integr);
444 sOverAll+=fSB->GetParError(npars-3)/fSB->GetParameter(npars-3);
446 else if(optErrors==-1){
447 sOverAll-=fSB->GetParError(npars-3)/fSB->GetParameter(npars-3);
450 Int_t nbinsmass=hMassDphi->GetNbinsY();
451 Double_t minmass=hMassDphi->GetYaxis()->GetXmin();
452 Double_t maxmass=hMassDphi->GetYaxis()->GetXmax();
454 TF1* fSig=new TF1(Form("fSig%d",iFinalPtBin),"[0]/TMath::Sqrt(2.*TMath::Pi())/[2]*TMath::Exp(-(x-[1])*(x-[1])/2./[2]/[2])",minmass,maxmass);
455 fSig->SetParameters(integr,massSB,sigmaSB);
457 TH1F* hAverCos2Phi=new TH1F(Form("hAverCos2PhiBin%d",iFinalPtBin),"",nbinsmass,minmass,maxmass);
458 TH1F* hFractionSig=new TH1F(Form("hFractionSigBin%d",iFinalPtBin),"",nbinsmass,minmass,maxmass);
459 TH1F* hFractionBkg=new TH1F(Form("hFractionBkgBin%d",iFinalPtBin),"",nbinsmass,minmass,maxmass);
461 for(Int_t iBin=1; iBin<=hMassDphi->GetNbinsY(); iBin++){
462 TH1F* htemp=(TH1F*)hMassDphi->ProjectionX("htemp",iBin,iBin);
463 hAverCos2Phi->SetBinContent(iBin,htemp->GetMean());
464 hAverCos2Phi->SetBinError(iBin,htemp->GetMeanError());
465 Double_t sig=fSig->Eval(hFractionSig->GetBinCenter(iBin));
466 Double_t bkg=fB2->Eval(hFractionSig->GetBinCenter(iBin));
468 hFractionSig->SetBinContent(iBin,0.);
469 hFractionSig->SetBinError(iBin,0.);
470 hFractionBkg->SetBinContent(iBin,1.);
471 hFractionBkg->SetBinError(iBin,0.);
473 Double_t fracs=sig/(sig+bkg);
474 Double_t fracb=bkg/(sig+bkg);
475 Double_t efracs=0.;//TMath::Sqrt(fracs*(1.-fracs)/(sig+bkg));
476 Double_t efracb=0.;//TMath::Sqrt(fracb*(1.-fracb)/(sig+bkg));
478 hFractionSig->SetBinContent(iBin,fracs);
479 hFractionSig->SetBinError(iBin,efracs);
480 hFractionBkg->SetBinContent(iBin,fracb);
481 hFractionBkg->SetBinError(iBin,efracb);
488 fv2=new TF1(Form("fv2Bin%d",iFinalPtBin),v2vsMass,minmass,maxmass,5);
490 fv2=new TF1(Form("fv2Bin%d",iFinalPtBin),v2vsMassLin,minmass,maxmass,6);
491 fv2->SetParameter(5,0.);
493 fv2->SetParameter(0,sOverAll);
494 fv2->SetParameter(1,massSB);
495 fv2->SetParameter(2,sigmaSB);
496 fv2->SetParameter(3,0.2);
497 fv2->SetParameter(4,0.2);
498 fv2->FixParameter(0,sOverAll);
499 fv2->FixParameter(1,massSB);
500 fv2->FixParameter(2,sigmaSB);
502 if((hAverCos2Phi->GetNbinsX()%rebin)==0){
503 hAverCos2Phi->Rebin(rebin);
504 hAverCos2Phi->Scale(1./(Double_t)rebin);
510 hMassDphi->Draw("colz");
513 hMass->SetMinimum(0.);
514 hMass->SetMarkerStyle(20);
520 hFractionSig->SetMaximum(1.2);
521 hFractionSig->Draw();
522 hFractionSig->GetXaxis()->SetTitle("Mass (GeV/c^2)");
523 hFractionSig->GetYaxis()->SetTitle("Fraction");
524 hFractionBkg->SetLineColor(2);
525 hFractionBkg->Draw("same");
526 TLegend* leg1=new TLegend(0.15,0.15,0.35,0.35);
527 leg1->SetFillColor(0);
528 TLegendEntry* ent=leg1->AddEntry(hFractionSig,"S/(S+B)","L");
529 ent->SetTextColor(hFractionSig->GetLineColor());
530 ent=leg1->AddEntry(hFractionBkg,"B/(S+B)","L");
531 ent->SetTextColor(hFractionBkg->GetLineColor());
534 hAverCos2Phi->Fit(fv2);
535 fv2->DrawCopy("same");
536 hAverCos2Phi->GetXaxis()->SetTitle("Mass (GeV/c^2)");
537 hAverCos2Phi->GetYaxis()->SetTitle("v_2^{obs}");
538 TPaveText* t1= new TPaveText(0.55,0.70,0.89,0.89,"NDC");
540 t1->AddText(Form("v2sig=%.3f+-%.3f\n",fv2->GetParameter(3),fv2->GetParError(3)));
542 t1->AddText(Form("v2bkg=%.3f+-%.3f\n",fv2->GetParameter(4),fv2->GetParError(4)));
544 t1->AddText(Form("v2bkg=(%.3f+-%.3f) + (%.3g+-%.3g)*mass\n",fv2->GetParameter(4),fv2->GetParError(4),fv2->GetParameter(5),fv2->GetParError(5)));
549 hAverCos2Phi->Fit(fv2);
555 Double_t GetEPResolution(TList* lst, Double_t &rcflow, Double_t &rcfhigh){
556 // Event plane resolution syst err (from wide centrality bin
557 TH1F* hResolSubAB=0x0;
560 TGraphAsymmErrors* grSingle=new TGraphAsymmErrors(0);
561 TGraphAsymmErrors* grInteg=new TGraphAsymmErrors(0);
563 for(Int_t iHisC=minCent; iHisC<=maxCent-5; iHisC+=5){
564 TString hisnameEP=Form("hEvPlaneResocentr%d_%d",iHisC,iHisC+5);
565 TH1F* hResolSubABsing=(TH1F*)lst->FindObject(hisnameEP.Data());
566 Double_t resolFull=AliEventPlaneResolution::GetFullEvResol(hResolSubABsing,1);
567 Double_t resolFullmin=AliEventPlaneResolution::GetFullEvResolLowLim(hResolSubABsing,1);
568 Double_t resolFullmax=AliEventPlaneResolution::GetFullEvResolHighLim(hResolSubABsing,1);
569 grSingle->SetPoint(iPt,iHisC+2.5,resolFull);
570 grSingle->SetPointEXlow(iPt,2.5);
571 grSingle->SetPointEXhigh(iPt,2.5);
572 grSingle->SetPointEYlow(iPt,resolFullmax-resolFull);
573 grSingle->SetPointEYhigh(iPt,resolFull-resolFullmin);
575 if(resolFullmin<xmin) xmin=resolFullmin;
576 if(resolFullmax>xmax) xmax=resolFullmax;
578 hResolSubAB=(TH1F*)hResolSubABsing->Clone("hResolSubAB");
580 hResolSubAB->Add(hResolSubABsing);
582 printf("Adding histogram %s\n",hisnameEP.Data());
587 Double_t resolSub=AliEventPlaneResolution::GetSubEvResol(hResolSubAB);
588 printf("Resolution on sub event = %.4f\n",resolSub);
589 Double_t chisub=AliEventPlaneResolution::FindChi(resolSub,1);
590 printf("Chi Subevent = %.4f\n",chisub);
591 Double_t chifull=chisub*TMath::Sqrt(2);
592 printf("Chi Full Event = %.4f\n",chifull);
593 Double_t resolFull=AliEventPlaneResolution::GetFullEvResol(hResolSubAB,1);
594 Double_t resolFullmin=AliEventPlaneResolution::GetFullEvResolLowLim(hResolSubAB,1);
595 Double_t resolFullmax=AliEventPlaneResolution::GetFullEvResolHighLim(hResolSubAB,1);
597 AliEventPlaneResolution *resol=new AliEventPlaneResolution(1);
598 resol->SetSubEventHisto(hResolSubAB);
599 Double_t resolFull2=resol->GetFullEvResol();
600 printf("Resolution on full event = %.4f %.4f\n",resolFull,resolFull2);
602 grInteg->SetPoint(0,40.,resolFull);
603 grInteg->SetPointEXlow(0,10);
604 grInteg->SetPointEXhigh(0,10.);
605 grInteg->SetPointEYlow(0,resolFullmax-resolFull);
606 grInteg->SetPointEYhigh(0,resolFull-resolFullmin);
609 TCanvas* cEP=new TCanvas("cEP","EvPlaneResol");
613 TLatex* tres=new TLatex(0.15,0.7,Form("Resolution on full event = %.4f\n",resolFull));
617 grSingle->SetMarkerStyle(20);
618 grInteg->SetMarkerColor(kRed+1);
619 grInteg->SetLineColor(kRed+1);
620 grInteg->SetMarkerStyle(29);
621 grSingle->Draw("AP");
622 grSingle->GetXaxis()->SetTitle("Centrality Percentile");
623 grSingle->GetYaxis()->SetTitle("Resolution Correction Factor");
624 grInteg->Draw("Psame");
631 void LoadMassHistos(TList* lst, TH2F** hMassDphi){
633 for(Int_t iHisC=minCent; iHisC<=maxCent-5; iHisC+=5){
634 for(Int_t iFinalPtBin=0; iFinalPtBin<nFinalPtBins; iFinalPtBin++){
635 for(Int_t iPtBin=minPtBin[iFinalPtBin]; iPtBin<=maxPtBin[iFinalPtBin]; iPtBin++){
636 TString hisname=Form("hMc2phi_pt%dcentr%d_%d",iPtBin,iHisC,iHisC+5);
637 TH2F* htmp=(TH2F*)lst->FindObject(hisname.Data());
638 if(hMassDphi[iFinalPtBin]==0x0){
639 hMassDphi[iFinalPtBin]=(TH2F*)htmp->Clone(Form("hMassCos2DphiBin%d",iFinalPtBin));
641 hMassDphi[iFinalPtBin]->Add(htmp);
643 printf("Adding histogram %s to PtBin %d\n",hisname.Data(),iFinalPtBin);
649 Bool_t DefinePtBins(TDirectoryFile* df){
650 AliRDHFCutsD0toKpi *d0cuts=(AliRDHFCutsD0toKpi*)df->Get("D0toKpiCuts");
651 Int_t nPtBinsCuts=d0cuts->GetNPtBins();
652 printf("Number of pt bins for cut object = %d\n",nPtBinsCuts);
653 Float_t *ptlimsCuts=d0cuts->GetPtBinLimits();
654 for(Int_t iPt=0; iPt<nPtBinsCuts; iPt++) printf(" %d %f \n",iPt,ptlimsCuts[iPt]);
655 for(Int_t iPtCuts=0; iPtCuts<nPtBinsCuts; iPtCuts++){
656 for(Int_t iFinalPtBin=0; iFinalPtBin<nFinalPtBins; iFinalPtBin++){
657 if(TMath::Abs(ptlimsCuts[iPtCuts]-ptlims[iFinalPtBin])<0.0001){
658 minPtBin[iFinalPtBin]=iPtCuts;
659 if(iFinalPtBin>0) maxPtBin[iFinalPtBin-1]=iPtCuts;
662 if(TMath::Abs(ptlimsCuts[iPtCuts]-ptlims[nFinalPtBins])<0.0001) maxPtBin[nFinalPtBins-1]=iPtCuts;
665 for(Int_t iFinalPtBin=0; iFinalPtBin<nFinalPtBins; iFinalPtBin++){
666 printf("Pt bins to be merged: %d %d\n",minPtBin[iFinalPtBin],maxPtBin[iFinalPtBin]);
667 if(minPtBin[iFinalPtBin]<0 || maxPtBin[iFinalPtBin]<0) return kFALSE;
673 void SystForSideBands(){
674 gInterpreter->ExecuteMacro("$ALICE_ROOT/PWG3/vertexingHF/macros/LoadLibraries.C");
676 TFile* filcuts=new TFile(filcutsname.Data());
677 TDirectoryFile* dfcuts=(TDirectoryFile*)filcuts->Get("PWG3_D2H_HFv2");
678 Bool_t binOK=DefinePtBins(dfcuts);
681 TFile* fil=new TFile(filname.Data());
682 TDirectoryFile* df=(TDirectoryFile*)fil->Get("PWG3_D2H_HFv2");
683 TList* lst=(TList*)df->Get(listname.Data());
685 printf("ERROR: list %s not found in file\n",listname.Data());
689 Double_t rcfmin,rcfmax;
690 Double_t resolFull=GetEPResolution(lst,rcfmin,rcfmax);
692 TH2F** hMassDphi=new TH2F*[nFinalPtBins];
693 for(Int_t iFinalPtBin=0; iFinalPtBin<nFinalPtBins; iFinalPtBin++){
694 hMassDphi[iFinalPtBin]=0x0;
696 LoadMassHistos(lst, hMassDphi);
700 TGraphErrors** gSystSigRange=new TGraphErrors*[nFinalPtBins];
701 TGraphErrors** gSystBkgRange=new TGraphErrors*[nFinalPtBins];
702 TGraphErrors** gSystRebin=new TGraphErrors*[nFinalPtBins];
703 TGraphErrors** gSystWhichSide=new TGraphErrors*[nFinalPtBins];
705 Double_t min1[nFinalPtBins],max1[nFinalPtBins];
706 Double_t min123[nFinalPtBins],max123[nFinalPtBins];
707 Double_t min2[nFinalPtBins],max2[nFinalPtBins];
708 Double_t min3[nFinalPtBins],max3[nFinalPtBins];
709 Double_t min4[nFinalPtBins],max4[nFinalPtBins];
711 Double_t sigmaRangeForSigOrig=sigmaRangeForSig;
712 Double_t sigmaRangeForBkgOrig=sigmaRangeForBkg;
715 for(Int_t iFinalPtBin=0; iFinalPtBin<nFinalPtBins; iFinalPtBin++){
716 printf("**************** BIN %d ******************\n",iFinalPtBin);
718 Int_t rebinHistoSideBandsOrig=rebinHistoSideBands[iFinalPtBin];
720 gSystSigRange[iFinalPtBin]=new TGraphErrors(0);
721 gSystSigRange[iFinalPtBin]->SetTitle(Form("v2 vs. nSigma Signal Region Ptbin %d",iFinalPtBin));
723 TH1F* hMass=(TH1F*)hMassDphi[iFinalPtBin]->ProjectionY();
725 Bool_t out=FitMassSpectrum(hMass,0x0);
728 min1[iFinalPtBin]=99999.;
729 max1[iFinalPtBin]=-99999.;
730 min123[iFinalPtBin]=99999.;
731 max123[iFinalPtBin]=-99999.;
732 for(Int_t iStep=0; iStep<nSteps; iStep++){
733 Int_t index=iFinalPtBin*nSteps+iStep;
734 sigmaRangeForSig=1.5+0.1*iStep;
735 sigmaRangeForBkg=sigmaRangeForBkgOrig;
736 rebinHistoSideBands[iFinalPtBin]=rebinHistoSideBandsOrig;
737 TH1F* hCos2PhiSig=DoSideBands(index,hMassDphi[iFinalPtBin],hMass,rebinHistoSideBands[iFinalPtBin],0x0);
738 Double_t v2obsM1=hCos2PhiSig->GetMean();
739 Double_t errv2obsM1=hCos2PhiSig->GetMeanError();
741 Double_t v2M1=v2obsM1/resolFull;
742 Double_t errv2M1=errv2obsM1/resolFull;
743 gSystSigRange[iFinalPtBin]->SetPoint(iStep,sigmaRangeForSig,v2M1);
744 gSystSigRange[iFinalPtBin]->SetPointError(iStep,0.,errv2M1);
745 if(v2M1>max1[iFinalPtBin]) max1[iFinalPtBin]=v2M1;
746 if(v2M1<min1[iFinalPtBin]) min1[iFinalPtBin]=v2M1;
747 if(sigmaRangeForSig>=2. && sigmaRangeForSig<=3){
748 if(v2M1>max123[iFinalPtBin]) max123[iFinalPtBin]=v2M1;
749 if(v2M1<min123[iFinalPtBin]) min123[iFinalPtBin]=v2M1;
753 min2[iFinalPtBin]=99999.;
754 max2[iFinalPtBin]=-99999.;
755 gSystBkgRange[iFinalPtBin]=new TGraphErrors(0);
756 gSystBkgRange[iFinalPtBin]->SetTitle(Form("v2 vs. nSigma Bkg Region Ptbin %d",iFinalPtBin));
757 for(Int_t iStep=0; iStep<nSteps; iStep++){
758 Int_t index=nSteps*nFinalPtBins+iFinalPtBin*nSteps+iStep;
759 sigmaRangeForSig=sigmaRangeForSigOrig;
760 sigmaRangeForBkg=4.+0.1*iStep;
761 rebinHistoSideBands[iFinalPtBin]=rebinHistoSideBandsOrig;
762 TH1F* hCos2PhiSig=DoSideBands(index,hMassDphi[iFinalPtBin],hMass,rebinHistoSideBands[iFinalPtBin],0x0);
763 Double_t v2obsM1=hCos2PhiSig->GetMean();
764 Double_t errv2obsM1=hCos2PhiSig->GetMeanError();
766 Double_t v2M1=v2obsM1/resolFull;
767 Double_t errv2M1=errv2obsM1/resolFull;
768 gSystBkgRange[iFinalPtBin]->SetPoint(iStep,sigmaRangeForBkg,v2M1);
769 gSystBkgRange[iFinalPtBin]->SetPointError(iStep,0.,errv2M1);
770 if(v2M1>max2[iFinalPtBin]) max2[iFinalPtBin]=v2M1;
771 if(v2M1<min2[iFinalPtBin]) min2[iFinalPtBin]=v2M1;
774 min3[iFinalPtBin]=99999.;
775 max3[iFinalPtBin]=-99999.;
776 gSystRebin[iFinalPtBin]=new TGraphErrors(0);
777 gSystRebin[iFinalPtBin]->SetTitle(Form("v2 vs. Rebin Ptbin %d",iFinalPtBin));
779 for(Int_t iStep=0; iStep<nSteps; iStep++){
780 Int_t index=2*nSteps*nFinalPtBins+iFinalPtBin*nSteps+iStep;
781 sigmaRangeForSig=sigmaRangeForSigOrig;
782 sigmaRangeForBkg=sigmaRangeForBkgOrig;
783 rebinHistoSideBands[iFinalPtBin]=iStep+1;
784 if((hMassDphi[iFinalPtBin]->GetNbinsY())%rebinHistoSideBands[iFinalPtBin]!=0) continue;
785 TH1F* hCos2PhiSig=DoSideBands(index,hMassDphi[iFinalPtBin],hMass,rebinHistoSideBands[iFinalPtBin],0x0);
786 Double_t v2obsM1=hCos2PhiSig->GetMean();
787 Double_t errv2obsM1=hCos2PhiSig->GetMeanError();
789 Double_t v2M1=v2obsM1/resolFull;
790 Double_t errv2M1=errv2obsM1/resolFull;
791 gSystRebin[iFinalPtBin]->SetPoint(nPts,(Double_t)rebinHistoSideBands[iFinalPtBin],v2M1);
792 gSystRebin[iFinalPtBin]->SetPointError(nPts,0.,errv2M1);
793 if(v2M1>max3[iFinalPtBin]) max3[iFinalPtBin]=v2M1;
794 if(v2M1<min3[iFinalPtBin]) min3[iFinalPtBin]=v2M1;
798 min4[iFinalPtBin]=99999.;
799 max4[iFinalPtBin]=-99999.;
800 gSystWhichSide[iFinalPtBin]=new TGraphErrors(0);
801 gSystWhichSide[iFinalPtBin]->SetTitle(Form("v2 vs. WhichSide Ptbin %d",iFinalPtBin));
803 for(Int_t iStep=-1; iStep<=1; iStep++){
804 Int_t index=3*nSteps*nFinalPtBins+2+iStep;
805 sigmaRangeForSig=sigmaRangeForSigOrig;
806 sigmaRangeForBkg=sigmaRangeForBkgOrig;
807 rebinHistoSideBands[iFinalPtBin]=rebinHistoSideBandsOrig;
808 TH1F* hCos2PhiSig=DoSideBands(index,hMassDphi[iFinalPtBin],hMass,rebinHistoSideBands[iFinalPtBin],0x0,iStep);
809 Double_t v2obsM1=hCos2PhiSig->GetMean();
810 Double_t errv2obsM1=hCos2PhiSig->GetMeanError();
812 Double_t v2M1=v2obsM1/resolFull;
813 Double_t errv2M1=errv2obsM1/resolFull;
814 gSystWhichSide[iFinalPtBin]->SetPoint(nPts,(Double_t)iStep,v2M1);
815 gSystWhichSide[iFinalPtBin]->SetPointError(nPts,0.,errv2M1);
816 if(v2M1>max4[iFinalPtBin]) max4[iFinalPtBin]=v2M1;
817 if(v2M1<min4[iFinalPtBin]) min4[iFinalPtBin]=v2M1;
820 rebinHistoSideBands[iFinalPtBin]=rebinHistoSideBandsOrig;
823 for(Int_t iFinalPtBin=0; iFinalPtBin<nFinalPtBins; iFinalPtBin++){
824 printf("------ Pt Bin %d ------\n",iFinalPtBin);
825 printf("Range of values for sig variation = %f %f\n",min1[iFinalPtBin],max1[iFinalPtBin]);
826 printf(" (limited to 2-3 sigma) = %f %f\n",min123[iFinalPtBin],max123[iFinalPtBin]);
827 printf("Range of values for bkg variation = %f %f\n",min2[iFinalPtBin],max2[iFinalPtBin]);
828 printf("Range of values for rebin = %f %f\n",min3[iFinalPtBin],max3[iFinalPtBin]);
829 printf("Range of values for whichside = %f %f\n",min4[iFinalPtBin],max4[iFinalPtBin]);
830 Float_t minenv=TMath::Min(min123[iFinalPtBin],TMath::Min(min2[iFinalPtBin],min4[iFinalPtBin]));
831 Float_t maxenv=TMath::Max(max123[iFinalPtBin],TMath::Max(max2[iFinalPtBin],max4[iFinalPtBin]));
832 printf(" ---> Envelope = %f %f\n",minenv,maxenv);
835 TCanvas* cs1=new TCanvas("cs1");
837 for(Int_t iFinalPtBin=0; iFinalPtBin<nFinalPtBins; iFinalPtBin++){
838 cs1->cd(iFinalPtBin+1);
839 gSystSigRange[iFinalPtBin]->SetMarkerStyle(20);
840 gSystSigRange[iFinalPtBin]->Draw("AP");
841 gSystSigRange[iFinalPtBin]->GetXaxis()->SetTitle("nSigmaSignal");
842 gSystSigRange[iFinalPtBin]->GetYaxis()->SetTitle("v2");
845 TCanvas* cs2=new TCanvas("cs2");
847 for(Int_t iFinalPtBin=0; iFinalPtBin<nFinalPtBins; iFinalPtBin++){
848 cs2->cd(iFinalPtBin+1);
849 gSystBkgRange[iFinalPtBin]->SetMarkerStyle(20);
850 gSystBkgRange[iFinalPtBin]->Draw("AP");
851 gSystBkgRange[iFinalPtBin]->GetXaxis()->SetTitle("nSigmaBackground");
852 gSystBkgRange[iFinalPtBin]->GetYaxis()->SetTitle("v2");
855 TCanvas* cs3=new TCanvas("cs3");
857 for(Int_t iFinalPtBin=0; iFinalPtBin<nFinalPtBins; iFinalPtBin++){
858 cs3->cd(iFinalPtBin+1);
859 gSystRebin[iFinalPtBin]->SetMarkerStyle(20);
860 gSystRebin[iFinalPtBin]->Draw("AP");
861 gSystRebin[iFinalPtBin]->GetXaxis()->SetTitle("Rebin factor");
862 gSystRebin[iFinalPtBin]->GetYaxis()->SetTitle("v2");
865 TCanvas* cs4=new TCanvas("cs4");
867 for(Int_t iFinalPtBin=0; iFinalPtBin<nFinalPtBins; iFinalPtBin++){
868 cs4->cd(iFinalPtBin+1);
869 gSystWhichSide[iFinalPtBin]->SetMarkerStyle(20);
870 gSystWhichSide[iFinalPtBin]->Draw("AP");
871 gSystWhichSide[iFinalPtBin]->GetXaxis()->SetTitle("Side band used");
872 gSystWhichSide[iFinalPtBin]->GetYaxis()->SetTitle("v2");
876 void SystForFitv2Mass(){
877 gInterpreter->ExecuteMacro("$ALICE_ROOT/PWG3/vertexingHF/macros/LoadLibraries.C");
879 TFile* filcuts=new TFile(filcutsname.Data());
880 TDirectoryFile* dfcuts=(TDirectoryFile*)filcuts->Get("PWG3_D2H_HFv2");
881 Bool_t binOK=DefinePtBins(dfcuts);
884 TFile* fil=new TFile(filname.Data());
885 TDirectoryFile* df=(TDirectoryFile*)fil->Get("PWG3_D2H_HFv2");
886 TList* lst=(TList*)df->Get(listname.Data());
888 printf("ERROR: list %s not found in file\n",listname.Data());
892 Double_t rcfmin,rcfmax;
893 Double_t resolFull=GetEPResolution(lst,rcfmin,rcfmax);
895 TH2F** hMassDphi=new TH2F*[nFinalPtBins];
896 for(Int_t iFinalPtBin=0; iFinalPtBin<nFinalPtBins; iFinalPtBin++){
897 hMassDphi[iFinalPtBin]=0x0;
899 LoadMassHistos(lst, hMassDphi);
903 TGraphErrors** gSystParamErr=new TGraphErrors*[nFinalPtBins];
904 TGraphErrors** gSystRebin=new TGraphErrors*[nFinalPtBins];
905 TGraphErrors** gSystLinConst=new TGraphErrors*[nFinalPtBins];
907 Double_t min1[nFinalPtBins],max1[nFinalPtBins];
908 Double_t min2[nFinalPtBins],max2[nFinalPtBins];
909 Double_t min3[nFinalPtBins],max3[nFinalPtBins];
912 for(Int_t iFinalPtBin=0; iFinalPtBin<nFinalPtBins; iFinalPtBin++){
913 printf("**************** BIN %d ******************\n",iFinalPtBin);
915 Int_t rebinHistov2MassOrig=rebinHistov2Mass[iFinalPtBin];
916 TH1F* hMass=(TH1F*)hMassDphi[iFinalPtBin]->ProjectionY();
918 Bool_t out=FitMassSpectrum(hMass,0x0);
921 min1[iFinalPtBin]=99999.;
922 max1[iFinalPtBin]=-99999.;
923 gSystRebin[iFinalPtBin]=new TGraphErrors(0);
924 gSystRebin[iFinalPtBin]->SetTitle(Form("v2 vs. Rebin PtBin %d",iFinalPtBin));
926 for(Int_t iStep=0; iStep<nSteps; iStep++){
928 rebinHistov2Mass[iFinalPtBin]=iStep+1;
929 if((hMassDphi[iFinalPtBin]->GetNbinsY())%rebinHistov2Mass[iFinalPtBin]!=0) continue;
930 TF1* fv2=DoFitv2vsMass(index,hMassDphi[iFinalPtBin],hMass,rebinHistov2Mass[iFinalPtBin],0x0,0,useConstantvsBkgVsMass);
931 Double_t v2obsM2=fv2->GetParameter(3);
932 Double_t errv2obsM2=fv2->GetParError(3);
934 Double_t v2M2=v2obsM2/resolFull;
935 Double_t errv2M2=errv2obsM2/resolFull;
936 gSystRebin[iFinalPtBin]->SetPoint(nPts,(Double_t)rebinHistov2Mass[iFinalPtBin],v2M2);
937 gSystRebin[iFinalPtBin]->SetPointError(nPts,0.,errv2M2);
938 if(v2M2>max1[iFinalPtBin]) max1[iFinalPtBin]=v2M2;
939 if(v2M2<min1[iFinalPtBin]) min1[iFinalPtBin]=v2M2;
942 rebinHistov2Mass[iFinalPtBin]=rebinHistov2MassOrig;
944 min2[iFinalPtBin]=99999.;
945 max2[iFinalPtBin]=-99999.;
946 gSystParamErr[iFinalPtBin]=new TGraphErrors(0);
947 gSystParamErr[iFinalPtBin]->SetTitle(Form("v2 vs. ParamErr PtBin %d",iFinalPtBin));
949 for(Int_t iStep=-1; iStep<=1; iStep++){
950 Int_t index=nSteps*2+iStep;
951 TF1* fv2=DoFitv2vsMass(index,hMassDphi[iFinalPtBin],hMass,rebinHistov2Mass[iFinalPtBin],0x0,iStep,useConstantvsBkgVsMass);
952 Double_t v2obsM2=fv2->GetParameter(3);
953 Double_t errv2obsM2=fv2->GetParError(3);
955 Double_t v2M2=v2obsM2/resolFull;
956 Double_t errv2M2=errv2obsM2/resolFull;
957 gSystParamErr[iFinalPtBin]->SetPoint(nPts,(Double_t)iStep,v2M2);
958 gSystParamErr[iFinalPtBin]->SetPointError(nPts,0.,errv2M2);
959 if(v2M2>max2[iFinalPtBin]) max2[iFinalPtBin]=v2M2;
960 if(v2M2<min2[iFinalPtBin]) min2[iFinalPtBin]=v2M2;
964 min3[iFinalPtBin]=99999.;
965 max3[iFinalPtBin]=-99999.;
966 gSystLinConst[iFinalPtBin]=new TGraphErrors(0);
967 gSystLinConst[iFinalPtBin]->SetTitle(Form("v2 LinVsConst Bin%d",iFinalPtBin));
969 for(Int_t iStep=0; iStep<=1; iStep++){
970 Int_t index=nSteps*3+iStep;
971 TF1* fv2=DoFitv2vsMass(index,hMassDphi[iFinalPtBin],hMass,rebinHistov2Mass[iFinalPtBin],0x0,0,iStep);
972 Double_t v2obsM2=fv2->GetParameter(3);
973 Double_t errv2obsM2=fv2->GetParError(3);
975 Double_t v2M2=v2obsM2/resolFull;
976 Double_t errv2M2=errv2obsM2/resolFull;
977 gSystLinConst[iFinalPtBin]->SetPoint(nPts,1.-(Double_t)iStep,v2M2);
978 gSystLinConst[iFinalPtBin]->SetPointError(nPts,0.,errv2M2);
979 if(v2M2>max3[iFinalPtBin]) max3[iFinalPtBin]=v2M2;
980 if(v2M2<min3[iFinalPtBin]) min3[iFinalPtBin]=v2M2;
987 for(Int_t iFinalPtBin=0; iFinalPtBin<nFinalPtBins; iFinalPtBin++){
988 printf("------ Pt Bin %d ------\n",iFinalPtBin);
989 printf("Range of values for rebin = %f %f\n",min1[iFinalPtBin],max1[iFinalPtBin]);
990 printf("Range of values for par err = %f %f\n",min2[iFinalPtBin],max2[iFinalPtBin]);
991 printf("Range of values for lin const = %f %f\n",min3[iFinalPtBin],max3[iFinalPtBin]);
992 Float_t minenv=TMath::Min(min2[iFinalPtBin],min3[iFinalPtBin]);
993 Float_t maxenv=TMath::Max(max2[iFinalPtBin],max3[iFinalPtBin]);
994 printf(" ---> Envelope = %f %f\n",minenv,maxenv);
997 TCanvas* cs1=new TCanvas("cs1");
999 for(Int_t iFinalPtBin=0; iFinalPtBin<nFinalPtBins; iFinalPtBin++){
1000 cs1->cd(iFinalPtBin+1);
1001 gSystRebin[iFinalPtBin]->SetMarkerStyle(20);
1002 gSystRebin[iFinalPtBin]->Draw("AP");
1003 gSystRebin[iFinalPtBin]->GetXaxis()->SetTitle("Rebin factor");
1004 gSystRebin[iFinalPtBin]->GetYaxis()->SetTitle("v2");
1007 TCanvas* cs2=new TCanvas("cs2");
1009 for(Int_t iFinalPtBin=0; iFinalPtBin<nFinalPtBins; iFinalPtBin++){
1010 cs2->cd(iFinalPtBin+1);
1011 gSystParamErr[iFinalPtBin]->SetMarkerStyle(20);
1012 gSystParamErr[iFinalPtBin]->Draw("AP");
1013 gSystParamErr[iFinalPtBin]->GetXaxis()->SetTitle("Error on Signal yield");
1014 gSystParamErr[iFinalPtBin]->GetYaxis()->SetTitle("v2");
1017 TCanvas* cs3=new TCanvas("cs3");
1019 for(Int_t iFinalPtBin=0; iFinalPtBin<nFinalPtBins; iFinalPtBin++){
1020 cs3->cd(iFinalPtBin+1);
1021 gSystLinConst[iFinalPtBin]->SetMarkerStyle(20);
1022 gSystLinConst[iFinalPtBin]->Draw("AP");
1023 gSystLinConst[iFinalPtBin]->GetXaxis()->SetLimits(-0.1,1.1);
1024 gSystLinConst[iFinalPtBin]->GetXaxis()->SetTitle("Const/Linear v2 of background");
1025 gSystLinConst[iFinalPtBin]->GetYaxis()->SetTitle("v2");