Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2026-04-07 08:09:54

0001 #include "HerwigQAPlottingConfig.h"
0002 
0003 HerwigQAPlottingConfig::HerwigQAPlottingConfig(float herwig_xs, float pythia_xs)
0004 : HW_XS(herwig_xs)
0005 , PY_XS(pythia_xs)
0006 {
0007     //This just sets up everything to do the little repetative tasks that go into plotting 
0008 }
0009 void HerwigQAPlottingConfig::ExtractType(TFile* input_file)
0010 {
0011     std::string file_name = input_file->GetName();
0012     if(file_name.find("erwig") != std::string::npos) this->herwig=true;
0013     else if (file_name.find("ythia") != std::string::npos) this->pythia=true;
0014     TDirectory* jets_dir = (TDirectory*)input_file->GetDirectory("Jets");
0015     TDirectory* photon_dir = (TDirectory*)input_file->GetDirectory("Photons");
0016     if(jets_dir) this->jet=true;
0017     if(photon_dir) this->photon=true;
0018     return;
0019 }
0020 
0021 void HerwigQAPlottingConfig::DumpHistos(std::string output_file, std::vector<TCanvas*>* Canvi)
0022 {
0023     //take all relevant canvases passed in the vector and dump them into the output file
0024     Canvi->at(0)->Print(std::format("{}[", output_file).c_str());
0025     for(int i=0; i<(int) Canvi->size()-1; i++)
0026     {
0027         std::cout<<"Still have " <<Canvi->size() - i <<" to print" <<std::endl;
0028         Canvi->at(i)->Print( output_file.c_str());
0029     }
0030     Canvi->at(0)->Print(std::format("{}]", output_file).c_str());
0031     
0032     return;
0033 }
0034 
0035 std::vector<TPad*>* HerwigQAPlottingConfig::AddPads(TCanvas* c1) 
0036 {
0037     c1->cd();
0038     TPad* p1=new TPad("p1", "p1", 0, 0, 1, 0.33);
0039     TPad* p2=new TPad("p2", "p2", 0, 0.35, 1, 1);
0040     c1->cd();
0041     p1->Draw();
0042     p2->Draw();
0043     std::vector<TPad*>* Pads =new std::vector<TPad*>{p1, p2};
0044     return Pads;
0045 }
0046 std::vector<TPad*>* HerwigQAPlottingConfig::Canvas2DDivide(TCanvas* c1)
0047 {
0048     c1->cd();
0049     TPad* p1=new TPad("p1", "p1", 0, 0, 0.48, 0.30);
0050     TPad* p2=new TPad("p2", "p2", 0, 0.33, 0.48, 0.63);
0051     TPad* p3=new TPad("p3", "p3", 0, 0.66, 0.48, 1);
0052     TPad* p4=new TPad("p4", "p4", 0.52, 0, 1, 0.30);
0053     TPad* p5=new TPad("p5", "p5", 0.52, 0.33, 1, 0.63);
0054     TPad* p6=new TPad("p6", "p6", 0.52, 0.66, 1, 1);
0055     c1->cd();
0056     p1->Draw();
0057     p2->Draw();
0058     p3->Draw();
0059     p4->Draw();
0060     p5->Draw();
0061     p6->Draw();
0062     std::vector<TPad*>* Pads =new std::vector<TPad*>{p1, p4, p2, p5, p3, p6};
0063     return Pads;
0064 }
0065 
0066 void HerwigQAPlottingConfig::SetLegend(TLegend* l1) 
0067 {
0068     l1->SetFillColor(0);
0069     l1->SetFillStyle(0);
0070     l1->SetBorderSize(0);
0071     l1->SetTextSize(0.03f);
0072     return;
0073 }
0074 
0075 void HerwigQAPlottingConfig::SetsPhenixHeaderLegend(TLegend* l1, std::string triggerinfo, std::string jettype/*="null"*/) 
0076 {
0077     SetLegend(l1);
0078     l1->AddEntry("", "#bf{#it{sPHENIX}} Internal", "");
0079     l1->AddEntry("", "Herwig HepMC Production QA", "");
0080     l1->AddEntry("", "Herwig7.2", "");
0081     l1->AddEntry("", "Reference: fully produced Pythia8", "");
0082     if (triggerinfo.find("none")== std::string::npos) 
0083         l1->AddEntry("", Form("%s, k_{T}^{min} [#hat{p}_{T}] = %.3g GeV", triggerinfo.c_str(), lookupTrigger(triggerinfo)), "");
0084     l1->SetTextSize(0.05f);
0085     if(jettype.find("null") != std::string::npos)  l1->AddEntry("", jettype.c_str(), "");
0086     return;
0087 }
0088 void HerwigQAPlottingConfig::SetsPhenixHeaderLegend(TLegend* l1, bool isHerwig, std::string jettype/*="null"*/) 
0089 {
0090     SetLegend(l1);
0091     l1->AddEntry("", "#bf{#it{sPHENIX}} Internal", "");
0092     l1->AddEntry("", "Herwig HepMC Production QA", "");
0093     if(isHerwig) l1->AddEntry("", "Herwig7.2", "");
0094     else l1->AddEntry("", "Fully produced Pythia8", "");
0095 //  if (triggerinfo.find("none")== std::string::npos) 
0096 //      l1->AddEntry("", Form("%s, k_{T}^{min} [#hat{p}_{T}] = %.3g GeV", triggerinfo.c_str(), lookupTrigger(triggerinfo)), "");
0097     if(jettype.find("null") == std::string::npos)  l1->AddEntry("", jettype.c_str(), "");
0098     l1->SetTextSize(0.05f);
0099     return;
0100 }
0101 
0102 float HerwigQAPlottingConfig::lookupTrigger(std::string trigger)
0103 {
0104     float trigger_val = 0.;
0105     if(trigger.find("MB") != std::string::npos) trigger_val=0.;
0106     else if(trigger.find("PhotonJet5") != std::string::npos) trigger_val = 5.;
0107     else if(trigger.find("PhotonJet10") != std::string::npos) trigger_val = 10.;
0108     else if(trigger.find("PhotonJet20") != std::string::npos) trigger_val = 20.;
0109     else if(trigger.find("Jet5") != std::string::npos) trigger_val=0.;
0110     else if(trigger.find("Jet15") != std::string::npos) trigger_val=7.;
0111     else if(trigger.find("Jet20") != std::string::npos) trigger_val=10.;
0112     else if(trigger.find("Jet30") != std::string::npos) trigger_val=17.5;
0113     else if(trigger.find("Jet40") != std::string::npos) trigger_val=20.;
0114     else if(trigger.find("Jet50") != std::string::npos) trigger_val=29.;
0115     return trigger_val;
0116 }
0117 TH1F* HerwigQAPlottingConfig::GetRatioPlot(TH1F* signal, TH1F* refernce)
0118 {
0119     TH1F* ratio_clone = (TH1F*) signal->Clone();
0120     ratio_clone->Divide(refernce);
0121     ratio_clone->SetTitle("Hewig / Pythia");
0122     return ratio_clone;
0123 }
0124 TH1I* HerwigQAPlottingConfig::GetRatioPlot(TH1I* signal, TH1I* refernce)
0125 {
0126     TH1I* ratio_clone = (TH1I*) signal->Clone();
0127     ratio_clone->Divide(refernce);
0128     ratio_clone->SetTitle("Hewig / Pythia");
0129     return ratio_clone;
0130 }
0131 TH2F* HerwigQAPlottingConfig::GetRatioPlot(TH2F* signal, TH2F* refernce)
0132 {
0133     TH2F* ratio_clone = (TH2F*) signal->Clone();
0134     ratio_clone->Divide(refernce);
0135     return ratio_clone;
0136 }
0137 std::vector<TH2F*>* HerwigQAPlottingConfig::GetRatioPlots(std::vector<TH2F*>* signal, std::vector<TH2F*>* reference)
0138 {
0139     std::vector<TH2F*>* ratios = new std::vector<TH2F*> ();
0140     for(int i = 0; i < (int) signal->size(); i++)
0141     {
0142         TH2F* ratio = GetRatioPlot(signal->at(i), reference->at(i));
0143         ratios->push_back(ratio);
0144     }
0145     return ratios;
0146 }
0147 void HerwigQAPlottingConfig::ScaleXS(std::vector<TH1I*>* histograms, bool isHerwig)
0148 {
0149     for(int i=0; i<(int)histograms->size(); i++)
0150     {
0151         if(isHerwig) histograms->at(i)->Scale(HW_XS);
0152         else histograms->at(i)->Scale(PY_XS);
0153         histograms->at(i)->SetYTitle("#sigma [pb]");
0154     }
0155 }
0156 void HerwigQAPlottingConfig::ScaleXS(std::vector<TH1F*>* histograms, bool isHerwig)
0157 {
0158     for(int i=0; i<(int)histograms->size(); i++)
0159     {
0160         if(isHerwig) histograms->at(i)->Scale(HW_XS);
0161         else histograms->at(i)->Scale(PY_XS);
0162         histograms->at(i)->SetYTitle("#sigma [pb]");
0163     }
0164 }
0165 void HerwigQAPlottingConfig::ScaleXS(TH1I* histograms, bool isHerwig)
0166 {
0167     if(isHerwig) histograms->Scale(HW_XS);
0168     else histograms->Scale(PY_XS);  
0169     histograms->SetYTitle("#sigma [pb]");
0170 }
0171 void HerwigQAPlottingConfig::ScaleXS(TH1F* histograms, bool isHerwig)
0172 {
0173     if(isHerwig) histograms->Scale(HW_XS);
0174     else histograms->Scale(PY_XS);
0175     histograms->SetYTitle("#sigma [pb]");
0176 }
0177