1 #if !defined(__CINT__) || defined(__MAKECINT__)
2 #include <TInterpreter.h>
4 #include <TObjString.h>
21 #include <TLegendEntry.h>
22 #include <TDatabasePDG.h>
79 TString fileNameb=
"AnalysisResults.root",
83 const char *CutsType=
"",
89 gStyle->SetOptTitle(1);
97 if(fileNameb!=
"") { listFiles->AddLast(
new TObjString(fileNameb.Data())); nFiles++; }
98 if(fileNamec!=
"") { listFiles->AddLast(
new TObjString(fileNamec.Data())); nFiles++; }
99 if(fileNamed!=
"") { listFiles->AddLast(
new TObjString(fileNamed.Data())); nFiles++; }
100 if(fileNamee!=
"") { listFiles->AddLast(
new TObjString(fileNamee.Data())); nFiles++; }
101 if(listFiles->GetEntries()==0){
102 printf(
"Missing file names in input\n");
110 for(
Int_t i=0; i<4; i++) hNtrZvtx[i]=0x0;
112 for(
Int_t i=0; i<4; i++) hNtrZvtxCorr[i]=0x0;
114 TH1F * hNormalization =
new TH1F(
"hNormalization",
"Events in the norm counter",nMultbins,
multlims);
119 massD=1.86484003067016602e+00;
123 massD=1.86961996555328369e+00;
127 printf(
"Wrong analysis type parameter\n");
131 printf(
"ERROR in reading input files\n");
141 printf(
" Preparing the mass fits");
155 hCntSig1[i]=
new TH1F(Form(
"hCntSig1_%d",i),Form(
"hCntSig1_%d",i),
nPtBins,
ptlims);
156 hCntSig2[i]=
new TH1F(Form(
"hCntSig2_%d",i),Form(
"hCntSig2_%d",i),
nPtBins,
ptlims);
157 hNDiffCntSig1[i]=
new TH1F(Form(
"hNDiffCntSig1_%d",i),Form(
"hNDiffCntSig1_%d",i),
nPtBins,
ptlims);
158 hNDiffCntSig2[i]=
new TH1F(Form(
"hNDiffCntSig2_%d",i),Form(
"hNDiffCntSig2_%d",i),
nPtBins,
ptlims);
159 hSignal[i]=
new TH1F(Form(
"hSignal_%d",i),Form(
"hSignal_%d",i),
nPtBins,
ptlims);
160 hRelErrSig[i]=
new TH1F(Form(
"hRelErrSig_%d",i),Form(
"hRelErrSig_%d",i),
nPtBins,
ptlims);
161 hInvSignif[i]=
new TH1F(Form(
"hInvSignif_%d",i),Form(
"hInvSignif_%d",i),
nPtBins,
ptlims);
162 hBackground[i]=
new TH1F(Form(
"hBackground_%d",i),Form(
"hBackground_%d",i),
nPtBins,
ptlims);
163 hBackgroundNormSigma[i]=
new TH1F(Form(
"hBackgroundNormSigma_%d",i),Form(
"hBackgroundNormSigma_%d",i),
nPtBins,
ptlims);
164 hSignificance[i]=
new TH1F(Form(
"hSignificance_%d",i),Form(
"hSignificance_%d",i),
nPtBins,
ptlims);
165 hMass[i]=
new TH1F(Form(
"hMass_%d",i),Form(
"hMass_%d",i),
nPtBins,
ptlims);
166 hSigma[i]=
new TH1F(Form(
"hSigma_%d",i),Form(
"hSigma_%d",i),
nPtBins,
ptlims);
168 printf(
", defined...\n");
171 TH1F* hptaxis = (TH1F*)hPtMassMult[0]->ProjectionZ(
"hptaxis");
172 TH1F* hmassaxis = (TH1F*)hPtMassMult[0]->ProjectionY(
"hmassaxis");
173 TH1F* hmultaxis = (TH1F*)hPtMassMult[0]->ProjectionX(
"hmultaxis");
174 Int_t nMassBins=hmassaxis->GetNbinsX();
175 Double_t hmin=hmassaxis->GetBinLowEdge(3);
176 Double_t hmax=hmassaxis->GetBinLowEdge(nMassBins-2) + hmassaxis->GetBinWidth(nMassBins-2);
179 printf(
"Now initializing the fit functions\n");
216 canvas[i] =
new TCanvas(Form(
"c%d",i),Form(
"summary canvas for mult bin %d",i));
217 canvas[i]->Divide(nx,ny);
219 TCanvas *myCanvas[nPtMultbins];
231 Float_t val = multbinlow + (multbinhigh-multbinlow)/2.;
232 Int_t hnbin = hNormalization->FindBin(val);
234 if(counter) { nevents = counter->
GetNEventsForNorm(multbinlow,multbinhigh); std::cout << std::endl<<std::endl<<
" Nevents ("<<multbinlow<<
","<<multbinhigh<<
") ="<<nevents<<std::endl<<std::endl<<std::endl;}
235 hNormalization->SetBinContent(hnbin,nevents);
241 canvas[j]->cd(iPad++);
244 Int_t ptbinhigh = hptaxis->FindBin(
ptlims[iBin+1])-1;
245 hmass[massBin] = (TH1F*)hPtMassMult[0]->ProjectionY(Form(
"hmass_%d_%d",j,iBin),multbinlow,multbinhigh,ptbinlow,ptbinhigh);
246 hmass[massBin]->SetTitle( Form(
"%2.0f<p_{T}<%2.0f GeV/c, %s [%3.0f,%3.0f]",
ptlims[iBin],
ptlims[iBin+1],ntrkname.Data(),
multlims[j],
multlims[j+1]) );
248 if( hmass[massBin]->GetEntries() < 60 ) {
252 Int_t origNbins=hmass[massBin]->GetNbinsX();
255 hmin=hRebinned->GetBinLowEdge(2);
256 hmax=hRebinned->GetBinLowEdge(hRebinned->GetNbinsX());
293 fitter[massBin]->
Signal(3,s,errs);
298 myCanvas[massBin] =
new TCanvas(Form(
"myCanvas_%d_%d",j,iBin),Form(
"Invariant mass mult bin %d, pt bin %d",j,iBin));
308 for(
Int_t iMB=minBinSum; iMB<=maxBinSum; iMB++){
309 Float_t bkg1=fB1 ? fB1->Eval(hmass[massBin]->GetBinCenter(iMB))/rebinItem : 0;
310 Float_t bkg2=fB2 ? fB2->Eval(hmass[massBin]->GetBinCenter(iMB))/rebinItem : 0;
311 cntSig1+=(hmass[massBin]->GetBinContent(iMB)-bkg1);
312 cntSig2+=(hmass[massBin]->GetBinContent(iMB)-bkg2);
313 cntErr+=(hmass[massBin]->GetBinContent(iMB));
315 hCntSig1[j]->SetBinContent(iBin+1,cntSig1);
316 hCntSig1[j]->SetBinError(iBin+1,TMath::Sqrt(cntErr));
317 hNDiffCntSig1[j]->SetBinContent(iBin+1,(s-cntSig1)/s);
318 hNDiffCntSig1[j]->SetBinError(iBin+1,TMath::Sqrt(cntErr)/s);
319 hCntSig2[j]->SetBinContent(iBin+1,cntSig2);
320 hNDiffCntSig2[j]->SetBinContent(iBin+1,(s-cntSig2)/s);
321 hNDiffCntSig2[j]->SetBinError(iBin+1,TMath::Sqrt(cntErr)/s);
322 hCntSig2[j]->SetBinError(iBin+1,TMath::Sqrt(cntErr));
323 hSignal[j]->SetBinContent(iBin+1,ry);
324 hSignal[j]->SetBinError(iBin+1,ery);
325 hRelErrSig[j]->SetBinContent(iBin+1,errs/s);
326 hInvSignif[j]->SetBinContent(iBin+1,1/sig);
327 hInvSignif[j]->SetBinError(iBin+1,errsig/(sig*sig));
328 hBackground[j]->SetBinContent(iBin+1,b);
329 hBackground[j]->SetBinError(iBin+1,errb);
330 hBackgroundNormSigma[j]->SetBinContent(iBin+1,b/(3*fitter[massBin]->GetSigma())*(3*0.012));
331 hBackgroundNormSigma[j]->SetBinError(iBin+1,errb);
332 hSignificance[j]->SetBinContent(iBin+1,sig);
333 hSignificance[j]->SetBinError(iBin+1,errsig);
334 hMass[j]->SetBinContent(iBin+1,mass);
335 hMass[j]->SetBinError(iBin+1,massUnc);
336 hSigma[j]->SetBinContent(iBin+1,sigma);
337 hSigma[j]->SetBinError(iBin+1,sigmaUnc);
344 canvas[j]->SaveAs(Form(
"hMass%s_%d_%d.eps",CutsType,
typeb,j));
350 TCanvas *cpar=
new TCanvas(
"cpar",
"Fit params",1200,600);
354 hMass[imult]->SetMarkerStyle(20);
355 hMass[imult]->GetXaxis()->SetTitle(
"Pt (GeV/c)");
356 hMass[imult]->GetYaxis()->SetTitle(
"Mass (GeV/c^{2})");
357 hMass[imult]->SetMarkerColor(2*imult);
358 if(imult==5) hMass[imult]->SetMarkerColor(2*imult-3);
360 hMass[imult]->SetMarkerColor(kBlack);
361 hMass[imult]->Draw(
"PE");
363 else hMass[imult]->Draw(
"PEsame");
367 hSigma[imult]->SetMarkerStyle(20);
369 hSigma[imult]->GetXaxis()->SetTitle(
"Pt (GeV/c)");
370 hSigma[imult]->GetYaxis()->SetTitle(
"Sigma (GeV/c^{2})");
371 hSigma[imult]->SetMarkerColor(2*imult);
372 if(imult==5) hSigma[imult]->SetMarkerColor(2*imult-3);
374 hSigma[imult]->SetMarkerColor(kBlack);
375 hSigma[imult]->Draw(
"PE");
377 else hSigma[imult]->Draw(
"PEsame");
462 grReducedChiSquare0->SetName(
"grReducedChiSquare0");
463 grReducedChiSquare0->SetTitle(
"Reduced Chi2;p_{t} (GeV/c);#tilde{#chi}^{2}");
465 grReducedChiSquare1->SetName(
"grReducedChiSquare1");
466 grReducedChiSquare1->SetTitle(
"Reduced Chi2;p_{t} (GeV/c);#tilde{#chi}^{2}");
468 grReducedChiSquare2->SetName(
"grReducedChiSquare2");
469 grReducedChiSquare2->SetTitle(
"Reduced Chi2;p_{t} (GeV/c);#tilde{#chi}^{2}");
471 grReducedChiSquare3->SetName(
"grReducedChiSquare3");
472 grReducedChiSquare3->SetTitle(
"Reduced Chi2;p_{t} (GeV/c);#tilde{#chi}^{2}");
473 TCanvas *cChi2=
new TCanvas(
"cChi2",
"reduced chi square",600,600);
475 grReducedChiSquare0->SetMarkerStyle(21);
476 grReducedChiSquare0->Draw(
"AP");
477 grReducedChiSquare1->SetMarkerStyle(22);
478 grReducedChiSquare1->Draw(
"Psame");
479 grReducedChiSquare2->SetMarkerStyle(23);
480 grReducedChiSquare2->Draw(
"Psame");
481 grReducedChiSquare3->SetMarkerStyle(24);
482 grReducedChiSquare3->Draw(
"Psame");
484 TCanvas* cbkgNormSigma=
new TCanvas(
"cbkgNormSigma",
"Background normalized to sigma",400,600);
487 hBackgroundNormSigma[i]->SetMarkerStyle(20);
488 hBackgroundNormSigma[i]->GetXaxis()->SetTitle(
"Pt (GeV/c)");
489 hBackgroundNormSigma[i]->GetYaxis()->SetTitle(
"Background #times 3 #times 0.012/ (3 #times #sigma)");
490 hBackgroundNormSigma[i]->SetMarkerColor(2*i);
491 if(i==5) hBackgroundNormSigma[i]->SetMarkerColor(2*i-3);
493 hBackgroundNormSigma[i]->SetMarkerColor(kBlack);
494 hBackgroundNormSigma[i]->Draw(
"PE");
496 else hBackgroundNormSigma[i]->Draw(
"Psame");
502 if(analysisType==
kD0toKpi) partname=
"D0";
506 if(analysisType==
kD0toKpi) partname=
"D0bar";
510 TString outfilename = Form(
"RawYield_Mult_%s_%s",partname.Data(),CutsType);
514 if(
typeb==0) outfilename +=
"_Expo.root";
515 else if(
typeb==1) outfilename +=
"_Linear.root";
516 else if(
typeb==2) outfilename +=
"_Pol2.root";
518 TFile* outf=
new TFile(outfilename,
"recreate");
520 hNormalization->Write();
521 for(
Int_t j=0; j<massBin; j++) hmass[j]->Write();
525 hCntSig1[j]->Write();
526 hCntSig2[j]->Write();
527 hNDiffCntSig1[j]->Write();
528 hNDiffCntSig2[j]->Write();
530 hRelErrSig[j]->Write();
531 hInvSignif[j]->Write();
532 hBackground[j]->Write();
533 hBackgroundNormSigma[j]->Write();
534 hSignificance[j]->Write();
536 grReducedChiSquare0->Write();
537 grReducedChiSquare1->Write();
538 grReducedChiSquare2->Write();
539 grReducedChiSquare3->Write();
548 Int_t nFiles=listFiles->GetEntries();
554 for(
Int_t iFile=0; iFile<nFiles; iFile++){
555 TString fName=((TObjString*)listFiles->At(iFile))->GetString();
556 TFile *f=TFile::Open(fName.Data());
558 printf(
"ERROR: file %s does not exist\n",fName.Data());
561 printf(
"Open File %s\n",f->GetName());
563 TString dirname=
"PWG3_D2H_DMult_D0";
567 TDirectory *
dir = (TDirectory*)f->Get(dirname);
569 printf(
"ERROR: directory %s not found in %s\n",dirname.Data(),fName.Data());
573 TString listmassname=
"coutputD0";
576 listmassname += CutsType;
577 printf(
"List mass name %s\n",listmassname.Data());
578 hlist[nReadFiles]=(
TList*)dir->Get(listmassname);
580 TString listnorm=
"coutputNormD0";
583 listnorm += CutsType;
584 printf(
"List norm name %s\n",listnorm.Data());
585 hlistNorm[nReadFiles]=(
TList*)dir->Get(listnorm);
591 TString cutsobjname=
"coutputCutsD0";
594 cutsobjname += CutsType;
595 printf(
"Cuts name %s\n",cutsobjname.Data());
597 if(!dcuts[nReadFiles]) {
598 printf(
"ERROR: Cut objects do not match\n");
612 if(nReadFiles<nFiles){
613 printf(
"WARNING: not all requested files have been found\n");
615 printf(
"ERROR: Any file/dir found\n");
628 printf(
"Get the 3D histogram \n");
629 const char *histoname=
"";
633 if(Option==
kUnCorr) histoname=
"hPtVsMassvsMultUncorr";
634 if(Option==
kNoPid) histoname=
"hPtVsMassvsMultNoPid";
637 for(
Int_t iFile=0; iFile<nReadFiles; iFile++){
638 printf(
" Looking for histo histMass %s for file %d\n",histoname,iFile);
642 hPtMassMult[0]=
new TH3F(*htemp);
644 hPtMassMult[0]->Add(htemp);
647 hNtrZvtxCorr[iFile] = (
TH2F*)hlist[iFile]->
FindObject(
"hNtrCorrVsZvtx");
656 TString outfilename = Form(
"RawYield%s_%s",partname.Data(),CutsType);
658 if(
typeb==0) outfilename +=
"_Expo.root";
659 else if(
typeb==1) outfilename +=
"_Linear.root";
660 else if(
typeb==2) outfilename +=
"_Pol2.root";
661 TFile* outf=
new TFile(outfilename,
"recreate");
672 Int_t nFiles=listFiles->GetEntries();
678 for(
Int_t iFile=0; iFile<nFiles; iFile++){
679 TString fName=((TObjString*)listFiles->At(iFile))->GetString();
680 TFile *f=TFile::Open(fName.Data());
682 printf(
"ERROR: file %s does not exist\n",fName.Data());
685 printf(
"Open File %s\n",f->GetName());
686 TDirectory *
dir = (TDirectory*)f->Get(Form(
"PWG3_D2H_DMult_Dplus%s",suffix.Data()));
689 printf(
"ERROR: directory PWG3_D2H_DMult not found in %s\n",fName.Data());
692 hlist[nReadFiles]=(
TList*)dir->Get(Form(
"coutputDplus%s",suffix.Data()));
693 TList *listcut = (
TList*)dir->Get(Form(
"coutputCutsDplus%s",suffix.Data()));
694 TList *listNorm = (
TList*)dir->Get(Form(
"coutputNormDplus%s",suffix.Data()));
700 printf(
"ERROR: Cut objects do not match\n");
709 if(nReadFiles<nFiles){
710 printf(
"WARNING: not all requested files have been found\n");
712 printf(
"ERROR: Any file/dir found\n");
718 printf(
"Get the 3D histogram \n");
719 const char *histoname=
"";
723 if(Option==
kUnCorr) histoname=
"hPtVsMassvsMultUncorr";
724 if(Option==
kNoPid) histoname=
"hPtVsMassvsMultNoPid";
727 for(
Int_t iFile=0; iFile<nReadFiles; iFile++){
728 printf(
" Looking for histo histMass %s for file %d\n",histoname,iFile);
732 hPtMassMult[0]=
new TH3F(*htemp);
734 hPtMassMult[0]->Add(htemp);
746 TString outfilename = Form(
"RawYield%s_%s",partname.Data(),CutsType);
748 if(
typeb==0) outfilename +=
"_Expo.root";
749 else if(
typeb==1) outfilename +=
"_Linear.root";
750 else if(
typeb==2) outfilename +=
"_Pol2.root";
751 TFile* outf=
new TFile(outfilename,
"recreate");
764 Int_t nBinOrig=hOrig->GetNbinsX();
765 Int_t firstBinOrig=1;
766 Int_t lastBinOrig=nBinOrig;
767 Int_t nBinOrigUsed=nBinOrig;
768 Int_t nBinFinal=nBinOrig/reb;
770 firstBinOrig=firstUse;
771 nBinFinal=(nBinOrig-firstUse+1)/reb;
772 nBinOrigUsed=nBinFinal*reb;
773 lastBinOrig=firstBinOrig+nBinOrigUsed-1;
775 Int_t exc=nBinOrigUsed%reb;
779 lastBinOrig=firstBinOrig+nBinOrigUsed-1;
783 printf(
"Rebin from %d bins to %d bins -- Used bins=%d in range %d-%d\n",nBinOrig,nBinFinal,nBinOrigUsed,firstBinOrig,lastBinOrig);
784 Float_t lowLim=hOrig->GetXaxis()->GetBinLowEdge(firstBinOrig);
785 Float_t hiLim=hOrig->GetXaxis()->GetBinUpEdge(lastBinOrig);
786 TH1F* hRebin=
new TH1F(Form(
"%s-rebin",hOrig->GetName()),hOrig->GetTitle(),nBinFinal,lowLim,hiLim);
787 Int_t lastSummed=firstBinOrig-1;
788 for(
Int_t iBin=1;iBin<=nBinFinal; iBin++){
790 for(
Int_t iOrigBin=0;iOrigBin<reb;iOrigBin++){
791 sum+=hOrig->GetBinContent(lastSummed+1);
794 hRebin->SetBinContent(iBin,sum);
803 TCanvas *cNtrVsZvtx =
new TCanvas(
"cNtrVsZvtx",
"Ntr Vs Zvtx");
804 cNtrVsZvtx->Divide(2,2);
805 TProfile **hProf =
new TProfile*[nFiles];
806 TProfile **hProfCorr =
new TProfile*[nFiles];
807 for(
Int_t i=0; i<nFiles; i++){
809 cNtrVsZvtx->SetLogz();
811 hNtrackVsVtxZ[i]->Draw(
"colz");
812 hProf[i] = (TProfile*)hNtrackVsVtxZ[i]->ProfileX(Form(
"%s_%d",
"hProf",i));
813 hProf[i]->SetLineColor(kBlack);
814 hProf[i]->Draw(
"same");
815 cNtrVsZvtx->Update();
818 TCanvas *cNtrVsZvtxCorr =
new TCanvas(
"cNtrVsZvtxCorr",
"Ntr Vs Zvtx Corr");
819 cNtrVsZvtxCorr->Divide(2,2);
820 for(
Int_t i=0; i<nFiles; i++){
821 cNtrVsZvtxCorr->cd(i+1);
822 cNtrVsZvtxCorr->SetLogz();
824 hNtrackVsVtxZCorr[i]->Draw(
"colz");
825 hProfCorr[i] = (TProfile*)hNtrackVsVtxZCorr[i]->ProfileX(Form(
"%s_%d",
"hProfCorr",i));
826 hProfCorr[i]->SetLineColor(kBlack);
827 hProfCorr[i]->Draw(
"same");
828 cNtrVsZvtx->Update();
831 TH1F *hNtrAxis = (TH1F*)hNtrackVsVtxZ[0]->ProjectionY(
"hNtrAxis");
835 TCanvas *cZvtx =
new TCanvas(
"cZvtx",
"Zvtx projections");
837 for(
Int_t i=0; i<nFiles; i++){
839 hZvtx[i] = (TH1F*)hNtrackVsVtxZ[i]->ProjectionX(Form(
"hZvtx_%d",i),firstbin,lastbin);
842 TH1F *hZvtxCorr[nFiles];
843 TCanvas *cZvtxCorr =
new TCanvas(
"cZvtxCorr",
"Zvtx projections Corr");
844 cZvtxCorr->Divide(2,2);
845 for(
Int_t i=0; i<nFiles; i++){
847 hZvtxCorr[i] = (TH1F*)hNtrackVsVtxZCorr[i]->ProjectionX(Form(
"hZvtxCorr_%d",i),firstbin,lastbin);
848 hZvtxCorr[i]->Draw();
TH1F * GetHistoClone() const
void DrawHere(TVirtualPad *pd, Double_t nsigma=3, Int_t writeFitInfo=1) const
write the canvas in a root file
TH1F * RebinHisto(TH1F *hOrig, Int_t reb, Int_t firstUse=-1)
Bool_t CheckNtrVsZvtx(TH2F **hNtrZvtx, TH2F **hNtrZvtxCorr, Int_t nFiles)
void SetInitialGaussianMean(Double_t mean)
virtual void SetFixGaussianMean(Double_t mean=1.865, Bool_t fixpar=kTRUE)
Float_t massRangeForCounting
Bool_t LoadD0toKpiHistos(TObjArray *listFiles, TH3F **hPtMassMult, TH2F **hNtrZvtx, TH2F **hNtrZvtxCorr, AliNormalizationCounter *counter, const char *CutsType, Int_t Option)
TF1 * GetBackgroundFullRangeFunc()
TF1 * GetBackgroundRecalcFunc()
void ReadDvsMultiplicity(Int_t analysisType=kD0toKpi, TString fileNameb="AnalysisResults.root", TString fileNamec="", TString fileNamed="", TString fileNamee="", const char *CutsType="", Int_t Option=kCorr)
Int_t firstUsedBin[nPtBins]
Double_t GetRawYieldError() const
Bool_t LoadDplusHistos(TObjArray *listFiles, TH3F **hPtMassMult, TH2F **hNtrZvtx, TH2F **hNtrZvtxCorr, const char *CutsType, Int_t Option)
virtual void Signal(Double_t nOfSigma, Double_t &signal, Double_t &errsignal) const
return total integral of the histogram
Class for cuts on AOD reconstructed D+->Kpipi.
void SetRangeFit(Double_t minvalue, Double_t maxvalue)
Float_t nSigmaRangeForCounting
Double_t GetMeanUncertainty() const
Double_t GetReducedChiSquare() const
void SetReflectionSigmaFactor(Int_t constant)
Double_t GetNEventsForNorm()
virtual void Background(Double_t nOfSigma, Double_t &background, Double_t &errbackground) const
signal in (min, max) with error
Double_t GetRawYield() const
void SetInitialGaussianSigma(Double_t sigma)
change the default value of the mean
TObject * FindObject(int bin, const char *nameH, const TList *lst, Bool_t normPerEvent=kTRUE)
virtual void SetFixGaussianSigma(Double_t sigma=0.012, Bool_t fixpar=kTRUE)
Bool_t CompareCuts(const AliRDHFCuts *obj) const
virtual Bool_t MassFitter(Bool_t draw=kTRUE)
Double_t multlims[nMultbins+1]
Double_t sigmapt[nPtBins]
Double_t GetSigma() const
void Significance(Double_t nOfSigma, Double_t &significance, Double_t &errsignificance) const
backgournd in (min, max) with error
AliHFMassFitter for the fit of invariant mass distribution of charmed mesons.
Double_t ptlims[nPtBins+1]
Double_t GetSigmaUncertainty() const