1 #if !defined(__CINT__) || defined(__MAKECINT__) 2 #include <TInterpreter.h> 4 #include <TObjString.h> 15 #include <TLegendEntry.h> 16 #include <TDatabasePDG.h> 94 gInterpreter->ExecuteMacro(
"$ALICE_ROOT/PWGHF/vertexingHF/macros/LoadLibraries.C");
95 gStyle->SetOptTitle(0);
98 if(fileNameb!=
"") listFiles->AddLast(
new TObjString(fileNameb.Data()));
99 if(fileNamec!=
"") listFiles->AddLast(
new TObjString(fileNamec.Data()));
100 if(fileNamed!=
"") listFiles->AddLast(
new TObjString(fileNamed.Data()));
101 if(fileNamee!=
"") listFiles->AddLast(
new TObjString(fileNamee.Data()));
102 if(listFiles->GetEntries()==0){
103 printf(
"Missing file names in input\n");
107 TH1F** hmass=
new TH1F*[
nPtBins];
114 massD=TDatabasePDG::Instance()->GetParticle(421)->Mass();
118 massD=TDatabasePDG::Instance()->GetParticle(411)->Mass();
122 massD=TDatabasePDG::Instance()->GetParticle(413)->Mass();
123 massD0_fDstar=TDatabasePDG::Instance()->GetParticle(421)->Mass();
124 massD =massD-massD0_fDstar;
126 else if(analysisType==
kDsKKpi){
128 massD=TDatabasePDG::Instance()->GetParticle(431)->Mass();
131 printf(
"Wrong analysis type parameter\n");
135 printf(
"ERROR in reading input files\n");
143 TH1D* hNDiffCntSig1=
new TH1D(
"hNDiffCntSig1",
"hNDiffCntSig1",nPtBins,
ptlims);
144 TH1D* hNDiffCntSig2=
new TH1D(
"hNDiffCntSig2",
"hNDiffCntSig2",nPtBins,
ptlims);
146 TH1D* hRelErrSig=
new TH1D(
"hRelErrSig",
"hRelErrSig",nPtBins,
ptlims);
147 TH1D* hInvSignif=
new TH1D(
"hInvSignif",
"hInvSignif",nPtBins,
ptlims);
148 TH1D* hBackground=
new TH1D(
"hBackground",
"hBackground",nPtBins,
ptlims);
149 TH1D* hBackgroundNormSigma=
new TH1D(
"hBackgroundNormSigma",
"hBackgroundNormSigma",nPtBins,
ptlims);
150 TH1D* hSignificance=
new TH1D(
"hSignificance",
"hSignificance",nPtBins,
ptlims);
155 Int_t nMassBins=hmass[0]->GetNbinsX();
157 Double_t hmax=TMath::Min(
maxMassForFit,hmass[0]->GetBinLowEdge(nMassBins-2)+hmass[0]->GetBinWidth(nMassBins-2));
162 TF1* funBckStore1=0x0;
163 TF1* funBckStore2=0x0;
164 TF1* funBckStore3=0x0;
168 TCanvas* c1=
new TCanvas(
"c1",
"MassSpectra",1000,800);
182 hmass[iBin]->SetName(Form(
"hInvMass_PtBin%d",iBin));
183 hmass[iBin]->SetTitle(Form(
"%.1f<pt<%.1f",
ptlims[iBin],
ptlims[iBin+1]));
185 Int_t origNbins=hmass[iBin]->GetNbinsX();
187 hRebinned->GetXaxis()->SetTitle(
"Invariant Mass (GeV/c^{2})");
188 hRebinned->GetYaxis()->SetTitle(Form(
"Entries/(%.0f MeV/c^{2})",(hRebinned->GetBinWidth(1)*1000)));
189 hRebinned->GetYaxis()->SetTitleOffset(1.1);
191 hmax=TMath::Min(
maxMassForFit,hRebinned->GetBinLowEdge(hRebinned->GetNbinsX()));
208 if(iBin==0 && fB1) funBckStore1=
new TF1(*fB1);
209 if(iBin==0 && fB2) funBckStore2=
new TF1(*fB2);
210 if(iBin==0 && fM) funBckStore3=
new TF1(*fM);
213 fitter[iBin]->
Signal(3,s,errs);
221 for(
Int_t iMB=minBinSum; iMB<=maxBinSum; iMB++){
222 Float_t bkg1=fB1 ? fB1->Eval(hmass[iBin]->GetBinCenter(iMB))/
rebin[iBin] : 0;
223 Float_t bkg2=fB2 ? fB2->Eval(hmass[iBin]->GetBinCenter(iMB))/
rebin[iBin] : 0;
224 cntSig1+=(hmass[iBin]->GetBinContent(iMB)-bkg1);
225 cntSig2+=(hmass[iBin]->GetBinContent(iMB)-bkg2);
226 cntErr+=(hmass[iBin]->GetBinContent(iMB));
228 hCntSig1->SetBinContent(iBin+1,cntSig1);
229 hCntSig1->SetBinError(iBin+1,TMath::Sqrt(cntErr));
230 hNDiffCntSig1->SetBinContent(iBin+1,(s-cntSig1)/s);
231 hNDiffCntSig1->SetBinError(iBin+1,TMath::Sqrt(cntErr)/s);
232 hCntSig2->SetBinContent(iBin+1,cntSig2);
233 hNDiffCntSig2->SetBinContent(iBin+1,(s-cntSig2)/s);
234 hNDiffCntSig2->SetBinError(iBin+1,TMath::Sqrt(cntErr)/s);
235 hCntSig2->SetBinError(iBin+1,TMath::Sqrt(cntErr));
236 hSignal->SetBinContent(iBin+1,ry);
237 hSignal->SetBinError(iBin+1,ery);
238 hRelErrSig->SetBinContent(iBin+1,errs/s);
239 hInvSignif->SetBinContent(iBin+1,1/sig);
240 hInvSignif->SetBinError(iBin+1,errsig/(sig*sig));
241 hBackground->SetBinContent(iBin+1,b);
242 hBackground->SetBinError(iBin+1,errb);
243 hBackgroundNormSigma->SetBinContent(iBin+1,b/(3*fitter[iBin]->GetSigma())*(3*0.012));
244 hBackgroundNormSigma->SetBinError(iBin+1,errb);
245 hSignificance->SetBinContent(iBin+1,sig);
246 hSignificance->SetBinError(iBin+1,errsig);
247 hMass->SetBinContent(iBin+1,mass);
248 hMass->SetBinError(iBin+1,0.0001);
249 hSigma->SetBinContent(iBin+1,sigma);
250 hSigma->SetBinError(iBin+1,fitter[iBin]->GetSigmaUncertainty());
261 TCanvas *cpar=
new TCanvas(
"cpar",
"Fit params",1200,600);
264 hMass->SetMarkerStyle(20);
266 hMass->GetXaxis()->SetTitle(
"Pt (GeV/c)");
267 hMass->GetXaxis()->SetTitle(
"Mass (GeV/c^{2})");
269 hSigma->SetMarkerStyle(20);
271 hSigma->GetXaxis()->SetTitle(
"Pt (GeV/c)");
272 hSigma->GetXaxis()->SetTitle(
"Sigma (GeV/c^{2})");
274 TCanvas* csig=
new TCanvas(
"csig",
"Results",1200,600);
277 hSignal->SetMarkerStyle(20);
278 hSignal->SetMarkerColor(4);
279 hSignal->SetLineColor(4);
280 hSignal->GetXaxis()->SetTitle(
"Pt (GeV/c)");
281 hSignal->GetYaxis()->SetTitle(
"Signal");
283 hCntSig1->SetMarkerStyle(26);
284 hCntSig1->SetMarkerColor(2);
285 hCntSig1->SetLineColor(2);
286 hCntSig1->Draw(
"PSAME");
287 hCntSig2->SetMarkerStyle(29);
288 hCntSig2->SetMarkerColor(kGray+1);
289 hCntSig2->SetLineColor(kGray+1);
290 hCntSig2->Draw(
"PSAME");
291 TLegend* leg=
new TLegend(0.4,0.7,0.89,0.89);
292 leg->SetFillColor(0);
293 TLegendEntry* ent=leg->AddEntry(hSignal,
"From Fit",
"PL");
294 ent->SetTextColor(hSignal->GetMarkerColor());
295 ent=leg->AddEntry(hCntSig1,
"From Counting1",
"PL");
296 ent->SetTextColor(hCntSig1->GetMarkerColor());
297 ent=leg->AddEntry(hCntSig2,
"From Counting2",
"PL");
298 ent->SetTextColor(hCntSig2->GetMarkerColor());
301 hBackground->SetMarkerStyle(20);
302 hBackground->Draw(
"P");
303 hBackground->GetXaxis()->SetTitle(
"Pt (GeV/c)");
304 hBackground->GetYaxis()->SetTitle(
"Background");
306 hSignificance->SetMarkerStyle(20);
307 hSignificance->Draw(
"P");
308 hSignificance->GetXaxis()->SetTitle(
"Pt (GeV/c)");
309 hSignificance->GetYaxis()->SetTitle(
"Significance");
311 TCanvas* cDiffS=
new TCanvas(
"cDiffS",
"Difference",1200,600);
314 hRelErrSig->SetMarkerStyle(20);
315 hRelErrSig->SetTitleOffset(1.2);
316 hRelErrSig->SetTitle(
"Rel Error from Fit;p_{t} (GeV/c);Signal Relative Error");
317 hRelErrSig->Draw(
"P");
318 hInvSignif->SetMarkerStyle(21);
319 hInvSignif->SetMarkerColor(kMagenta+1);
320 hInvSignif->SetLineColor(kMagenta+1);
321 hInvSignif->Draw(
"PSAMES");
322 TLegend* leg2=
new TLegend(0.4,0.7,0.89,0.89);
323 leg2->SetFillColor(0);
324 TLegendEntry* ent2=leg2->AddEntry(hRelErrSig,
"From Fit",
"P");
325 ent2->SetTextColor(hRelErrSig->GetMarkerColor());
326 ent2=leg2->AddEntry(hInvSignif,
"1/Significance",
"PL");
327 ent2->SetTextColor(hInvSignif->GetMarkerColor());
331 hNDiffCntSig1->SetMarkerStyle(26);
332 hNDiffCntSig1->SetMarkerColor(2);
333 hNDiffCntSig1->SetLineColor(2);
334 hNDiffCntSig1->SetTitle(
"Cmp Fit-Count;p_{t} (GeV/c);(S_{fit}-S_{count})/S_{fit}");
335 hNDiffCntSig1->Draw(
"P");
336 hNDiffCntSig2->SetMarkerStyle(29);
337 hNDiffCntSig2->SetMarkerColor(kGray+1);
338 hNDiffCntSig2->SetLineColor(kGray+1);
339 hNDiffCntSig2->Draw(
"PSAME");
340 TLegend* leg1=
new TLegend(0.4,0.7,0.89,0.89);
341 leg1->SetFillColor(0);
342 TLegendEntry* ent1=leg1->AddEntry(hNDiffCntSig1,
"From Counting1",
"PL");
343 ent1->SetTextColor(hNDiffCntSig1->GetMarkerColor());
344 ent1=leg1->AddEntry(hNDiffCntSig2,
"From Counting2",
"PL");
345 ent1->SetTextColor(hNDiffCntSig2->GetMarkerColor());
349 grReducedChiSquare->SetName(
"grReducedChiSquare");
350 grReducedChiSquare->SetTitle(
"Reduced Chi2;p_{t} (GeV/c);#tilde{#chi}^{2}");
351 TCanvas *cChi2=
new TCanvas(
"cChi2",
"reduced chi square",600,600);
353 grReducedChiSquare->SetMarkerStyle(21);
354 grReducedChiSquare->Draw(
"AP");
356 TCanvas* cbkgNormSigma=
new TCanvas(
"cbkgNormSigma",
"Background normalized to sigma",400,600);
358 hBackgroundNormSigma->SetMarkerStyle(20);
359 hBackgroundNormSigma->Draw(
"P");
360 hBackgroundNormSigma->GetXaxis()->SetTitle(
"Pt (GeV/c)");
361 hBackgroundNormSigma->GetYaxis()->SetTitle(
"Background #times 3 #times 0.012/ (3 #times #sigma)");
362 hBackgroundNormSigma->Draw();
367 if(analysisType==
kD0toKpi) partname=
"D0";
369 if(analysisType==
kDsKKpi) partname=
"Dsplus";
372 if(analysisType==
kD0toKpi) partname=
"D0bar";
374 if(analysisType==
kDsKKpi) partname=
"Dsminus";
378 TH1F* hNEvents=
new TH1F(
"hNEvents",
"",1,0.,1.);
381 TFile* outf=
new TFile(Form(
"RawYield%s.root",partname.Data()),
"update");
388 hNDiffCntSig1->Write();
389 hNDiffCntSig2->Write();
393 hBackground->Write();
394 hBackgroundNormSigma->Write();
395 hSignificance->Write();
396 grReducedChiSquare->Write();
404 Int_t nFiles=listFiles->GetEntries();
409 for(
Int_t iFile=0; iFile<nFiles; iFile++){
410 TString fName=((TObjString*)listFiles->At(iFile))->GetString();
411 TFile *f=TFile::Open(fName.Data());
413 printf(
"ERROR: file %s does not exist\n",fName.Data());
416 printf(
"Open File %s\n",f->GetName());
417 TDirectory *
dir = (TDirectory*)f->Get(
"PWG3_D2H_InvMassDplus");
419 printf(
"ERROR: directory PWG3_D2H_InvMassDplus not found in %s\n",fName.Data());
422 hlist[nReadFiles]=(
TList*)dir->Get(Form(
"coutputDplus%s",suffix.Data()));
423 TList *listcut = (
TList*)dir->Get(Form(
"coutputDplusCuts%s",suffix.Data()));
428 printf(
"ERROR: Cut objects do not match\n");
437 if(nReadFiles<nFiles){
438 printf(
"WARNING: not all requested files have been found\n");
442 printf(
"Number of pt bins for cut object = %d\n",
nPtBins);
444 ptlimsCuts[nPtBinsCuts]=ptlimsCuts[nPtBinsCuts-1]+4.;
447 for(
Int_t i=0;i<nPtBinsCuts;i++){
448 if(ptlimsCuts[i]>=
ptlims[iFinBin+1]) iFinBin+=1;
450 if(ptlimsCuts[i]>=
ptlims[iFinBin] &&
451 ptlimsCuts[i+1]<=
ptlims[iFinBin+1]){
452 for(
Int_t iFile=0; iFile<nReadFiles; iFile++){
457 TH1F* htemp=(TH1F*)hlist[iFile]->
FindObject(histoName.Data());
459 printf(
"ERROR: Histogram %s not found\n",histoName.Data());
463 hMass[iFinBin]=
new TH1F(*htemp);
465 hMass[iFinBin]->Add(htemp);
474 for(
Int_t iFile=0; iFile<nReadFiles; iFile++){
477 hPtMass=
new TH2F(*htemp2);
479 hPtMass->Add(htemp2);
483 TFile* outf=
new TFile(Form(
"RawYield%s.root",partname.Data()),
"recreate");
495 Int_t nFiles=listFiles->GetEntries();
500 for(
Int_t iFile=0; iFile<nFiles; iFile++){
501 TString fName=((TObjString*)listFiles->At(iFile))->GetString();
502 TFile *f=TFile::Open(fName.Data());
504 printf(
"ERROR: file %s does not exist\n",fName.Data());
507 printf(
"Open File %s\n",f->GetName());
508 TDirectory *
dir = (TDirectory*)f->Get(
"PWG3_D2H_InvMassDs");
510 printf(
"ERROR: directory PWG3_D2H_InvMassDs not found in %s\n",fName.Data());
513 hlist[nReadFiles]=(
TList*)dir->Get(
"coutputDs");
514 TList *listcut = (
TList*)dir->Get(
"coutputDsCuts");
516 cout<< dcuts[nReadFiles]<<endl;
520 printf(
"ERROR: Cut objects do not match\n");
526 if(nReadFiles<nFiles){
527 printf(
"WARNING: not all requested files have been found\n");
531 printf(
"Number of pt bins for cut object = %d\n",
nPtBins);
533 ptlimsCuts[nPtBinsCuts]=ptlimsCuts[nPtBinsCuts-1]+4.;
536 for(
Int_t i=0;i<nPtBinsCuts;i++){
537 if(ptlimsCuts[i]>=
ptlims[iFinBin+1]) iFinBin+=1;
539 if(ptlimsCuts[i]>=
ptlims[iFinBin] &&
540 ptlimsCuts[i+1]<=
ptlims[iFinBin+1]){
541 for(
Int_t iFile=0; iFile<nReadFiles; iFile++){
545 printf(
"Particle/Antiparticle not yet enabled for Ds");
546 histoName.Form(
"hMassAllPt%dphi",i);
549 printf(
"Particle/Antiparticle not yet enabled for Ds");
550 histoName.Form(
"hMassAllPt%dphi",i);
552 TH1F* htemp=(TH1F*)hlist[iFile]->
FindObject(histoName.Data());
554 printf(
"ERROR: Histogram %s not found\n",histoName.Data());
558 hMass[iFinBin]=
new TH1F(*htemp);
560 hMass[iFinBin]->Add(htemp);
569 for(
Int_t iFile=0; iFile<nReadFiles; iFile++){
572 hPtMass=
new TH2F(*htemp2);
574 hPtMass->Add(htemp2);
578 TFile* outf=
new TFile(Form(
"RawYield%s.root",partname.Data()),
"recreate");
590 Int_t nFiles=listFiles->GetEntries();
595 for(
Int_t iFile=0; iFile<nFiles; iFile++){
596 TString fName=((TObjString*)listFiles->At(iFile))->GetString();
597 TFile *f=TFile::Open(fName.Data());
599 printf(
"ERROR: file %s does not exist\n",fName.Data());
602 printf(
"Open File %s\n",f->GetName());
604 TString dirname=
"PWG3_D2H_D0InvMass";
608 TDirectory *
dir = (TDirectory*)f->Get(dirname);
610 printf(
"ERROR: directory %s not found in %s\n",dirname.Data(),fName.Data());
613 TString listmassname=
"coutputmassD0Mass";
618 hlist[nReadFiles]=(
TList*)dir->Get(listmassname);
629 printf(
"ERROR: Cut objects do not match\n");
635 if(nReadFiles<nFiles){
636 printf(
"WARNING: not all requested files have been found\n");
638 printf(
"ERROR: Any file/dir found\n");
644 printf(
"Number of pt bins for cut object = %d\n",
nPtBins);
646 ptlimsCuts[nPtBinsCuts]=ptlimsCuts[nPtBinsCuts-1]+4.;
649 for(
Int_t i=0;i<nPtBinsCuts;i++){
650 if(ptlimsCuts[i]>=
ptlims[iFinBin+1]) iFinBin+=1;
652 if(ptlimsCuts[i]>=
ptlims[iFinBin] &&
653 ptlimsCuts[i+1]<=
ptlims[iFinBin+1]){
654 for(
Int_t iFile=0; iFile<nReadFiles; iFile++){
655 TH1F* htemp=(TH1F*)hlist[iFile]->
FindObject(Form(
"histMass_%d",i));
657 hMass[iFinBin]=
new TH1F(*htemp);
659 hMass[iFinBin]->Add(htemp);
668 TFile* outf=
new TFile(Form(
"RawYield%s.root",partname.Data()),
"recreate");
677 Int_t nFiles=listFiles->GetEntries();
681 for(
Int_t iFile=0; iFile<nFiles; iFile++){
682 TString fName=((TObjString*)listFiles->At(iFile))->GetString();
683 TFile *f=TFile::Open(fName.Data());
685 printf(
"ERROR: file %s does not exist\n",fName.Data());
688 printf(
"Open File %s\n",f->GetName());
689 TString dirname=
"PWG3_D2H_DStarSpectra";
690 TDirectory *
dir = (TDirectory*)f->Get(dirname);
692 printf(
"ERROR: directory %s not found in %s\n",dirname.Data(),fName.Data());
695 TString listmassname=
"DStarPID00";
697 hlist[nReadFiles]=(
TList*)dir->Get(listmassname);
698 TString cutsobjname=
"DStartoKpipiCuts";
703 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");
717 printf(
"Number of pt bins for cut object = %d\n",
nPtBins);
719 ptlimsCuts[nPtBinsCuts]=ptlimsCuts[nPtBinsCuts-1]+4.;
725 for(
Int_t i=0;i<nPtBinsCuts;i++){
726 if(ptlimsCuts[i]>=
ptlims[iFinBin+1]) iFinBin+=1;
728 if(ptlimsCuts[i]>=
ptlims[iFinBin] &&
729 ptlimsCuts[i+1]<=
ptlims[iFinBin+1]){
730 for(
Int_t iFile=0; iFile<nReadFiles; iFile++){
731 TH1F* htemp=(TH1F*)hlist[iFile]->
FindObject(Form(
"histDeltaMass_%d",i));
733 hMass[iFinBin]=
new TH1F(*htemp);
735 hMass[iFinBin]->Add(htemp);
744 TFile* outf=
new TFile(Form(
"RawYield%s.root",partname.Data()),
"recreate");
760 gStyle->SetOptStat(0);
761 gStyle->SetOptTitle(0);
762 gStyle->SetCanvasColor(0);
763 gStyle->SetFrameFillColor(0);
764 gStyle->SetTitleFillColor(0);
765 gStyle->SetFrameBorderMode(0);
767 if(!filenameYield) filenameYield=
new TString[ncmp];
769 for(
Int_t k=0;k<ncmp;k++){
770 if(!filenameYield) filenameYield[k]=
"RawYield.root";
771 filenameYield[k].Prepend(paths[k]);
774 TCanvas* cSig=
new TCanvas(
"cSig",
"Results",1200,600);
776 TCanvas* cBkgN=
new TCanvas(
"cBkgN",
"Background normalized to sigma",400,600);
777 TCanvas* cDiffS=
new TCanvas(
"cDiffS",
"Difference",1200,600);
779 TCanvas *cChi2=
new TCanvas(
"cChi2",
"reduced chi square",600,600);
781 TLegend* leg1=
new TLegend(0.4,0.7,0.89,0.89);
782 leg1->SetFillColor(0);
783 TLegend* leg2=(TLegend*)leg1->Clone();
784 TLegend* leg3=(TLegend*)leg1->Clone();
785 TLegend* leg4=
new TLegend(0.4,0.6,0.8,0.89);
786 leg4->SetFillColor(0);
788 for(
Int_t iTypes=0;iTypes<ncmp;iTypes++){
789 TFile* fin=
new TFile(filenameYield[iTypes]);
791 printf(
"WARNING: %s not found",filenameYield[iTypes].
Data());
795 TH1F*
hSignal=(TH1F*)fin->Get(
"hSignal");
796 TH1F* hBackground=(TH1F*)fin->Get(
"hBackground");
797 TH1F* hBackgroundNormSigma=(TH1F*)fin->Get(
"hBackgroundNormSigma");
798 TH1F* hSignificance=(TH1F*)fin->Get(
"hSignificance");
799 hSignal->SetName(Form(
"%s%d",hSignal->GetName(),iTypes));
800 hBackground->SetName(Form(
"%s%d",hBackground->GetName(),iTypes));
801 hBackgroundNormSigma->SetName(Form(
"%s%d",hBackgroundNormSigma->GetName(),iTypes));
802 hSignificance->SetName(Form(
"%s%d",hSignificance->GetName(),iTypes));
804 hSignal->SetMarkerColor(iTypes+2);
805 hSignal->SetLineColor(iTypes+2);
806 hBackground->SetMarkerColor(iTypes+2);
807 hBackground->SetLineColor(iTypes+2);
808 hBackgroundNormSigma->SetMarkerColor(iTypes+2);
809 hBackgroundNormSigma->SetLineColor(iTypes+2);
810 hSignificance->SetMarkerColor(iTypes+2);
811 hSignificance->SetLineColor(iTypes+2);
813 TLegendEntry* ent4=leg4->AddEntry(hSignal,Form(
"%s",legtext[iTypes].
Data()),
"PL");
814 ent4->SetTextColor(hSignal->GetMarkerColor());
817 printf(
"Info: Normalizing signal, background and significance to the number of events\n");
818 hSignal->Scale(1./
nevents[iTypes]);
819 hBackground->Scale(1./
nevents[iTypes]);
820 hBackgroundNormSigma->Scale(1./
nevents[iTypes]);
821 hSignificance->Scale(1./TMath::Sqrt(
nevents[iTypes]));
826 hSignal->DrawClone(
"P");
828 hBackground->DrawClone(
"P");
830 hSignificance->DrawClone(
"P");
832 hBackgroundNormSigma->DrawClone(
"P");
835 hSignal->DrawClone(
"Psames");
837 hBackground->DrawClone(
"Psames");
839 hSignificance->DrawClone(
"Psames");
841 hBackgroundNormSigma->DrawClone(
"Psames");
844 TH1F* hRelErrSig=(TH1F*)fin->Get(
"hRelErrSig");
845 TH1F* hInvSignif=(TH1F*)fin->Get(
"hInvSignif");
846 hRelErrSig->SetName(Form(
"%s%d",hRelErrSig->GetName(),iTypes));
847 hInvSignif->SetName(Form(
"%s%d",hInvSignif->GetName(),iTypes));
849 hRelErrSig->SetMarkerColor(iTypes+2);
850 hRelErrSig->SetLineColor(iTypes+2);
851 hInvSignif->SetMarkerColor(iTypes+2);
852 hInvSignif->SetLineColor(iTypes+2);
854 TLegendEntry* ent1=leg1->AddEntry(hRelErrSig,Form(
"From Fit (%s)",legtext[iTypes].
Data()),
"P");
855 ent1->SetTextColor(hRelErrSig->GetMarkerColor());
856 ent1=leg1->AddEntry(hInvSignif,Form(
"1/Significance (%s)",legtext[iTypes].
Data()),
"PL");
857 ent1->SetTextColor(hInvSignif->GetMarkerColor());
861 hRelErrSig->DrawClone(
"P");
862 hInvSignif->DrawClone();
864 hRelErrSig->DrawClone(
"Psames");
865 hInvSignif->DrawClone(
"sames");
868 TH1F* hNDiffCntSig1=(TH1F*)fin->Get(
"hNDiffCntSig1");
869 TH1F* hNDiffCntSig2=(TH1F*)fin->Get(
"hNDiffCntSig2");
870 hNDiffCntSig1->SetName(Form(
"%s%d",hNDiffCntSig1->GetName(),iTypes));
871 hNDiffCntSig2->SetName(Form(
"%s%d",hNDiffCntSig2->GetName(),iTypes));
873 hNDiffCntSig1->SetMarkerColor(iTypes+2);
874 hNDiffCntSig1->SetLineColor(iTypes+2);
875 hNDiffCntSig2->SetMarkerColor(iTypes+2);
876 hNDiffCntSig2->SetLineColor(iTypes+2);
877 TLegendEntry* ent2=leg2->AddEntry(hNDiffCntSig1,Form(
"From Counting1 (%s)",legtext[iTypes].
Data()),
"PL");
878 ent2->SetTextColor(hNDiffCntSig1->GetMarkerColor());
879 ent2=leg2->AddEntry(hNDiffCntSig2,Form(
"From Counting2 (%s)",legtext[iTypes].
Data()),
"PL");
880 ent2->SetTextColor(hNDiffCntSig2->GetMarkerColor());
884 hNDiffCntSig1->DrawClone();
885 hNDiffCntSig2->DrawClone();
887 hNDiffCntSig1->DrawClone(
"sames");
888 hNDiffCntSig2->DrawClone(
"sames");
891 TGraph* grReducedChiSquare=(
TGraph*)fin->Get(
"grReducedChiSquare");
892 grReducedChiSquare->SetName(Form(
"%s%d",grReducedChiSquare->GetName(),iTypes));
894 grReducedChiSquare->SetMarkerColor(iTypes+2);
895 grReducedChiSquare->SetLineColor(iTypes+2);
896 TLegendEntry* ent3=leg3->AddEntry(grReducedChiSquare,Form(
"%s",legtext[iTypes].
Data()),
"PL");
897 ent3->SetTextColor(grReducedChiSquare->GetMarkerColor());
900 if(iTypes==0) grReducedChiSquare->DrawClone(
"AP");
901 else grReducedChiSquare->DrawClone(
"P");
916 TFile*
fout=
new TFile(
"ComparisonRawYield.root",
"RECREATE");
TH1F * GetHistoClone() const
void DrawHere(TVirtualPad *pd, Double_t nsigma=3, Int_t writeFitInfo=1) const
write the canvas in a root file
static TH1D * RebinHisto(TH1 *hOrig, Int_t reb, Int_t firstUse=-1)
Rebinning of invariant mass histograms.
void FitMassSpectra(Int_t analysisType=kDplusKpipi, TString fileNameb="", TString fileNamec="", TString fileNamed="", TString fileNamee="")
Bool_t LoadDstarD0piHistos(TObjArray *listFiles, TH1F **hMass)
Bool_t LoadDplusHistos(TObjArray *listFiles, TH1F **hMass)
void SetInitialGaussianMean(Double_t mean)
Bool_t LoadD0toKpiHistos(TObjArray *listFiles, TH1F **hMass)
Double_t ptlims[nPtBins+1]
void CompareFitTypes(TString *paths, TString *legtext, Int_t ncmp=3, TString *filenameYield=0x0)
Int_t firstUsedBin[nPtBins]
TF1 * GetBackgroundFullRangeFunc()
TF1 * GetBackgroundRecalcFunc()
Double_t GetRawYieldError() const
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.
Bool_t LoadDsHistos(TObjArray *listFiles, TH1F **hMass)
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
Bool_t Data(TH1F *h, Double_t *rangefit, Bool_t writefit, Double_t &sgn, Double_t &errsgn, Double_t &bkg, Double_t &errbkg, Double_t &sgnf, Double_t &errsgnf, Double_t &sigmafit, Int_t &status)
TObject * FindObject(int bin, const char *nameH, const TList *lst, Bool_t normPerEvent=kTRUE)
Bool_t CompareCuts(const AliRDHFCuts *obj) const
virtual Bool_t MassFitter(Bool_t draw=kTRUE)
Bool_t cutsappliedondistr
Float_t * GetPtBinLimits() const
Double_t GetSigma() const
TFile * fout
input train file
Float_t massRangeForCounting
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.