47 TFile* oldFile = gFile;
48 TDirectory* oldDir = gDirectory;
50 TFile* file =
new TFile(fileName.c_str());
51 fH.fHM.ReadFromFile(file);
52 fNofEvents = (int)
fH.fHM.H1(
"hEventNumber")->GetEntries();
53 cout <<
"File name = " << fileName << endl;
54 cout <<
"Number of events = " <<
fNofEvents << endl;
60 for (
const auto& cand :
fH.fCandNames) {
61 const string& cName =
"hPtY_cands/" + cand;
62 const string& hName =
"hPtY_" + cand;
70 for (
const string hName : {
"hMom",
"hMomPx",
"hMomPy",
"hMomPz",
"hPt",
"hRapidity"}) {
102 int nGroupMatch = 50;
103 int nGroupBgSrc = 50;
104 fH.Rebin(
"hMinv",
fH.fSrcNames,
fH.fAnaStepNames, nGroup);
105 fH.Rebin(
"hMinvBgMatch", {
"trueMatch",
"trueMatchEl",
"trueMatchNotEl",
"mismatch"},
fH.fAnaStepNames, nGroupMatch);
106 fH.Rebin(
"hMinvBgSource",
fH.fBgPairSrcNames,
fH.fAnaStepNames, nGroupBgSrc);
111 TH2D* hPos =
fH.H2Clone(
"hBetaMom_plutoEl+");
112 TH2D* hEl =
fH.H2Clone(
"hBetaMom_plutoEl-");
113 TCanvas* c =
fH.fHM.CreateCanvas(
"betaMom/",
"betaMom/", 1600, 800);
123 vector<TH1*> effHist;
125 TH1D* eff =
fH.H1Clone(hist, src);
126 int nBins = eff->GetNbinsX();
127 double integralTotal =
fH.H1(hist, src)->Integral(1, nBins,
"width");
129 if (option ==
"right") {
130 for (
int iB = 1; iB <= nBins; iB++) {
131 eff->SetBinContent(iB,
fH.H1(hist, src)->Integral(1, iB,
"width") / integralTotal);
132 eff->GetYaxis()->SetTitle(
"Cut Efficiency");
135 else if (option ==
"left") {
136 for (
int iB = nBins; iB >= 1; iB--) {
137 eff->SetBinContent(iB,
fH.H1(hist, src)->Integral(iB, nBins,
"width") / integralTotal);
138 eff->GetYaxis()->SetTitle(
"Cut Efficiency");
141 effHist.push_back(eff);
149 string newCName = cName +
"/" + cName +
"_all";
150 TCanvas* c =
fH.fHM.CreateCanvas(newCName.c_str(), newCName.c_str(), 1600, 1200);
152 for (
const auto step :
fH.fAnaSteps) {
158 for (
const auto step :
fH.fAnaSteps) {
160 newCName = cName +
"/" + cName +
"_" +
fH.fAnaStepNames[
static_cast<int>(step)];
161 fH.fHM.CreateCanvas(newCName.c_str(), newCName.c_str(), 800, 800);
168 TH2D*
h =
fH.H2(hist.c_str(), step);
171 bool drawAnaStep =
true;
172 if (drawAnaStep)
fH.DrawEfficiency(
h, hmc, 0.2, 1.8);
173 if (drawAnaStep)
fH.DrawAnaStepOnPad(step);
179 fH.DrawAnaStepOnPad(step);
184 TH2D*
h =
fH.H2(
"hPtYPairSignal", step);
188 eff->SetMaximum(10.);
189 bool drawAnaStep =
true;
190 if (drawAnaStep)
fH.DrawEfficiency(
h, hmc, 0.2, 1.8);
191 if (drawAnaStep)
fH.DrawAnaStepOnPad(step);
198 fH.DrawAnaStepOnPad(step);
204 fH.DrawAnaStepOnPad(step);
210 vector<string> latex;
212 for (
const string pm : {
"+",
"-"}) {
213 hVec.push_back(
fH.H1(hName + pm, src, step));
214 latex.push_back(
fH.fSrcLatex[
static_cast<int>(src)] +
" (e" + pm +
")");
218 fH.DrawAnaStepOnPad(step);
223 fH.fHM.CreateCanvas(
"mom_pairSignal",
"mom_pairSignal", 800, 800);
226 fH.fHM.CreateCanvas(
"mother_pdg",
"mother_pdg", 800, 800);
227 DrawH1({
fH.H1(
"hMotherPdg_mc")}, {
"MC"},
kLinear,
kLog,
true, 0.7, 0.7, 0.99, 0.99,
"hist");
229 fH.fHM.CreateCanvas(
"momVsAngle_pairSignal",
"momVsAngle_pairSignal", 800, 800);
230 DrawH2(
fH.H2(
"hMomVsAnglePairSignalMc"));
235 TCanvas* c =
fH.fHM.CreateCanvas(
"pmtXY",
"pmtXY", 1800, 600);
238 for (
size_t i = 0; i < src.size(); i++) {
242 DrawTextOnPad(
fH.fSrcLatex[
static_cast<int>(src[i])], 0.40, 0.9, 0.60, 0.99);
252 h->SetLineColor(
fH.fSrcColors[
static_cast<int>(src)]);
253 if (doScale)
h->Scale(1. /
h->Integral());
263 TCanvas* c =
fH.fHM.CreateCanvas((
"cuts/" + hist).c_str(), (
"cuts/" + hist).c_str(), w,
h);
268 if (cut != -999999.) {
269 TLine* cutLine =
new TLine(cut, 0.0, cut, 1.0);
270 cutLine->SetLineWidth(2);
290 for (
const string type : {
"all",
"pion",
"truePair"}) {
305 TH2D*
h =
fH.H2Clone(
"hSrcBgPairsEpEm", step);
306 gStyle->SetPaintTextFormat(
"4.1f");
307 string labels[4] = {
"#gamma",
"#pi^{0}",
"#pi^{#pm}",
"oth"};
308 for (
int i = 1; i <= 4; i++) {
309 h->GetYaxis()->SetBinLabel(i, labels[i - 1].c_str());
310 h->GetXaxis()->SetBinLabel(i, labels[i - 1].c_str());
312 h->SetMarkerSize(2.5);
314 h->Scale(100. /
h->Integral());
315 h->GetZaxis()->SetTitle(
"[%]");
319 h->GetZaxis()->SetTitle(
"Number of pairs/event x10^{3}");
322 h->GetXaxis()->SetLabelSize(0.1);
323 h->GetYaxis()->SetLabelSize(0.1);
324 if (drawAnaStep)
fH.DrawAnaStepOnPad(step);
330 TCanvas* c1 =
fH.fHM.CreateCanvas(
"bg/srcPairs_abs",
"bg/srcPairs_abs", 1500, 1500);
339 TCanvas* c2 =
fH.fHM.CreateCanvas(
"bg/srcPairs_perc",
"bg/srcPairs_perc", 1500, 1500);
348 fH.fHM.CreateCanvas(
"bg/srcPairs_abs_" + elidCutName,
"bg/srcPairs_abs_" + elidCutName, 1100, 800);
351 fH.fHM.CreateCanvas(
"bg/srcPairs_perc_" + elidCutName,
"bg/srcPairs_perc_" + elidCutName, 1100, 800);
354 DrawSource2D(
"bg/srcPairs_2d",
"hSrcBgPairs",
fH.fBgPairSrcLatex, 1000.,
"Pairs per event x10^{3}");
359 if (xCr == -999999. || yCr == -999999.)
return;
360 vector<TLine*> lines{
new TLine(0., 0., xCr, 0.),
new TLine(0., 0., 0., yCr),
new TLine(xCr, 0., 0., yCr)};
361 for (
size_t i = 0; i < lines.size(); i++) {
362 lines[i]->SetLineWidth(2.);
369 TH1D* gg =
fH.H1Clone(
"hMinvBgSource2_elid_gg");
371 TH1D* pi0pi0 =
fH.H1Clone(
"hMinvBgSource2_elid_pi0pi0");
374 TH1D* gpi0 =
fH.H1Clone(
"hMinvBgSource2_elid_gpi0");
375 TH1D* go =
fH.H1Clone(
"hMinvBgSource2_elid_go");
378 TH1D* pi0o =
fH.H1Clone(
"hMinvBgSource2_elid_pi0o");
389 pi0pi0->Scale(1. / reb);
390 gpi0->Scale(1. / reb);
392 pi0o->Scale(1. / reb);
394 string cName =
"minvBgSrc/minvBgSrc";
396 vector<string> names = {
"#gamma-#gamma",
"#pi^{0}-#pi^{0}",
"#gamma-#pi^{0}",
"#gamma-o.",
"#pi^{0}-o."};
397 fH.fHM.CreateCanvas(cName.c_str(), cName.c_str(), 1000, 1000);
399 DrawH1({gg, pi0pi0, gpi0, go, pi0o}, names,
kLinear,
kLog,
true, 0.85, 0.7, 0.99, 0.99,
"hist");
407 TCanvas* c =
fH.fHM.CreateCanvas(
"purity/pid_" +
fH.fAnaStepNames[
static_cast<int>(step)],
408 "purity/pid_" +
fH.fAnaStepNames[
static_cast<int>(step)], 1600, 800);
413 TH1D* pdgZoom =
fH.H1Clone(
"hCandPdg_" +
fH.fAnaStepNames[
static_cast<int>(step)]);
414 pdgZoom->GetXaxis()->SetRangeUser(-20., 20.);
419 vector<string> yLabel = {
"e^{#pm}_{PLUTO}",
"e^{#pm}_{UrQMD}",
"#pi^{#pm}",
"p",
"K^{+}",
"o."};
422 fH.fHM.CreateCanvas(
"purity/PidVsMom_" +
fH.fAnaStepNames[
static_cast<int>(step)],
423 "purity/PidVsMom_" +
fH.fAnaStepNames[
static_cast<int>(step)], 800, 600);
424 TH2D* hPidMom =
fH.H2(
"hCandPdgVsMom_" +
fH.fAnaStepNames[
static_cast<int>(step)]);
425 hPidMom->SetMinimum(5e-7);
427 for (
size_t y = 1;
y <= yLabel.size();
y++) {
428 hPidMom->GetYaxis()->SetBinLabel(
y, yLabel[
y - 1].c_str());
430 double nEl = hPidMom->Integral(1, hPidMom->GetXaxis()->GetNbins(), 2, 2);
432 (nEl / hPidMom->Integral(1, hPidMom->GetXaxis()->GetNbins(), 2, hPidMom->GetYaxis()->GetNbins())) * 100;
437 int nBins =
fH.H2(
"hCandPdgVsMom_elid")->GetXaxis()->GetNbins();
438 double xMin =
fH.H2(
"hCandPdgVsMom_elid")->GetXaxis()->GetXmin();
439 double xMax =
fH.H2(
"hCandPdgVsMom_elid")->GetXaxis()->GetXmax();
440 TH1D* purity =
new TH1D(
"purity_Mom",
"purity_Mom; P [GeV/c]; Purity [%]", nBins, xMin, xMax);
441 for (
int i = 1; i <= purity->GetNbinsX(); i++) {
444 ->Integral(i, i, 2,
fH.H2(
"hCandPdgVsMom_elid")->GetYaxis()->GetNbins());
445 double val = (nAll != 0) ? 100 * nEl / nAll : 0.;
446 purity->SetBinContent(i, val);
449 purity->Scale(1. / 5.);
450 fH.fHM.CreateCanvas(
"purity/purity_mom_elid",
"purity/purity_mom_elid", 800, 800);
455 {
"#gamma",
"#pi^{0}",
"#pi^{#pm}",
"p",
"K",
"e^{#pm}_{sec}",
"oth.",
"signal"}, 1000.,
456 "Tracks per event x10^{3}");
461 TCanvas* c =
fH.fHM.CreateCanvas((
"cuts/" + hist).c_str(), (
"cuts/" + hist).c_str(), 1000, 1500);
463 vector<TH1*> projX, projY;
466 vector<string> latex;
468 int srcInt =
static_cast<int>(src);
471 double nofPerEvent =
fH.H2(hist, src)->GetEntries() / (double)
fNofEvents;
475 projX.push_back(
fH.H2(hist, src)->ProjectionX((hist +
fH.fSrcLatex[
static_cast<int>(src)]).c_str(), 1,
476 fH.H2(hist, src)->GetYaxis()->GetNbins(),
""));
477 projY.push_back(
fH.H2(hist, src)->ProjectionY());
478 latex.push_back(
fH.fSrcLatex[srcInt]);
493 TCanvas* c =
fH.fHM.CreateCanvas(
"vertexGamma_mc",
"vertexGamma_mc", 1800, 600);
495 for (
size_t i = 0; i < xyz.size(); i++) {
498 xyz[i]->SetMinimum(1e-3);
502 TCanvas* cZ =
fH.fHM.CreateCanvas(
"vertexGamma_z",
"vertexGamma_z", 1500, 750);
507 string name =
fH.GetName(
"hVertexGammaXZ", step);
508 TH1D* zProj = (TH1D*)
fH.H2(name)->ProjectionX((name +
"pz").c_str())->Clone();
509 zProj->GetYaxis()->SetTitle(
"Counter per event");
510 zProj->GetXaxis()->SetRangeUser(-2., 17.);
512 fH.DrawAnaStepOnPad(step);
515 TCanvas* cZoom =
fH.fHM.CreateCanvas(
"vertexGamma_mc_zoom",
"vertexGamma_mc_zoom", 1800, 600);
517 for (
size_t i = 0; i < xyz.size(); i++) {
518 TH2D* hZoom = (TH2D*) xyz[i]->Clone();
520 hZoom->GetXaxis()->SetRangeUser(-1., 11.);
521 hZoom->GetYaxis()->SetRangeUser(-10., 10.);
523 hZoom->SetMinimum(1e-3);
527 fH.fHM.CreateCanvas(
"vertexGamma_rz_mc",
"vertexGamma_rz_mc", 900, 900);
535 double min = std::numeric_limits<Double_t>::max();
536 double max = std::numeric_limits<Double_t>::min();
538 TLegend* leg =
new TLegend(0.80, 0.32, 0.99, 0.99);
539 for (
const auto step :
fH.fAnaSteps) {
541 TH1D*
h =
fH.H1(name, step);
542 LOG(info) << name <<
" " <<
h->GetEntries();
543 if (
h ==
nullptr ||
h->GetEntries() <= 0)
continue;
544 leg->AddEntry(
h,
fH.fAnaStepLatex[
static_cast<int>(step)].c_str(),
"l");
545 DrawH1(
h,
kLinear,
kLinear, (h0 ==
nullptr) ?
"hist" :
"hist,same",
fH.fAnaStepColors[
static_cast<int>(step)]);
546 if (h0 ==
nullptr) h0 =
h;
547 min = std::min(
h->GetMinimum(),
min);
548 max = std::max(
h->GetMaximum(),
max);
550 if (
min == 0.)
min = std::min(1e-8,
max * 1e-6);
551 if (h0 !=
nullptr) h0->SetMinimum(
min);
552 if (h0 !=
nullptr) h0->SetMaximum(1.1 *
max);
554 leg->SetFillColor(kWhite);
557 gPad->SetGridx(
true);
558 gPad->SetGridy(
true);
566 TH1D* sbg =
static_cast<TH1D*
>(bg->Clone());
568 sbg->SetMinimum(1e-8);
570 DrawH1({sbg, bg, s}, {
"",
"",
""},
kLinear,
kLog,
false, 0, 0, 0, 0,
"Hist L");
571 s->SetFillColor(kRed);
572 s->SetLineColor(kBlack);
575 bg->SetFillColor(kYellow - 10);
576 bg->SetLineColor(kBlack);
579 sbg->SetFillColor(kBlue);
580 sbg->SetLineColor(kBlack);
581 sbg->SetLineWidth(1);
583 s->SetMarkerStyle(1);
584 bg->SetMarkerStyle(1);
585 sbg->SetMarkerStyle(1);
587 fH.DrawAnaStepOnPad(step);
594 vector<string> latex;
595 for (
int i = 0; i <
fH.fNofBgPairSrc; i++) {
597 fH.H1(
"hMinvBgSource_" +
fH.fBgPairSrcNames[i] +
"_"
598 +
fH.fAnaStepNames[
static_cast<int>(
601 latex.push_back(
fH.fBgPairSrcLatex[i] +
"(" + perc +
"%)");
604 bool drawAnaStep =
true;
605 if (drawAnaStep)
fH.DrawAnaStepOnPad(step);
612 vector<string> latex{
"true match",
"true match (e^{#pm})",
"true match (not e^{#pm})",
"mismatch "};
614 for (
const string subName : {
"trueMatch",
"trueMatchEl",
"trueMatchNotEl",
"mismatch"}) {
615 TH1D*
h =
fH.H1(
"hMinvBgMatch_" + subName, step);
621 fH.DrawAnaStepOnPad(step);
627 for (
const int& pdg : {11, 211, 2212, 321}) {
628 vector<string> subNames{
"mc",
"acc",
"recSts",
"recStsRich",
"recStsRichTrd",
"recStsRichTrdTof"};
629 vector<string> latex{
630 "MC",
"Acc",
"Rec in STS",
"Rec in STS-RICH",
"Rec in STS-RICH-TRD",
"Rec in STS-RICH-TRD-TOF"};
631 vector<string> latexAll(latex.size()), latexPrim(latex.size());
632 string ptcl = (pdg == 11) ?
"hEl" : (pdg == 211) ?
"hPi" : (pdg == 2212) ?
"hProton" :
"hKaon";
634 vector<TH1*> histsAll, histsPrim;
637 for (
const string& subName : subNames) {
638 TH1D* hAll =
fH.H1(ptcl +
"Mom_all_" + subName);
639 hAll->SetMinimum(3e-6);
640 hAll->SetMaximum(50);
642 histsAll.push_back(hAll);
644 TH1D* hPrim =
fH.H1(ptcl +
"Mom_prim_" + subName);
645 hPrim->SetMinimum(3e-6);
646 hPrim->SetMaximum(50);
648 histsPrim.push_back(hPrim);
655 string cName =
"AccRecMom/" + ptcl +
"Mom";
656 fH.fHM.CreateCanvas(cName, cName, 900, 900);
659 fH.fHM.CreateCanvas(cName +
"_prime", cName +
"_prime", 900, 900);
664 for (
const string det : {
"sts",
"rich",
"trd",
"tof"}) {
666 vector<string> latex;
668 for (
const string pm : {
"+",
"-"}) {
669 hVec.push_back(
fH.H1(
"hMomAcc" + pm +
"_" + det, src));
670 latex.push_back(
fH.fSrcLatex[
static_cast<int>(src)] +
" (e" + pm +
")");
673 fH.fHM.CreateCanvas(
"AccRecMom/momDetAcc_" + det,
"AccRecMom/momDetAcc_" + det, 800, 800);
680 const string& zTitle)
682 fH.fHM.CreateCanvas((cName +
"_abs").c_str(), (cName +
"_abs").c_str(), 900, 600);
683 TH2D* habs =
fH.H2Clone(hName);
684 habs->SetStats(
false);
686 habs->SetMinimum(1e-2);
687 habs->GetZaxis()->SetTitle(zTitle.c_str());
688 habs->SetMarkerSize(1.4);
691 fH.fHM.CreateCanvas((cName +
"_perc").c_str(), (cName +
"_perc").c_str(), 900, 600);
692 TH2D* hperc =
fH.H2Clone(hName);
693 hperc->SetStats(
false);
694 for (
int x = 1;
x <= hperc->GetNbinsX();
x++) {
697 for (
int y = 1;
y <= hperc->GetNbinsY();
y++) {
698 nbg += habs->GetBinContent(
x,
y);
700 double sc = 100. / (nbg / scale);
701 for (
int y = 1;
y <= hperc->GetNbinsY();
y++) {
702 double val = sc * hperc->GetBinContent(
x,
y);
703 hperc->SetBinContent(
x,
y, val);
706 hperc->GetZaxis()->SetTitle(
"[%]");
707 hperc->GetYaxis()->SetLabelSize(0.06);
708 hperc->SetMarkerColor(kBlack);
709 hperc->SetMarkerSize(1.4);
712 for (
size_t y = 1;
y <= yLabels.size();
y++) {
713 hperc->GetYaxis()->SetBinLabel(
y, yLabels[
y - 1].c_str());
714 habs->GetYaxis()->SetBinLabel(
y, yLabels[
y - 1].c_str());
723 gStyle->SetPaintTextFormat(
"4.1f");
725 fH.fHM.CreateCanvas(
"bg/nofBgTracks",
"bg/nofBgTracks", 900, 900);
726 TH1D* hbg =
fH.H1Clone(
"hNofBgTracks");
728 hbg->GetYaxis()->SetTitle(
"Tracks/event x10");
730 hbg->SetMarkerSize(2.);
732 fH.fHM.CreateCanvas(
"signal/nofSignalTracks",
"signal/nofSignalTracks", 900, 900);
733 TH1D* hel =
fH.H1(
"hNofSignalTracks");
736 fH.fHM.CreateCanvas(
"purity",
"purity", 900, 900);
737 TH1D* purity =
new TH1D(
"purity",
"Purity;Analysis steps;Purity",
fH.fNofAnaSteps, 0.,
fH.fNofAnaSteps);
738 purity->Divide(
fH.H1(
"hNofBgTracks"),
fH.H1(
"hNofSignalTracks"));
740 purity->SetMarkerSize(1.9);
747 {
"#gamma",
"#pi^{0}",
"#pi^{#pm}",
"p",
"K",
"e^{#pm}_{sec}",
"oth.",
"signal"}, 1000.,
748 "Tracks per event x10^{3}");
750 TCanvas* c =
fH.fHM.CreateCanvas(
"nofTopoPairs",
"nofTopoPairs", 1600, 800);
753 for (
const string p : {
"gamma",
"pi0"}) {
755 TH1D* hTopo =
fH.H1Clone(
"hNofTopoPairs_" + p);
756 hTopo->Scale(1. / hTopo->Integral());
758 hTopo->SetMarkerSize(1.);
764 gStyle->SetPaintTextFormat(
"4.1f");
765 TCanvas* c1 =
fH.fHM.CreateCanvas(
"nofMismatches",
"nofMismatches", 1500, 1500);
767 vector<string> dets{
"all",
"rich",
"trd",
"tof"};
768 for (
size_t i = 0; i < dets.size(); i++) {
770 TH1D*
h =
fH.H1Clone(
"hNofMismatches_" + dets[i]);
772 h->GetYaxis()->SetTitle((
"Mismatch tracks (" + dets[i] +
")/event x10").c_str());
774 h->SetMarkerSize(2.);
778 fH.fHM.CreateCanvas(
"nofGhosts",
"nofGhosts", 900, 900);
788 if (
h->IsA() == TH2D::Class()) {
789 for (
int y = 1;
y <=
h->GetYaxis()->GetNbins();
y++) {
790 h->SetBinContent(step,
y,
h->GetBinContent(step + 2,
y));
793 else if (
h->IsA() == TH1D::Class()) {
794 h->SetBinContent(step,
h->GetBinContent(step + 2));
799 int rangeMax =
fH.fNofAnaSteps;
801 rangeMax = rangeMax - 2;
804 h->GetXaxis()->SetLabelSize(0.06);
806 for (
const auto step :
fH.fAnaSteps) {
808 h->GetXaxis()->SetBinLabel(
x,
fH.fAnaStepLatex[
static_cast<int>(step)].c_str());
816 TCanvas* c =
fH.fHM.CreateCanvas(
"cuts/mvdCutQa",
"cuts/mvd1cut_qa", 1600, 800);
819 for (
const string num : {
"1",
"2"}) {
822 TH1D* h1 =
fH.H1(
"hMvdCutQa_" + num +
"_" +
fH.fSrcNames[0]);
823 h1->GetXaxis()->SetLabelSize(0.06);
824 h1->GetXaxis()->SetBinLabel(1,
"Correct");
825 h1->GetXaxis()->SetBinLabel(2,
"Wrong");
826 gPad->SetLogy(
false);
834 TCanvas* c1 =
fH.fHM.CreateCanvas(
"nofHitsMvdSts",
"nofHitsMvdSts", 1600, 800);
842 fH.fHM.CreateCanvas(
"mvd1",
"mvd1", 900, 900);
846 fH.fHM.CreateCanvas(
"mvd2",
"mvd2", 900, 900);
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.
friend fscal max(fscal x, fscal y)
friend fscal min(fscal x, fscal y)
Generates beam ions for transport simulation.
static Int_t MarkerStyle(Int_t markerIndex)
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 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)
TH2D * DivideH2(TH2 *h1, TH2 *h2, const string &histName, double scale, const string &titleZaxis)
std::string NumberToString(const T &value, int precision=1)