Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2026-04-05 08:10:20

0001 #include <iostream>
0002 #include <filesystem>
0003 #include <string>
0004 
0005 // Set the axis label max number of digits to 3
0006 TGaxis::SetMaxDigits(3);
0007 
0008 template <typename T> T *getObject(const std::string filename, const std::string objname)
0009 {
0010     TFile *file = TFile::Open(filename.c_str(), "READ");
0011     if (!file || file->IsZombie())
0012     {
0013         std::cerr << "Error opening file: " << filename << std::endl;
0014         return nullptr;
0015     }
0016     T *obj = dynamic_cast<T *>(file->Get(objname.c_str()));
0017     if (!obj)
0018     {
0019         std::cerr << "Error getting object: " << objname << " from file: " << filename << std::endl;
0020         file->Close();
0021         return nullptr;
0022     }
0023     obj->SetDirectory(0);
0024     file->Close();
0025     return obj;
0026 }
0027 
0028 void draw1Dhistogram(TH1 *hist,                        //
0029                      bool normalize,                   //
0030                      bool logx,                        //
0031                      bool logy,                        //
0032                      std::string xtitle,               //
0033                      std::string ytitle,               //
0034                      std::vector<std::string> addinfo, //
0035                      std::string plotoption,           //
0036                      std::string filename              //
0037 )
0038 {
0039     if (!hist)
0040     {
0041         std::cerr << "draw1Dhistogram received a null histogram pointer" << std::endl;
0042         return;
0043     }
0044 
0045     if (normalize)
0046     {
0047         const double integral = hist->Integral();
0048         if (integral > 0)
0049         {
0050             hist->Scale(1.0 / integral);
0051         }
0052     }
0053 
0054     TCanvas *c = new TCanvas("c", "c", 800, 700);
0055     // gPad->SetRightMargin(0.11);
0056     gPad->SetLeftMargin(0.18);
0057     gPad->SetTopMargin(0.07);
0058     c->cd();
0059     c->SetLogx(logx);
0060     c->SetLogy(logy);
0061     hist->GetXaxis()->SetTitle(xtitle.c_str());
0062     hist->GetYaxis()->SetTitle(ytitle.c_str());
0063     hist->GetYaxis()->SetTitleOffset(1.6);
0064     hist->GetYaxis()->SetRangeUser((logy) ? hist->GetMinimum(0) * 0.5 : 0, (logy) ? hist->GetMaximum() * 25 : hist->GetMaximum() * 1.5);
0065     // if drawoption contains "PE"
0066     if (plotoption.find("PE") != std::string::npos)
0067     {
0068         hist->SetMarkerStyle(20);
0069         hist->SetMarkerSize(1.0);
0070         hist->SetLineWidth(2);
0071     }
0072     hist->Draw(plotoption.c_str());
0073     // Add additional information to the histogram title using TLatex
0074     TLatex *latex = new TLatex();
0075     latex->SetTextSize(0.04);
0076     latex->SetTextAlign(12);
0077     latex->SetNDC();
0078     for (size_t i = 0; i < addinfo.size(); ++i)
0079     {
0080         latex->DrawLatex(gPad->GetLeftMargin() + 0.04, 0.88 - i * 0.05, addinfo[i].c_str());
0081     }
0082     c->SaveAs(Form("%s.png", filename.c_str()));
0083     c->SaveAs(Form("%s.pdf", filename.c_str()));
0084     delete c;
0085 }
0086 
0087 void draw2Dhistogram(TH2 *hist, bool logz, std::string xtitle, std::string ytitle, std::vector<std::string> addinfo, std::string drawoption, std::string filename)
0088 {
0089     TCanvas *c = new TCanvas("c", "c", 800, 700);
0090     gPad->SetRightMargin(0.15);
0091     c->cd();
0092     c->SetLogz(logz);
0093     hist->GetXaxis()->SetTitle(xtitle.c_str());
0094     hist->GetYaxis()->SetTitle(ytitle.c_str());
0095     hist->Draw(drawoption.c_str());
0096     // Add additional information to the histogram title using TLatex
0097     TLatex *latex = new TLatex();
0098     latex->SetTextSize(0.04);
0099     latex->SetTextAlign(12);
0100     latex->SetNDC();
0101     for (size_t i = 0; i < addinfo.size(); ++i)
0102     {
0103         latex->DrawLatex(0.2, 0.88 - i * 0.05, addinfo[i].c_str());
0104     }
0105     c->SaveAs(Form("%s.png", filename.c_str()));
0106     c->SaveAs(Form("%s.pdf", filename.c_str()));
0107     delete c;
0108 }
0109 
0110 void cascade_feeddown()
0111 {
0112     const std::string base_dir = "/sphenix/tg/tg01/hf/hjheng/HF-analysis/simulation/Pythia_ppMinBias/"; // <-- change here to your directory
0113 
0114     std::vector<TH1 *> v_h_lambda_pt_all;
0115     std::vector<TH1 *> v_h_lambda_pt_from_xi_all;
0116     std::vector<TH1 *> v_h_lambda_pt_from_xi_charged;
0117     std::vector<TH1 *> v_h_lambda_pt_from_xi_neutral;
0118     std::vector<TH1 *> v_h_lambda_rapidity_all;
0119     std::vector<TH1 *> v_h_lambda_rapidity_from_xi_all;
0120     std::vector<TH1 *> v_h_lambda_rapidity_from_xi_charged;
0121     std::vector<TH1 *> v_h_lambda_rapidity_from_xi_neutral;
0122     std::vector<TH1 *> v_h_lambda_eta_all;
0123     std::vector<TH1 *> v_h_lambda_eta_from_xi_all;
0124     std::vector<TH1 *> v_h_lambda_eta_from_xi_charged;
0125     std::vector<TH1 *> v_h_lambda_eta_from_xi_neutral;
0126     std::vector<TH1 *> v_h_lambda_phi_all;
0127     std::vector<TH1 *> v_h_lambda_phi_from_xi_all;
0128     std::vector<TH1 *> v_h_lambda_phi_from_xi_charged;
0129     std::vector<TH1 *> v_h_lambda_phi_from_xi_neutral;
0130     std::vector<TH1 *> v_h_event_counter;
0131     std::vector<TH2 *> v_h_phi_decaylengthcut;
0132     std::vector<TH1 *> v_h_lambda_transverse_decay_length_cm;
0133 
0134     for (const auto &entry : std::filesystem::directory_iterator(base_dir))
0135     {
0136         const std::string filename = entry.path().filename().string();
0137         if (entry.is_regular_file() && filename.rfind("ppMinBias_Xi_fraction_", 0) == 0 && entry.path().extension() == ".root")
0138         {
0139             std::cout << "Found file: " << entry.path().filename() << std::endl;
0140             TH1D *h_lambda_pt_all = getObject<TH1D>(entry.path().string(), "h_lambda_pt_all");
0141             TH1D *h_lambda_pt_from_xi_all = getObject<TH1D>(entry.path().string(), "h_lambda_pt_from_xi_all");
0142             TH1D *h_lambda_pt_from_xi_charged = getObject<TH1D>(entry.path().string(), "h_lambda_pt_from_xi_charged");
0143             TH1D *h_lambda_pt_from_xi_neutral = getObject<TH1D>(entry.path().string(), "h_lambda_pt_from_xi_neutral");
0144             TH1D *h_lambda_rapidity_all = getObject<TH1D>(entry.path().string(), "h_lambda_rapidity_all");
0145             TH1D *h_lambda_rapidity_from_xi_all = getObject<TH1D>(entry.path().string(), "h_lambda_rapidity_from_xi_all");
0146             TH1D *h_lambda_rapidity_from_xi_charged = getObject<TH1D>(entry.path().string(), "h_lambda_rapidity_from_xi_charged");
0147             TH1D *h_lambda_rapidity_from_xi_neutral = getObject<TH1D>(entry.path().string(), "h_lambda_rapidity_from_xi_neutral");
0148             TH1D *h_lambda_eta_all = getObject<TH1D>(entry.path().string(), "h_lambda_eta_all");
0149             TH1D *h_lambda_eta_from_xi_all = getObject<TH1D>(entry.path().string(), "h_lambda_eta_from_xi_all");
0150             TH1D *h_lambda_eta_from_xi_charged = getObject<TH1D>(entry.path().string(), "h_lambda_eta_from_xi_charged");
0151             TH1D *h_lambda_eta_from_xi_neutral = getObject<TH1D>(entry.path().string(), "h_lambda_eta_from_xi_neutral");
0152             TH1D *h_lambda_phi_all = getObject<TH1D>(entry.path().string(), "h_lambda_phi_all");
0153             TH1D *h_lambda_phi_from_xi_all = getObject<TH1D>(entry.path().string(), "h_lambda_phi_from_xi_all");
0154             TH1D *h_lambda_phi_from_xi_charged = getObject<TH1D>(entry.path().string(), "h_lambda_phi_from_xi_charged");
0155             TH1D *h_lambda_phi_from_xi_neutral = getObject<TH1D>(entry.path().string(), "h_lambda_phi_from_xi_neutral");
0156             TH1D *h_event_counter = getObject<TH1D>(entry.path().string(), "h_event_counter");
0157             TH2D *h_phi_decaylengthcut = getObject<TH2D>(entry.path().string(), "h_phi_decaylengthcut");
0158             TH1D *h_lambda_transverse_decay_length_cm = getObject<TH1D>(entry.path().string(), "h_lambda_transverse_decay_length_cm");
0159 
0160             if (!h_lambda_pt_all || !h_lambda_pt_from_xi_all || !h_lambda_pt_from_xi_charged || !h_lambda_pt_from_xi_neutral ||
0161                 !h_lambda_rapidity_all || !h_lambda_rapidity_from_xi_all || !h_lambda_rapidity_from_xi_charged || !h_lambda_rapidity_from_xi_neutral ||
0162                 !h_lambda_eta_all || !h_lambda_eta_from_xi_all || !h_lambda_eta_from_xi_charged || !h_lambda_eta_from_xi_neutral ||
0163                 !h_lambda_phi_all || !h_lambda_phi_from_xi_all || !h_lambda_phi_from_xi_charged || !h_lambda_phi_from_xi_neutral ||
0164                 !h_event_counter || !h_phi_decaylengthcut || !h_lambda_transverse_decay_length_cm)
0165             {
0166                 std::cerr << "Skipping file with missing histograms: " << filename << std::endl;
0167                 delete h_lambda_pt_all;
0168                 delete h_lambda_pt_from_xi_all;
0169                 delete h_lambda_pt_from_xi_charged;
0170                 delete h_lambda_pt_from_xi_neutral;
0171                 delete h_lambda_rapidity_all;
0172                 delete h_lambda_rapidity_from_xi_all;
0173                 delete h_lambda_rapidity_from_xi_charged;
0174                 delete h_lambda_rapidity_from_xi_neutral;
0175                 delete h_lambda_eta_all;
0176                 delete h_lambda_eta_from_xi_all;
0177                 delete h_lambda_eta_from_xi_charged;
0178                 delete h_lambda_eta_from_xi_neutral;
0179                 delete h_lambda_phi_all;
0180                 delete h_lambda_phi_from_xi_all;
0181                 delete h_lambda_phi_from_xi_charged;
0182                 delete h_lambda_phi_from_xi_neutral;
0183                 delete h_event_counter;
0184                 delete h_phi_decaylengthcut;
0185                 delete h_lambda_transverse_decay_length_cm;
0186                 continue;
0187             }
0188 
0189             v_h_lambda_pt_all.push_back(h_lambda_pt_all);
0190             v_h_lambda_pt_from_xi_all.push_back(h_lambda_pt_from_xi_all);
0191             v_h_lambda_pt_from_xi_charged.push_back(h_lambda_pt_from_xi_charged);
0192             v_h_lambda_pt_from_xi_neutral.push_back(h_lambda_pt_from_xi_neutral);
0193             v_h_lambda_rapidity_all.push_back(h_lambda_rapidity_all);
0194             v_h_lambda_rapidity_from_xi_all.push_back(h_lambda_rapidity_from_xi_all);
0195             v_h_lambda_rapidity_from_xi_charged.push_back(h_lambda_rapidity_from_xi_charged);
0196             v_h_lambda_rapidity_from_xi_neutral.push_back(h_lambda_rapidity_from_xi_neutral);
0197             v_h_lambda_eta_all.push_back(h_lambda_eta_all);
0198             v_h_lambda_eta_from_xi_all.push_back(h_lambda_eta_from_xi_all);
0199             v_h_lambda_eta_from_xi_charged.push_back(h_lambda_eta_from_xi_charged);
0200             v_h_lambda_eta_from_xi_neutral.push_back(h_lambda_eta_from_xi_neutral);
0201             v_h_lambda_phi_all.push_back(h_lambda_phi_all);
0202             v_h_lambda_phi_from_xi_all.push_back(h_lambda_phi_from_xi_all);
0203             v_h_lambda_phi_from_xi_charged.push_back(h_lambda_phi_from_xi_charged);
0204             v_h_lambda_phi_from_xi_neutral.push_back(h_lambda_phi_from_xi_neutral);
0205             v_h_event_counter.push_back(h_event_counter);
0206             v_h_phi_decaylengthcut.push_back(h_phi_decaylengthcut);
0207             v_h_lambda_transverse_decay_length_cm.push_back(h_lambda_transverse_decay_length_cm);
0208         }
0209     }
0210 
0211     if (v_h_lambda_pt_all.empty())
0212     {
0213         std::cerr << "No valid ppMinBias_Xi_fraction_*.root inputs found in " << base_dir << std::endl;
0214         return;
0215     }
0216 
0217     // create histograms that are the sums of the corresponding histograms from all input files
0218     TH1D *h_lambda_pt_all = (TH1D *)v_h_lambda_pt_all[0]->Clone("h_lambda_pt_all");
0219     TH1D *h_lambda_pt_from_xi_all = (TH1D *)v_h_lambda_pt_from_xi_all[0]->Clone("h_lambda_pt_from_xi_all");
0220     TH1D *h_lambda_pt_from_xi_charged = (TH1D *)v_h_lambda_pt_from_xi_charged[0]->Clone("h_lambda_pt_from_xi_charged");
0221     TH1D *h_lambda_pt_from_xi_neutral = (TH1D *)v_h_lambda_pt_from_xi_neutral[0]->Clone("h_lambda_pt_from_xi_neutral");
0222     TH1D *h_lambda_rapidity_all = (TH1D *)v_h_lambda_rapidity_all[0]->Clone("h_lambda_rapidity_all");
0223     TH1D *h_lambda_rapidity_from_xi_all = (TH1D *)v_h_lambda_rapidity_from_xi_all[0]->Clone("h_lambda_rapidity_from_xi_all");
0224     TH1D *h_lambda_rapidity_from_xi_charged = (TH1D *)v_h_lambda_rapidity_from_xi_charged[0]->Clone("h_lambda_rapidity_from_xi_charged");
0225     TH1D *h_lambda_rapidity_from_xi_neutral = (TH1D *)v_h_lambda_rapidity_from_xi_neutral[0]->Clone("h_lambda_rapidity_from_xi_neutral");
0226     TH1D *h_lambda_eta_all = (TH1D *)v_h_lambda_eta_all[0]->Clone("h_lambda_eta_all");
0227     TH1D *h_lambda_eta_from_xi_all = (TH1D *)v_h_lambda_eta_from_xi_all[0]->Clone("h_lambda_eta_from_xi_all");
0228     TH1D *h_lambda_eta_from_xi_charged = (TH1D *)v_h_lambda_eta_from_xi_charged[0]->Clone("h_lambda_eta_from_xi_charged");
0229     TH1D *h_lambda_eta_from_xi_neutral = (TH1D *)v_h_lambda_eta_from_xi_neutral[0]->Clone("h_lambda_eta_from_xi_neutral");
0230     TH1D *h_lambda_phi_all = (TH1D *)v_h_lambda_phi_all[0]->Clone("h_lambda_phi_all");
0231     TH1D *h_lambda_phi_from_xi_all = (TH1D *)v_h_lambda_phi_from_xi_all[0]->Clone("h_lambda_phi_from_xi_all");
0232     TH1D *h_lambda_phi_from_xi_charged = (TH1D *)v_h_lambda_phi_from_xi_charged[0]->Clone("h_lambda_phi_from_xi_charged");
0233     TH1D *h_lambda_phi_from_xi_neutral = (TH1D *)v_h_lambda_phi_from_xi_neutral[0]->Clone("h_lambda_phi_from_xi_neutral");
0234     TH1D *h_event_counter = (TH1D *)v_h_event_counter[0]->Clone("h_event_counter");
0235     TH2D *h_phi_decaylengthcut = (TH2D *)v_h_phi_decaylengthcut[0]->Clone("h_phi_decaylengthcut");
0236     TH1D *h_lambda_transverse_decay_length_cm = (TH1D *)v_h_lambda_transverse_decay_length_cm[0]->Clone("h_lambda_transverse_decay_length_cm");
0237 
0238     h_lambda_pt_all->Reset();
0239     h_lambda_pt_from_xi_all->Reset();
0240     h_lambda_pt_from_xi_charged->Reset();
0241     h_lambda_pt_from_xi_neutral->Reset();
0242     h_lambda_rapidity_all->Reset();
0243     h_lambda_rapidity_from_xi_all->Reset();
0244     h_lambda_rapidity_from_xi_charged->Reset();
0245     h_lambda_rapidity_from_xi_neutral->Reset();
0246     h_lambda_eta_all->Reset();
0247     h_lambda_eta_from_xi_all->Reset();
0248     h_lambda_eta_from_xi_charged->Reset();
0249     h_lambda_eta_from_xi_neutral->Reset();
0250     h_lambda_phi_all->Reset();
0251     h_lambda_phi_from_xi_all->Reset();
0252     h_lambda_phi_from_xi_charged->Reset();
0253     h_lambda_phi_from_xi_neutral->Reset();
0254     h_event_counter->Reset();
0255     h_phi_decaylengthcut->Reset();
0256     h_lambda_transverse_decay_length_cm->Reset();
0257 
0258     for (size_t i = 0; i < v_h_lambda_pt_all.size(); ++i)
0259     {
0260         h_lambda_pt_all->Add(v_h_lambda_pt_all[i]);
0261         h_lambda_pt_from_xi_all->Add(v_h_lambda_pt_from_xi_all[i]);
0262         h_lambda_pt_from_xi_charged->Add(v_h_lambda_pt_from_xi_charged[i]);
0263         h_lambda_pt_from_xi_neutral->Add(v_h_lambda_pt_from_xi_neutral[i]);
0264         h_lambda_rapidity_all->Add(v_h_lambda_rapidity_all[i]);
0265         h_lambda_rapidity_from_xi_all->Add(v_h_lambda_rapidity_from_xi_all[i]);
0266         h_lambda_rapidity_from_xi_charged->Add(v_h_lambda_rapidity_from_xi_charged[i]);
0267         h_lambda_rapidity_from_xi_neutral->Add(v_h_lambda_rapidity_from_xi_neutral[i]);
0268         h_lambda_eta_all->Add(v_h_lambda_eta_all[i]);
0269         h_lambda_eta_from_xi_all->Add(v_h_lambda_eta_from_xi_all[i]);
0270         h_lambda_eta_from_xi_charged->Add(v_h_lambda_eta_from_xi_charged[i]);
0271         h_lambda_eta_from_xi_neutral->Add(v_h_lambda_eta_from_xi_neutral[i]);
0272         h_lambda_phi_all->Add(v_h_lambda_phi_all[i]);
0273         h_lambda_phi_from_xi_all->Add(v_h_lambda_phi_from_xi_all[i]);
0274         h_lambda_phi_from_xi_charged->Add(v_h_lambda_phi_from_xi_charged[i]);
0275         h_lambda_phi_from_xi_neutral->Add(v_h_lambda_phi_from_xi_neutral[i]);
0276         h_event_counter->Add(v_h_event_counter[i]);
0277         h_phi_decaylengthcut->Add(v_h_phi_decaylengthcut[i]);
0278         h_lambda_transverse_decay_length_cm->Add(v_h_lambda_transverse_decay_length_cm[i]);
0279     }
0280 
0281     TH1D *h_feeddown_frac_xi_all = (TH1D *)h_lambda_pt_from_xi_all->Clone("h_feeddown_frac_xi_all");
0282     h_feeddown_frac_xi_all->Divide(h_lambda_pt_from_xi_all, h_lambda_pt_all, 1.0, 1.0, "B");
0283     h_feeddown_frac_xi_all->SetTitle(";#Lambda^{0}(+c.c) p_{T} [GeV];f_{#Xi feeddown}");
0284 
0285     TH1D *h_feeddown_frac_xi_rapidity_all = (TH1D *)h_lambda_rapidity_from_xi_all->Clone("h_feeddown_frac_xi_rapidity_all");
0286     h_feeddown_frac_xi_rapidity_all->Divide(h_lambda_rapidity_from_xi_all, h_lambda_rapidity_all, 1.0, 1.0, "B");
0287     h_feeddown_frac_xi_rapidity_all->SetTitle(";#Lambda^{0}(+c.c) rapidity;f_{#Xi feeddown}");
0288 
0289     TH1D *h_feeddown_frac_xi_eta_all = (TH1D *)h_lambda_eta_from_xi_all->Clone("h_feeddown_frac_xi_eta_all");
0290     h_feeddown_frac_xi_eta_all->Divide(h_lambda_eta_from_xi_all, h_lambda_eta_all, 1.0, 1.0, "B");
0291     h_feeddown_frac_xi_eta_all->SetTitle(";#Lambda^{0}(+c.c) #eta;f_{#Xi feeddown}");
0292 
0293     TH1D *h_feeddown_frac_xi_phi_all = (TH1D *)h_lambda_phi_from_xi_all->Clone("h_feeddown_frac_xi_phi_all");
0294     h_feeddown_frac_xi_phi_all->Divide(h_lambda_phi_from_xi_all, h_lambda_phi_all, 1.0, 1.0, "B");
0295     h_feeddown_frac_xi_phi_all->SetTitle(";#Lambda^{0}(+c.c) #phi;f_{#Xi feeddown}");
0296 
0297     std::string plotdir = base_dir + "/cascade_feeddown/figure/"; // <-- change here if you want to save plots in a different directory
0298     system(("mkdir -p " + plotdir).c_str());
0299     std::string cutinfo = "#Lambda^{0} |#eta| < 1.3; #phi-dependent L_{xy} cut";
0300     draw1Dhistogram(h_feeddown_frac_xi_all, false, false, false, "#Lambda^{0}(+c.c) p_{T} [GeV]", "f_{#Xi feeddown}=N_{#Lambda^{0}(+c.c)}^{#Xi feedown}/N_{#Lambda^{0}(+c.c)}^{Inclusive}", {"PYTHIA8 p+p minimum bias (w. Detroit tune)", cutinfo}, "PE1", plotdir + "feeddown_fraction_xi_all");
0301     draw1Dhistogram(h_feeddown_frac_xi_rapidity_all, false, false, false, "#Lambda^{0}(+c.c) rapidity", "f_{#Xi feeddown}=N_{#Lambda^{0}(+c.c)}^{#Xi feedown}/N_{#Lambda^{0}(+c.c)}^{Inclusive}", {"PYTHIA8 p+p minimum bias (w. Detroit tune)", cutinfo}, "PE1", plotdir + "feeddown_fraction_xi_rapidity_all");
0302     draw1Dhistogram(h_feeddown_frac_xi_eta_all, false, false, false, "#Lambda^{0}(+c.c) #eta", "f_{#Xi feeddown}=N_{#Lambda^{0}(+c.c)}^{#Xi feedown}/N_{#Lambda^{0}(+c.c)}^{Inclusive}", {"PYTHIA8 p+p minimum bias (w. Detroit tune)", cutinfo}, "PE1", plotdir + "feeddown_fraction_xi_eta_all");
0303     draw1Dhistogram(h_feeddown_frac_xi_phi_all, false, false, false, "#Lambda^{0}(+c.c) #phi", "f_{#Xi feeddown}=N_{#Lambda^{0}(+c.c)}^{#Xi feedown}/N_{#Lambda^{0}(+c.c)}^{Inclusive}", {"PYTHIA8 p+p minimum bias (w. Detroit tune)", cutinfo}, "PE1", plotdir + "feeddown_fraction_xi_phi_all");
0304 
0305     TFile *fout = new TFile(Form("%s/cascade_feeddown/Cascade_feeddown_fraction.root", base_dir.c_str()), "RECREATE"); // <-- change here if you want to save the output file in a different directory or with a different name
0306     h_feeddown_frac_xi_all->Write();
0307     h_feeddown_frac_xi_rapidity_all->Write();
0308     h_feeddown_frac_xi_eta_all->Write();
0309     h_feeddown_frac_xi_phi_all->Write();
0310     fout->Close();
0311 
0312     const double n_pythia_events = h_event_counter->Integral();
0313     if (n_pythia_events <= 0)
0314     {
0315         std::cerr << "No counted PYTHIA events found." << std::endl;
0316         return;
0317     }
0318 
0319     h_lambda_pt_all->Scale(1.0 / n_pythia_events);
0320     h_lambda_pt_from_xi_all->Scale(1.0 / n_pythia_events);
0321     h_lambda_pt_from_xi_charged->Scale(1.0 / n_pythia_events);
0322     h_lambda_pt_from_xi_neutral->Scale(1.0 / n_pythia_events);
0323     h_lambda_rapidity_all->Scale(1.0 / n_pythia_events);
0324     h_lambda_rapidity_from_xi_all->Scale(1.0 / n_pythia_events);
0325     h_lambda_rapidity_from_xi_charged->Scale(1.0 / n_pythia_events);
0326     h_lambda_rapidity_from_xi_neutral->Scale(1.0 / n_pythia_events);
0327     h_lambda_eta_all->Scale(1.0 / n_pythia_events);
0328     h_lambda_eta_from_xi_all->Scale(1.0 / n_pythia_events);
0329     h_lambda_eta_from_xi_charged->Scale(1.0 / n_pythia_events);
0330     h_lambda_eta_from_xi_neutral->Scale(1.0 / n_pythia_events);
0331     h_lambda_phi_all->Scale(1.0 / n_pythia_events);
0332     h_lambda_phi_from_xi_all->Scale(1.0 / n_pythia_events);
0333     h_lambda_phi_from_xi_charged->Scale(1.0 / n_pythia_events);
0334     h_lambda_phi_from_xi_neutral->Scale(1.0 / n_pythia_events);
0335     h_lambda_transverse_decay_length_cm->Scale(1.0 / n_pythia_events);
0336 
0337     draw1Dhistogram(h_lambda_pt_all, false, false, true, "#Lambda^{0}(+c.c) p_{T} [GeV]", "Normalized entries", {"Prompt + non-prompt (+c.c)", cutinfo, "(Normalized by N_{PYTHIA events})"}, "hist e1", plotdir + "lambda_pt_all");
0338     draw1Dhistogram(h_lambda_pt_from_xi_all, false, false, true, "#Lambda^{0}(+c.c) p_{T} [GeV]", "Normalized entries", {"From #Xi^{-}+#Xi^{0} (+c.c)", cutinfo, "(Normalized by N_{PYTHIA events})"}, "hist e1", plotdir + "lambda_pt_from_xi_all");
0339     draw1Dhistogram(h_lambda_pt_from_xi_charged, false, false, true, "#Lambda^{0}(+c.c) p_{T} [GeV]", "Normalized entries", {"From #Xi^{-} (+c.c)", cutinfo, "(Normalized by N_{PYTHIA events})"}, "hist e1", plotdir + "lambda_pt_from_xi_charged");
0340     draw1Dhistogram(h_lambda_pt_from_xi_neutral, false, false, true, "#Lambda^{0}(+c.c) p_{T} [GeV]", "Normalized entries", {"From #Xi^{0} (+c.c)", cutinfo, "(Normalized by N_{PYTHIA events})"}, "hist e1", plotdir + "lambda_pt_from_xi_neutral");
0341     draw1Dhistogram(h_lambda_rapidity_all, false, false, false, "#Lambda^{0}(+c.c) rapidity", "Normalized entries", {"Prompt + non-prompt (+c.c)", cutinfo, "(Normalized by N_{PYTHIA events})"}, "hist e1", plotdir + "lambda_rapidity_all");
0342     draw1Dhistogram(h_lambda_rapidity_from_xi_all, false, false, false, "#Lambda^{0}(+c.c) rapidity", "Normalized entries", {"From #Xi^{-}+#Xi^{0} (+c.c)", cutinfo, "(Normalized by N_{PYTHIA events})"}, "hist e1", plotdir + "lambda_rapidity_from_xi_all");
0343     draw1Dhistogram(h_lambda_rapidity_from_xi_charged, false, false, false, "#Lambda^{0}(+c.c) rapidity", "Normalized entries", {"From #Xi^{-} (+c.c)", cutinfo, "(Normalized by N_{PYTHIA events})"}, "hist e1", plotdir + "lambda_rapidity_from_xi_charged");
0344     draw1Dhistogram(h_lambda_rapidity_from_xi_neutral, false, false, false, "#Lambda^{0}(+c.c) rapidity", "Normalized entries", {"From #Xi^{0} (+c.c)", cutinfo, "(Normalized by N_{PYTHIA events})"}, "hist e1", plotdir + "lambda_rapidity_from_xi_neutral");
0345     draw1Dhistogram(h_lambda_eta_all, false, false, false, "#Lambda^{0}(+c.c) #eta", "Normalized entries", {"Prompt + non-prompt (+c.c)", cutinfo, "(Normalized by N_{PYTHIA events})"}, "hist e1", plotdir + "lambda_eta_all");
0346     draw1Dhistogram(h_lambda_eta_from_xi_all, false, false, false, "#Lambda^{0}(+c.c) #eta", "Normalized entries", {"From #Xi^{-}+#Xi^{0} (+c.c)", cutinfo, "(Normalized by N_{PYTHIA events})"}, "hist e1", plotdir + "lambda_eta_from_xi_all");
0347     draw1Dhistogram(h_lambda_eta_from_xi_charged, false, false, false, "#Lambda^{0}(+c.c) #eta", "Normalized entries", {"From #Xi^{-} (+c.c)", cutinfo, "(Normalized by N_{PYTHIA events})"}, "hist e1", plotdir + "lambda_eta_from_xi_charged");
0348     draw1Dhistogram(h_lambda_eta_from_xi_neutral, false, false, false, "#Lambda^{0}(+c.c) #eta", "Normalized entries", {"From #Xi^{0} (+c.c)", cutinfo, "(Normalized by N_{PYTHIA events})"}, "hist e1", plotdir + "lambda_eta_from_xi_neutral");
0349     draw1Dhistogram(h_lambda_phi_all, false, false, false, "#Lambda^{0}(+c.c) #phi [rad]", "Normalized entries", {"Prompt + non-prompt (+c.c)", cutinfo, "(Normalized by N_{PYTHIA events})"}, "hist e1", plotdir + "lambda_phi_all");
0350     draw1Dhistogram(h_lambda_phi_from_xi_all, false, false, false, "#Lambda^{0}(+c.c) #phi [rad]", "Normalized entries", {"From #Xi^{-}+#Xi^{0} (+c.c)", cutinfo, "(Normalized by N_{PYTHIA events})"}, "hist e1", plotdir + "lambda_phi_from_xi_all");
0351     draw1Dhistogram(h_lambda_phi_from_xi_charged, false, false, false, "#Lambda^{0}(+c.c) #phi [rad]", "Normalized entries", {"From #Xi^{-} (+c.c)", cutinfo, "(Normalized by N_{PYTHIA events})"}, "hist e1", plotdir + "lambda_phi_from_xi_charged");
0352     draw1Dhistogram(h_lambda_phi_from_xi_neutral, false, false, false, "#Lambda^{0}(+c.c) #phi [rad]", "Normalized entries", {"From #Xi^{0} (+c.c)", cutinfo, "(Normalized by N_{PYTHIA events})"}, "hist e1", plotdir + "lambda_phi_from_xi_neutral");
0353     draw2Dhistogram(h_phi_decaylengthcut, false, "#phi [rad]", "#Lambda^{0}(+c.c) transverse decay length cut [cm]", {}, "colz", plotdir + "phi_decaylengthcut");
0354     draw1Dhistogram(h_lambda_transverse_decay_length_cm, false, false, false, "#Lambda^{0}(+c.c) transverse decay length [cm]", "Normalized entries", {"Prompt + non-prompt (+c.c)", "(Normalized by N_{PYTHIA events})"}, "hist e1", plotdir + "lambda_transverse_decay_length_cm");
0355 }