47 TFile* oldFile = gFile;
48 TDirectory* oldDir = gDirectory;
50 TFile* file =
new TFile(fileName.c_str());
53 cout <<
"File name = " << fileName << endl;
54 cout <<
"Number of events = " <<
fNofEvents << endl;
61 const string& cName =
"hPtY_cands/" + cand;
62 const string& hName =
"hPtY_cands_" + cand;
74 for (
const string& hName : {
"hMom",
"hMomPx",
"hMomPy",
"hMomPz",
"hPt",
"hRapidity"}) {
109 int nGroupMatch = 50;
110 int nGroupBgSrc = 50;
121 fH.
Rebin(
"hMinvBgMatch", {
"trueMatch",
"trueMatchEl",
"trueMatchNotEl",
"mismatch"},
fH.
fAnaStepNames, nGroupMatch);
127 TH2D* hPos =
fH.
H2Clone(
"hBetaMom_cands_plutoEl+");
128 TH2D* hEl =
fH.
H2Clone(
"hBetaMom_cands_plutoEl-");
139 vector<TH1*> effHist;
142 int nBins = eff->GetNbinsX();
143 double integralTotal =
fH.
H1(hist, src)->Integral(1, nBins,
"width");
145 if (option ==
"right") {
146 for (
int iB = 1; iB <= nBins; iB++) {
147 eff->SetBinContent(iB,
fH.
H1(hist, src)->Integral(1, iB,
"width") / integralTotal);
148 eff->GetYaxis()->SetTitle(
"Cut Efficiency");
151 else if (option ==
"left") {
152 for (
int iB = nBins; iB >= 1; iB--) {
153 eff->SetBinContent(iB,
fH.
H1(hist, src)->Integral(iB, nBins,
"width") / integralTotal);
154 eff->GetYaxis()->SetTitle(
"Cut Efficiency");
157 effHist.push_back(eff);
165 string newCName = cName +
"/" + cName +
"_all";
166 TCanvas* c =
fH.
fHM.
CreateCanvas(newCName.c_str(), newCName.c_str(), 1600, 1200);
176 newCName = cName +
"/" + cName +
"_" +
fH.
fAnaStepNames[
static_cast<int>(step)];
184 TH2D*
h =
fH.
H2(hist.c_str(), step);
187 bool drawAnaStep =
true;
200 TH2D*
h =
fH.
H2(
"hPtYPairSignal", step);
204 eff->SetMaximum(10.);
205 bool drawAnaStep =
true;
226 vector<string> latex;
228 for (
const string& pm : {
"+",
"-"}) {
229 hVec.push_back(
fH.
H1(hName + pm, src, step));
230 latex.push_back(
fH.
fSrcLatex[
static_cast<int>(src)] +
" (e" + pm +
")");
243 DrawH1({
fH.
H1(
"hMotherPdg_mc"),
fH.
H1(
"hMotherPdg_acc")}, {
"MC",
"acc"},
kLinear,
kLog,
true, 0.7, 0.7, 0.99, 0.99,
253 string cbName =
"CombPairsPluto/";
257 fH.
fHM.
CreateCanvas((cbName +
"pairYields_steps").c_str(), (cbName +
"pairYields_steps").c_str(), 1800, 600);
271 TCanvas* c =
fH.
fHM.
CreateCanvas((cbName +
"pairYields").c_str(), (cbName +
"pairYields").c_str(), 1800, 1800);
277 TH1* pm =
fH.
H1Clone(
"hMinvCombPM_pluto_mixedEv", step);
278 TH1* pp =
fH.
H1Clone(
"hMinvCombPP_pluto_mixedEv", step);
279 TH1* mm =
fH.
H1Clone(
"hMinvCombMM_pluto_mixedEv", step);
281 {
"e^{+}e^{-} pairs (mixed ev.)",
"e^{+}e^{+} pairs (mixed ev.)",
"e^{-}e^{-} pairs (mixed ev.)"},
kLinear,
282 kLog,
true, 0.57, 0.79, 0.99, 0.99,
"hist");
289 TCanvas* c =
fH.
fHM.
CreateCanvas((cbName +
"ratio_PPMM").c_str(), (cbName +
"ratio_PPMM").c_str(), 1800, 1800);
295 TH1* rat =
fH.
H1Clone(
"hMinvCombPP_pluto_mixedEv", step);
296 rat->Divide(
fH.
H1(
"hMinvCombMM_pluto_mixedEv", step));
297 rat->GetYaxis()->SetTitle(
"Ratio");
300 DrawTextOnPad(
"Ratio e^{+}e^{+} / e^{-}e^{-} ", 0.4, 0.80, 0.89, 0.89);
306 TCanvas* c =
fH.
fHM.
CreateCanvas((cbName +
"geomMean").c_str(), (cbName +
"geomMean").c_str(), 1800, 1800);
312 TH1* gm =
fH.
H1Clone(
"hMinvCombPP_pluto_mixedEv", step);
313 for (
int iB = 1; iB <= gm->GetNbinsX(); iB++) {
314 double pp =
fH.
H1(
"hMinvCombPP_pluto_mixedEv", step)->GetBinContent(iB);
315 double mm =
fH.
H1(
"hMinvCombMM_pluto_mixedEv", step)->GetBinContent(iB);
316 double con = std::sqrt(pp * mm);
317 gm->SetBinContent(iB, con);
326 TCanvas* c =
fH.
fHM.
CreateCanvas((cbName +
"kFactor").c_str(), (cbName +
"kFactor").c_str(), 1800, 1800);
332 TH1* k =
fH.
H1Clone(
"hMinvCombPM_pluto_mixedEv", step);
333 TH1* gm =
fH.
H1Clone(
"hMinvCombPP_pluto_mixedEv", step);
334 for (
int iB = 1; iB <= k->GetNbinsX(); iB++) {
335 double con = std::sqrt(
fH.
H1(
"hMinvCombPP_pluto_mixedEv", step)->GetBinContent(iB)
336 *
fH.
H1(
"hMinvCombMM_pluto_mixedEv", step)->GetBinContent(iB));
337 gm->SetBinContent(iB, con);
341 k->GetYaxis()->SetTitle(
"k Factor");
353 for (
size_t i = 0; i < src.size(); i++) {
368 if (doScale)
h->Scale(1. /
h->Integral());
378 TCanvas* c =
fH.
fHM.
CreateCanvas((
"cuts/" + hist).c_str(), (
"cuts/" + hist).c_str(), w,
h);
383 if (cut != -999999.) {
384 TLine* cutLine =
new TLine(cut, 0.0, cut, 1.0);
385 cutLine->SetLineWidth(2);
412 for (
const string& type : {
"all",
"pion",
"truePair"}) {
427 TH2D*
h =
fH.
H2Clone(
"hSrcBgPairsEpEm", step);
428 gStyle->SetPaintTextFormat(
"4.1f");
429 string labels[4] = {
"#gamma",
"#pi^{0}",
"#pi^{#pm}",
"oth"};
430 for (
int i = 1; i <= 4; i++) {
431 h->GetYaxis()->SetBinLabel(i, labels[i - 1].c_str());
432 h->GetXaxis()->SetBinLabel(i, labels[i - 1].c_str());
434 h->SetMarkerSize(2.5);
436 h->Scale(100. /
h->Integral());
437 h->GetZaxis()->SetTitle(
"[%]");
441 h->GetZaxis()->SetTitle(
"Number of pairs/event x10^{3}");
444 h->GetXaxis()->SetLabelSize(0.1);
445 h->GetYaxis()->SetLabelSize(0.1);
452 TCanvas* c1 =
fH.
fHM.
CreateCanvas(
"bg/srcPairs_abs",
"bg/srcPairs_abs", 1500, 1500);
461 TCanvas* c2 =
fH.
fHM.
CreateCanvas(
"bg/srcPairs_perc",
"bg/srcPairs_perc", 1500, 1500);
470 fH.
fHM.
CreateCanvas(
"bg/srcPairs_abs_" + elidCutName,
"bg/srcPairs_abs_" + elidCutName, 1100, 800);
473 fH.
fHM.
CreateCanvas(
"bg/srcPairs_perc_" + elidCutName,
"bg/srcPairs_perc_" + elidCutName, 1100, 800);
481 if (xCr == -999999. || yCr == -999999.)
return;
482 vector<TLine*> lines {
new TLine(0., 0., xCr, 0.),
new TLine(0., 0., 0., yCr),
new TLine(xCr, 0., 0., yCr)};
483 for (
size_t i = 0; i < lines.size(); i++) {
484 lines[i]->SetLineWidth(2.);
491 TH1D* gg =
fH.
H1Clone(
"hMinvBgSource2_elid_gg");
492 TH1D* pipi =
fH.
H1Clone(
"hMinvBgSource2_elid_pipi");
493 TH1D* pi0pi0 =
fH.
H1Clone(
"hMinvBgSource2_elid_pi0pi0");
494 TH1D* oo =
fH.
H1Clone(
"hMinvBgSource2_elid_oo");
495 TH1D* gpi =
fH.
H1Clone(
"hMinvBgSource2_elid_gpi");
496 TH1D* gpi0 =
fH.
H1Clone(
"hMinvBgSource2_elid_gpi0");
497 TH1D* go =
fH.
H1Clone(
"hMinvBgSource2_elid_go");
498 TH1D* pipi0 =
fH.
H1Clone(
"hMinvBgSource2_elid_pipi0");
499 TH1D* pio =
fH.
H1Clone(
"hMinvBgSource2_elid_pio");
500 TH1D* pi0o =
fH.
H1Clone(
"hMinvBgSource2_elid_pi0o");
502 cout <<
"Entries gg: " << gg->GetEntries() << endl;
503 cout <<
"Entries pipi: " << pipi->GetEntries() << endl;
504 cout <<
"Entries pi0pi0: " << pi0pi0->GetEntries() << endl;
505 cout <<
"Entries oo: " << oo->GetEntries() << endl;
506 cout <<
"Entries gpi: " << gpi->GetEntries() << endl;
507 cout <<
"Entries gpi0: " << gpi0->GetEntries() << endl;
508 cout <<
"Entries go: " << go->GetEntries() << endl;
509 cout <<
"Entries pipi0: " << pipi0->GetEntries() << endl;
510 cout <<
"Entries pio: " << pio->GetEntries() << endl;
511 cout <<
"Entries pi0o: " << pi0o->GetEntries() << endl;
522 pi0pi0->Scale(1. / reb);
523 gpi0->Scale(1. / reb);
525 pi0o->Scale(1. / reb);
527 string cName =
"minvBgSrc/minvBgSrc";
529 vector<string> names = {
"#gamma-#gamma",
"#pi^{0}-#pi^{0}",
"#gamma-#pi^{0}",
"#gamma-o.",
"#pi^{0}-o."};
532 DrawH1({gg, pi0pi0, gpi0, go, pi0o}, names,
kLinear,
kLog,
true, 0.85, 0.7, 0.99, 0.99,
"hist");
547 pdgZoom->GetXaxis()->SetRangeUser(-20., 20.);
552 vector<string> yLabel = {
"e^{#pm}_{PLUTO}",
"e^{#pm}_{UrQMD}",
"#pi^{#pm}",
"p",
"K^{+}",
"o."};
556 "purity/PidVsMom_" +
fH.
fAnaStepNames[
static_cast<int>(step)], 800, 600);
558 hPidMom->SetMinimum(5e-7);
560 for (
size_t y = 1;
y <= yLabel.size();
y++) {
561 hPidMom->GetYaxis()->SetBinLabel(
y, yLabel[
y - 1].c_str());
563 double nEl = hPidMom->Integral(1, hPidMom->GetXaxis()->GetNbins(), 2, 2);
565 (nEl / hPidMom->Integral(1, hPidMom->GetXaxis()->GetNbins(), 2, hPidMom->GetYaxis()->GetNbins())) * 100;
570 int nBins =
fH.
H2(
"hCandPdgVsMom_elid")->GetXaxis()->GetNbins();
571 double xMin =
fH.
H2(
"hCandPdgVsMom_elid")->GetXaxis()->GetXmin();
572 double xMax =
fH.
H2(
"hCandPdgVsMom_elid")->GetXaxis()->GetXmax();
573 TH1D* purity =
new TH1D(
"purity_Mom",
"purity_Mom; P [GeV/c]; Purity [%]", nBins, xMin, xMax);
574 for (
int i = 1; i <= purity->GetNbinsX(); i++) {
577 ->Integral(i, i, 2,
fH.
H2(
"hCandPdgVsMom_elid")->GetYaxis()->GetNbins());
578 double val = (nAll != 0) ? 100 * nEl / nAll : 0.;
579 purity->SetBinContent(i, val);
582 purity->Scale(1. / 5.);
583 fH.
fHM.
CreateCanvas(
"purity/purity_mom_elid",
"purity/purity_mom_elid", 800, 800);
588 {
"#gamma",
"#pi^{0}",
"#pi^{#pm}",
"p",
"K",
"e^{#pm}_{sec}",
"oth.",
"signal"}, 1000.,
589 "Tracks per event x10^{3}");
592 for (
const string& hName : {
"hAnnRichVsMomPur",
"hTrdElLikePur"}) {
593 string cName =
"purity/cuts_" + hName;
597 for (
const string&
id : {
"El",
"Bg"}) {
598 TH2D* hist =
fH.
H2Clone(hName +
"_" +
id);
606 ratio->Divide(
fH.
H2(hName +
"_Bg"));
614 TCanvas* c =
fH.
fHM.
CreateCanvas((
"cuts/" + hist).c_str(), (
"cuts/" + hist).c_str(), 1000, 1500);
616 vector<TH1*> projX, projY;
619 vector<string> latex;
621 int srcInt =
static_cast<int>(src);
624 double nofPerEvent =
fH.
H2(hist, src)->GetEntries() / (double)
fNofEvents;
628 projX.push_back(
fH.
H2(hist, src)->ProjectionX((hist +
fH.
fSrcLatex[
static_cast<int>(src)]).c_str(), 1,
629 fH.
H2(hist, src)->GetYaxis()->GetNbins(),
""));
630 projY.push_back(
fH.
H2(hist, src)->ProjectionY());
648 for (
size_t i = 0; i < xyz.size(); i++) {
651 xyz[i]->SetMinimum(1e-3);
660 string name =
fH.
GetName(
"hVertexGammaXZ", step);
661 TH1D* zProj = (TH1D*)
fH.
H2(name)->ProjectionX((name +
"pz").c_str())->Clone();
662 zProj->GetYaxis()->SetTitle(
"Counter per event");
663 zProj->GetXaxis()->SetRangeUser(-2., 17.);
668 TCanvas* cZoom =
fH.
fHM.
CreateCanvas(
"vertexGamma_mc_zoom",
"vertexGamma_mc_zoom", 1800, 600);
670 for (
size_t i = 0; i < xyz.size(); i++) {
671 TH2D* hZoom = (TH2D*) xyz[i]->Clone();
673 hZoom->GetXaxis()->SetRangeUser(-1., 11.);
674 hZoom->GetYaxis()->SetRangeUser(-10., 10.);
676 hZoom->SetMinimum(1e-3);
688 double min = std::numeric_limits<Double_t>::max();
689 double max = std::numeric_limits<Double_t>::min();
691 TLegend* leg =
new TLegend(0.80, 0.32, 0.99, 0.99);
694 TH1D*
h =
fH.
H1(name, step);
695 LOG(info) << name <<
" " <<
h->GetEntries();
696 if (
h ==
nullptr ||
h->GetEntries() <= 0)
continue;
699 if (h0 ==
nullptr) h0 =
h;
700 min = std::min(
h->GetMinimum(), min);
701 max = std::max(
h->GetMaximum(), max);
702 LOG(info) << name <<
" min:" <<
h->GetMinimum() <<
" max:" <<
h->GetMaximum();
704 if (min == 0.) min = std::min(1e-8, max * 1e-6);
705 if (h0 !=
nullptr) h0->SetMinimum(min);
706 if (h0 !=
nullptr) h0->SetMaximum(1.1 * max);
708 leg->SetFillColor(kWhite);
711 gPad->SetGridx(
true);
712 gPad->SetGridy(
true);
718 TCanvas* c1 =
fH.
fHM.
CreateCanvas(
"minv_sbg_anaStep",
"minv_sbg_anaStep", 1200, 600);
725 TCanvas* c2 =
fH.
fHM.
CreateCanvas(
"minv_pi0_eta_gamma_anaStep",
"minv_pi0_eta_gamma_anaStep", 1800, 600);
739 TH1D* sbg =
static_cast<TH1D*
>(bg->Clone());
741 sbg->SetMinimum(1e-8);
743 DrawH1({sbg, bg, s}, {
"",
"",
""},
kLinear,
kLog,
false, 0, 0, 0, 0,
"Hist L");
744 s->SetFillColor(kRed);
745 s->SetLineColor(kBlack);
748 bg->SetFillColor(kYellow - 10);
749 bg->SetLineColor(kBlack);
752 sbg->SetFillColor(kBlue);
753 sbg->SetLineColor(kBlack);
754 sbg->SetLineWidth(1);
756 s->SetMarkerStyle(1);
757 bg->SetMarkerStyle(1);
758 sbg->SetMarkerStyle(1);
767 vector<string> latex;
777 bool drawAnaStep =
true;
785 vector<string> latex {
"true match",
"true match (e^{#pm})",
"true match (not e^{#pm})",
"mismatch "};
787 for (
const string& subName : {
"trueMatch",
"trueMatchEl",
"trueMatchNotEl",
"mismatch"}) {
788 TH1D*
h =
fH.
H1(
"hMinvBgMatch_" + subName, step);
800 for (
const int& pdg : {11, 211, 2212, 321}) {
801 vector<string> subNames {
"mc",
"acc",
"recSts",
"recStsRich",
"recStsRichTrd",
"recStsRichTrdTof"};
802 vector<string> latex {
803 "MC",
"Acc",
"Rec in STS",
"Rec in STS-RICH",
"Rec in STS-RICH-TRD",
"Rec in STS-RICH-TRD-TOF"};
804 vector<string> latexAll(latex.size()), latexPrim(latex.size());
805 string ptcl = (pdg == 11) ?
"hEl" : (pdg == 211) ?
"hPi" : (pdg == 2212) ?
"hProton" :
"hKaon";
807 vector<TH1*> histsAll, histsPrim;
810 for (
const string& subName : subNames) {
811 TH1D* hAll =
fH.
H1(ptcl +
"Mom_all_" + subName);
812 hAll->SetMinimum(3e-6);
813 hAll->SetMaximum(50);
815 histsAll.push_back(hAll);
817 TH1D* hPrim =
fH.
H1(ptcl +
"Mom_prim_" + subName);
818 hPrim->SetMinimum(3e-6);
819 hPrim->SetMaximum(50);
821 histsPrim.push_back(hPrim);
828 string cName =
"AccRecMom/" + ptcl +
"Mom";
837 for (
const string& det : {
"sts",
"rich",
"trd",
"tof"}) {
839 vector<string> latex;
841 for (
const string& pm : {
"+",
"-"}) {
842 hVec.push_back(
fH.
H1(
"hMomAcc" + pm +
"_" + det, src));
843 latex.push_back(
fH.
fSrcLatex[
static_cast<int>(src)] +
" (e" + pm +
")");
846 fH.
fHM.
CreateCanvas(
"AccRecMom/momDetAcc_" + det,
"AccRecMom/momDetAcc_" + det, 800, 800);
853 const string& zTitle)
855 fH.
fHM.
CreateCanvas((cName +
"_abs").c_str(), (cName +
"_abs").c_str(), 900, 600);
857 habs->SetStats(
false);
859 habs->SetMinimum(1e-2);
860 habs->GetZaxis()->SetTitle(zTitle.c_str());
861 habs->SetMarkerSize(1.4);
864 fH.
fHM.
CreateCanvas((cName +
"_perc").c_str(), (cName +
"_perc").c_str(), 900, 600);
866 hperc->SetStats(
false);
867 for (
int x = 1;
x <= hperc->GetNbinsX();
x++) {
870 for (
int y = 1;
y <= hperc->GetNbinsY();
y++) {
871 nbg += habs->GetBinContent(
x,
y);
873 double sc = 100. / (nbg / scale);
874 for (
int y = 1;
y <= hperc->GetNbinsY();
y++) {
875 double val = sc * hperc->GetBinContent(
x,
y);
876 hperc->SetBinContent(
x,
y, val);
879 hperc->GetZaxis()->SetTitle(
"[%]");
880 hperc->GetYaxis()->SetLabelSize(0.06);
881 hperc->SetMarkerColor(kBlack);
882 hperc->SetMarkerSize(1.4);
885 for (
size_t y = 1;
y <= yLabels.size();
y++) {
886 hperc->GetYaxis()->SetBinLabel(
y, yLabels[
y - 1].c_str());
887 habs->GetYaxis()->SetBinLabel(
y, yLabels[
y - 1].c_str());
896 gStyle->SetPaintTextFormat(
"4.1f");
901 hbg->GetYaxis()->SetTitle(
"Tracks/event x10");
903 hbg->SetMarkerSize(2.);
905 fH.
fHM.
CreateCanvas(
"signal/nofSignalTracks",
"signal/nofSignalTracks", 900, 900);
906 TH1D* hel =
fH.
H1(
"hNofSignalTracks");
911 purity->Divide(
fH.
H1(
"hNofBgTracks"),
fH.
H1(
"hNofSignalTracks"));
913 purity->SetMarkerSize(1.9);
920 {
"#gamma",
"#pi^{0}",
"#pi^{#pm}",
"p",
"K",
"e^{#pm}_{sec}",
"oth.",
"signal"}, 1000.,
921 "Tracks per event x10^{3}");
926 for (
const string& p : {
"gamma",
"pi0"}) {
928 TH1D* hTopo =
fH.
H1Clone(
"hNofTopoPairs_" + p);
929 hTopo->Scale(1. / hTopo->Integral());
931 hTopo->SetMarkerSize(1.);
937 gStyle->SetPaintTextFormat(
"4.1f");
940 vector<string> dets {
"all",
"rich",
"trd",
"tof"};
941 for (
size_t i = 0; i < dets.size(); i++) {
943 TH1D*
h =
fH.
H1Clone(
"hNofMismatches_" + dets[i]);
945 h->GetYaxis()->SetTitle((
"Mismatch tracks (" + dets[i] +
")/event x10").c_str());
947 h->SetMarkerSize(2.);
961 if (
h->IsA() == TH2D::Class()) {
962 for (
int y = 1;
y <=
h->GetYaxis()->GetNbins();
y++) {
963 h->SetBinContent(step,
y,
h->GetBinContent(step + 2,
y));
966 else if (
h->IsA() == TH1D::Class()) {
967 h->SetBinContent(step,
h->GetBinContent(step + 2));
973 if (!
fUseMvd) { rangeMax = rangeMax - 2; }
975 h->GetXaxis()->SetLabelSize(0.06);
990 for (
const string& num : {
"1",
"2"}) {
994 h1->GetXaxis()->SetLabelSize(0.06);
995 h1->GetXaxis()->SetBinLabel(1,
"Correct");
996 h1->GetXaxis()->SetBinLabel(2,
"Wrong");
997 gPad->SetLogy(
false);
void DrawTextOnPad(const string &text, Double_t x1, Double_t y1, Double_t x2, Double_t y2)
void SetDefaultDrawStyle()
void DrawH1(TH1 *hist, HistScale logx, HistScale logy, const string &drawOpt, Int_t color, Int_t lineWidth, Int_t lineStyle, Int_t markerSize, Int_t markerStyle)
void DrawH2(TH2 *hist, HistScale logx, HistScale logy, HistScale logz, const string &drawOpt)
Helper functions for drawing 1D and 2D histograms and graphs.
Generates beam ions for transport simulation.
static Int_t MarkerStyle(Int_t markerIndex)
TCanvas * CreateCanvas(const std::string &name, const std::string &title, Int_t width, Int_t height)
Create and draw TCanvas and store pointer to it.
void SaveCanvasToImage(const std::string &outputDir, const std::string &options="png,eps")
Save all stored canvases to images.
void ReadFromFile(TFile *file)
Read histograms from file.
void ScaleByPattern(const std::string &pattern, Double_t scale)
Scale histograms which name matches specified pattern.
TH1 * H1(const std::string &name) const
Return pointer to TH1 histogram.
void DrawMinvBgPairSrc(ELmvmAnaStep step)
void DrawPtY(const std::string &hist, ELmvmAnaStep step)
void DrawHistFromFile(const std::string &fileName, const std::string &outputDir="", bool useMvd=true)
Implement functionality of drawing histograms in the macro from the specified file,...
void DrawSource2D(const std::string &cName, const std::string &hName, const std::vector< std::string > &yLabels, double scale, const std::string &zTitle)
void DrawCutEffH1(const std::string &hist, const std::string &option)
void Draw2DCutTriangle(double xCr, double yCr)
void DrawAnaStepH1(const std::string &hist, bool logy=false)
void DrawBgSourcePairsAll()
void Draw2DCut(const std::string &hist, double cutCrossX=-999999., double cutCrossY=-999999.)
void DrawMinvMatching(ELmvmAnaStep step)
void SetAnalysisStepAxis(TH1 *h)
void DrawMinvSBg(ELmvmAnaStep step)
bool SkipMvd(ELmvmAnaStep step)
void Draw1DCut(const std::string &hist, const std::string &sigOption, double cut=-999999.)
void DrawMinvPt(ELmvmAnaStep step)
void DrawSrcH1(const std::string &hist, ELmvmAnaStep step=ELmvmAnaStep::Undefined, bool doScale=true)
void DrawCombinatorialPairs()
void DrawBgSourcePairs(ELmvmAnaStep step, bool inPercent, bool drawAnaStep=true)
void DrawMismatchesAndGhosts()
void SaveCanvasToImage()
Save all created canvases to images.
void DrawBgSourceTracks()
void DrawRapidity(ELmvmAnaStep step)
void DrawAnaStepMany(const std::string &cName, std::function< void(ELmvmAnaStep)> drawFunc)
void RebinMinvHist()
Rebin minv histograms for better drawing. Should be called after calculation of S/BG ratios.
void DrawBetaMomSpectra()
void DrawSrcAnaStepH1(const std::string &hName, ELmvmAnaStep step)
void DrawSrcAnaStepEpEmH1(const std::string &cName, ELmvmAnaStep step)
void DrawPtYEfficiency(ELmvmAnaStep step)
static const std::vector< int > fAnaStepColors
static const std::vector< ELmvmSrc > fSrcs
static const std::vector< std::string > fCandNames
static const std::vector< std::string > fAnaStepLatex
void DrawEfficiency(TH1 *h1, TH1 *h2, double xPos, double yPos)
TH1D * CreateSignificanceH1(TH1D *s, TH1D *bg, const std::string &name, const std::string &option)
TH2D * H2Clone(const std::string &name)
TH2D * H2(const std::string &name)
static const std::vector< int > fSrcColors
static const std::vector< std::string > fBgPairSrcNames
static const int fNofBgPairSrc
static const std::vector< std::string > fSrcNames
std::string GetName(const std::string &name, ELmvmAnaStep step)
static const std::vector< std::string > fSrcLatex
void Rebin(const std::string &name, int nGroup)
static const std::vector< ELmvmAnaStep > fAnaSteps
static const int fNofAnaSteps
TH1D * H1Clone(const std::string &name)
TH1D * H1(const std::string &name)
static const std::vector< std::string > fBgPairSrcLatex
static const std::vector< std::string > fAnaStepNames
static void DrawAnaStepOnPad(ELmvmAnaStep step)
TH2D * DivideH2(TH2 *h1, TH2 *h2, const string &histName, double scale, const string &titleZaxis)
std::string NumberToString(const T &value, int precision=1)