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
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
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)
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)
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
0096
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