Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2026-04-06 08:09:41

0001 #pragma once 
0002 #if ROOT_VERSION_CODE >= ROOT_VERSION(6,00,0)
0003 
0004 #include <TFile.h>
0005 #include <TDirectory.h>
0006 #include <TLegend.h>
0007 #include <TCanvas.h>
0008 #include <TH1.h>
0009 #include <TH2.h>
0010 #include "HerwigQAPlottingConfig.h"
0011 #include "HerwigQAPlottingConfig.C"
0012 #include "Special_colors.h"
0013 #include "sPhenixStyle.h"
0014 #include "sPhenixStyle.C"
0015 
0016 #include <string>
0017 #include <vector>
0018 #include <format>
0019 #include <map>
0020 #include <array>
0021 #include <utility>
0022 
0023 HerwigQAPlottingConfig* conf;
0024 TFile* storage;
0025 std::string tag {};
0026 Skaydis_colors* style_points;
0027 struct particle_colls
0028 {
0029     TH1F* pt;
0030     TH1I* n;
0031     TH2F* phi_eta;
0032 };
0033 void GetSampleSpectra(
0034         std::string Generator="Herwig",
0035             std::vector<TH1F*>* r04_all = new std::vector<TH1F*> {}, 
0036         std::vector<TH1F*>* r04_lead = new std::vector<TH1F*> {},
0037         std::vector<TFile*>* fs = new std::vector<TFile*> {}
0038         )
0039 {
0040     bool isHerwig = false;
0041     if(Generator.find("erwig") != std::string::npos) isHerwig=true;
0042     for(int i = 0; i<(int) fs->size(); i++)
0043     {
0044         fs->at(i)->cd();
0045         TDirectory* d_gen   = (TDirectory*) fs->at(i)->GetDirectory(std::format("{}_jets", Generator).c_str());
0046         
0047         TH1F* h_all     = (TH1F*)d_gen->Get("h_jet_r04_pt");    
0048         TH1F* h_lead    = (TH1F*)d_gen->Get("h_lead_jet_r04_pt");   
0049         if(isHerwig){
0050             h_all->SetMarkerStyle(20+i);
0051             if(i==4) h_all->SetMarkerStyle(29);
0052             else if(i==5) h_all->SetMarkerStyle(33);
0053             else if(i==6) h_all->SetMarkerStyle(34);
0054             else if (i==7) h_all->SetMarkerStyle(37);
0055 
0056             h_lead->SetMarkerStyle(20+i);
0057             if(i==4) h_lead->SetMarkerStyle(29);
0058             else if(i==5) h_lead->SetMarkerStyle(33);
0059             else if(i==6) h_lead->SetMarkerStyle(35);
0060             else if (i==7) h_lead->SetMarkerStyle(37);
0061         }
0062         else{   
0063             h_all->SetMarkerStyle(i+24);
0064             h_all->SetMarkerSize(2);
0065             if(i==6) h_all->SetMarkerStyle(30);
0066             if(i==7) h_all->SetMarkerStyle(38);
0067 
0068             h_lead->SetMarkerStyle(i+24);
0069             h_lead->SetMarkerSize(2);
0070             if(i==6) h_lead->SetMarkerStyle(30);
0071             if(i==7) h_lead->SetMarkerStyle(38);
0072         }   
0073         r04_all->push_back(h_all);
0074         r04_lead->push_back(h_lead);
0075     }
0076     return;
0077 }
0078 void SampleRatios(
0079         std::vector<TH1F*>* base, std::vector<TH1F*>* ratios, TH1F* total, 
0080         TCanvas* ratios_canvi, TLegend* head_leg, TLegend* data_leg, 
0081         HerwigQAPlottingConfig* co, 
0082         std::string Generator, std::vector<std::string> cut
0083 )
0084 {
0085     std::vector<TPad*>* pads = co->AddPads(ratios_canvi);
0086     for(int i = 1; i<(int)base->size(); i++)
0087     {
0088         if ( i > 0 ) 
0089         {
0090             pads->at(1)->cd();
0091             TH1F* last = (TH1F*)base->at(i-1)->Clone();
0092             TH1F* prev_ratio = co->GetRatioPlot(base->at(i), last);
0093             data_leg->AddEntry( prev_ratio, std::format("{} {} / {}", Generator, cut.at(i), cut.at(i-1)).c_str(), "pl");
0094             ratios->push_back(prev_ratio);
0095             prev_ratio->Draw("pmc plc same");
0096             prev_ratio->SetYTitle(" Sample / Previous Sample " );
0097             prev_ratio->GetYaxis()->SetRangeUser(0, 4);
0098             pads->at(0)->cd();
0099         }
0100             TH1F* total_ratio = co->GetRatioPlot(base->at(i), total);
0101             total_ratio->SetMarkerStyle(2*i+39);
0102             data_leg->AddEntry( total_ratio, std::format("{} {} / Combined Spectrum ", Generator, cut.at(i)).c_str(), "pl");
0103             total_ratio->Draw("pmc plc same");
0104             total_ratio->SetYTitle(" Sample / Combined " );
0105             total_ratio->GetYaxis()->SetRangeUser(0, 3);
0106     }
0107     pads->at(1)->cd();
0108     data_leg->Draw();
0109     head_leg->Draw();
0110     ratios_canvi->cd();
0111     pads->at(1)->Draw();
0112     pads->at(0)->Draw();
0113     return;
0114                     
0115 
0116 }
0117 void PlotThePlots(
0118         std::vector<TH1F*>* herwig_all, 
0119             std::vector<TH1F*>* pythia_all,  
0120         std::array<TCanvas*, 3>* AllCanvi,
0121             std::array<TLegend*, 3>* AllHeadLeg, std::array<TLegend*, 3>* AllDataLeg,
0122         HerwigQAPlottingConfig* co,
0123         std::vector<std::string> cuts
0124     )
0125 {
0126     
0127     std::vector<TPad*>* pall    = co->AddPads(AllCanvi->at(0));
0128     for(int i = 0 ; i<(int) herwig_all->size(); i++)
0129     {
0130         TH1F* hCo = (TH1F*) herwig_all->at(i)->Clone();
0131         TH1F* pCo = (TH1F*) pythia_all->at(i)->Clone();
0132         TH1F* rCo = co->GetRatioPlot(hCo, pCo);
0133         rCo -> SetMarkerStyle(2*i+39);
0134         pall->at(1)->cd();
0135         pall->at(1)->SetLogy();
0136         hCo->Draw("same plc pmc");
0137         if(i==0){
0138             float max_val=hCo->GetMaximum();
0139             hCo->GetYaxis()->SetRangeUser(0.001, max_val*3);
0140         }
0141         pCo->Draw("same plc pmc");
0142         AllDataLeg->at(0)->AddEntry(hCo, std::format("Herwig {}", cuts.at(i)).c_str(), "pl");
0143         AllDataLeg->at(0)->AddEntry(pCo, std::format("Pythia {}", cuts.at(i)).c_str(), "pl");
0144         AllDataLeg->at(0)->AddEntry(rCo, std::format("Herwig {} / Pythia {}", cuts.at(i), cuts.at(i)).c_str(), "pl");
0145         pall->at(0)->cd();
0146         rCo->Draw("plc pmc same");
0147         rCo->GetYaxis()->SetRangeUser(0, 2);
0148         rCo->SetYTitle("Herwig / Pythia");
0149         
0150         AllCanvi->at(1)->cd();
0151         herwig_all->at(i)->Draw("same plc pmc");
0152         if(i==0)
0153         {
0154             float max_val=herwig_all->at(i)->GetMaximum();
0155             herwig_all->at(i)->GetYaxis()->SetRangeUser(0.001, max_val*3);
0156         }
0157         AllDataLeg->at(1)->AddEntry(herwig_all->at(i), cuts.at(i).c_str(), "pl");
0158         
0159         AllCanvi->at(2)->cd();
0160         pythia_all->at(i)->Draw("same plc pmc");
0161         if(i==0)
0162         {
0163             float max_val=pythia_all->at(i)->GetMaximum();
0164             pythia_all->at(i)->GetYaxis()->SetRangeUser(0.001, max_val*3);
0165         }
0166         AllDataLeg->at(2)->AddEntry(pythia_all->at(i), cuts.at(i).c_str(), "pl");
0167     }
0168     pall->at(1)->cd();
0169     AllHeadLeg->at(0)->Draw();
0170     AllDataLeg->at(0)->Draw();
0171     AllCanvi->at(0)->cd();
0172     pall->at(0)->Draw();
0173     pall->at(1)->Draw();
0174 
0175     AllCanvi->at(1)->cd();
0176     AllHeadLeg->at(1)->Draw();
0177     AllDataLeg->at(1)->Draw();
0178     AllCanvi->at(1)->SetLogy();
0179 
0180     AllCanvi->at(2)->cd();
0181     AllHeadLeg->at(2)->Draw();
0182     AllDataLeg->at(2)->Draw();
0183     AllCanvi->at(2)->SetLogy();
0184 
0185     return;
0186 }
0187 
0188 void PlotBothThePlots(
0189         std::vector<TH1F*>* herwig_all, std::vector<TH1F*>* herwig_lead,
0190             std::vector<TH1F*>* pythia_all, std::vector<TH1F*>* pythia_lead, 
0191         std::array<TCanvas*, 3>* AllCanvi, std::array<TCanvas*, 3>* LeadCanvi,
0192         HerwigQAPlottingConfig* co,
0193         std::vector<std::string> cuts
0194     )
0195 {
0196     std::array<TLegend*, 3>* AllHeadLeg     = new std::array<TLegend*, 3> {};
0197         std::array<TLegend*, 3>* AllDataLeg     = new std::array<TLegend*, 3> {};
0198     std::array<TLegend*, 3>* LeadHeadLeg    = new std::array<TLegend*, 3> {};
0199     std::array<TLegend*, 3>* LeadDataLeg    = new std::array<TLegend*, 3> {};
0200     for(int i=0; i<3; i++)
0201     {
0202         TLegend* l_head = new TLegend(0.6, 0.6, 0.8, 0.9); 
0203         TLegend* l_data = new TLegend(0.3, 0.5, 0.65, 0.8);
0204         co->SetLegend(l_data);
0205         if(i == 0) co->SetsPhenixHeaderLegend(l_head, "none", "All Jets");
0206         else if(i == 1) co->SetsPhenixHeaderLegend(l_head, true, "All Jets");
0207         else if(i == 2) co->SetsPhenixHeaderLegend(l_head, false, "All Jets");
0208         AllHeadLeg->at(i)   = l_head;
0209         AllDataLeg->at(i)   = l_data;
0210     }
0211 
0212     for(int i=0; i<3; i++)
0213     {
0214         TLegend* l_head = new TLegend(0.6, 0.6, 0.8, 0.9); 
0215         TLegend* l_data = new TLegend(0.3, 0.5, 0.65, 0.8);
0216         co->SetLegend(l_data);
0217         if(i == 0)  co->SetsPhenixHeaderLegend(l_head, "none", "Lead Jets");
0218         else if(i == 1) co->SetsPhenixHeaderLegend(l_head, true, "Lead Jets");
0219         else if(i == 2) co->SetsPhenixHeaderLegend(l_head, false, "Lead Jets");
0220         LeadHeadLeg->at(i)  = l_head;
0221         LeadDataLeg->at(i)  = l_data;
0222     }
0223     AllDataLeg->at(0)->SetNColumns(3);
0224     LeadDataLeg->at(0)->SetNColumns(3);
0225     PlotThePlots(herwig_all, pythia_all, AllCanvi, AllHeadLeg, AllDataLeg, co, cuts);
0226     PlotThePlots(herwig_lead, pythia_lead, LeadCanvi, LeadHeadLeg, LeadDataLeg, co, cuts);
0227     return;
0228 }
0229 
0230 void PlotCombinedSpectrum(std::vector<TFile*>* fs, std::vector<std::string> cutnames)
0231 {
0232     SetsPhenixStyle();
0233     TCanvas* cAll       = new TCanvas("all_canvas", "all_Jets");
0234     TCanvas* cLead      = new TCanvas("lead_canvas", "Lead_jets");
0235     
0236     TCanvas* cAllPythia = new TCanvas("all_Pythia_canvas", "all_Pythia_Jets");
0237     TCanvas* cLeadPythia    = new TCanvas("lead_Pythia_canvas", "Lead_Pythia_jets");
0238     
0239     TCanvas* cAllHerwig = new TCanvas("all_Herwig_canvas", "all_Herwig_Jets");
0240     TCanvas* cLeadHerwig    = new TCanvas("lead_Herwig_canvas", "Lead_Herwig_jets");
0241     
0242 
0243     
0244     TCanvas* cAll_ratio_Pythia  = new TCanvas("all_ratio_Pythia_canvas", "all_ratio_Pythia_Jets");
0245     TCanvas* cLead_ratio_Pythia = new TCanvas("lead_ratio_Pythia_canvas", "Lead_ratio_Pythia_jets");
0246     
0247     TCanvas* cAll_ratio_Herwig  = new TCanvas("all_ratio_Herwig_canvas", "all_ratio_Herwig_Jets");
0248     TCanvas* cLead_ratio_Herwig = new TCanvas("lead_ratio_Herwig_canvas", "Lead_ratio_Herwig_jets");
0249     
0250 
0251     std::array<TCanvas*, 3> All     {cAll, cAllHerwig, cAllPythia}; 
0252     std::array<TCanvas*, 3> Lead    {cLead, cLeadHerwig, cLeadPythia};
0253     
0254     std::array<TCanvas*, 2> Herwig_ratios {cAll_ratio_Herwig, cLead_ratio_Herwig};
0255     std::array<TCanvas*, 2> Pythia_ratios {cAll_ratio_Pythia, cLead_ratio_Pythia};
0256     
0257     std::array< std::array< TCanvas*, 2 >*, 2 > RatioCanvi {&Herwig_ratios, &Pythia_ratios};    
0258     std::array< std::array< std::array<TLegend*, 2>*, 2 >*, 2 >* RatioLegs 
0259         = new std::array< std::array< std::array< TLegend*, 2>*, 2>*, 2>{}; 
0260     
0261     std::vector<TH1F*>* herwig_pt   = new std::vector<TH1F*>();
0262     std::vector<TH1F*>* herwig_l_pt = new std::vector<TH1F*>();
0263     
0264     std::vector<TH1F*>* pythia_pt   = new std::vector<TH1F*>();
0265     std::vector<TH1F*>* pythia_l_pt = new std::vector<TH1F*>();
0266     
0267     HerwigQAPlottingConfig* co = new HerwigQAPlottingConfig();
0268     Skaydis_colors* odd_colors = new Skaydis_colors();
0269     gStyle->SetPalette(100, odd_colors->Enby_gradient_PT);
0270 
0271 
0272     GetSampleSpectra("Herwig", herwig_pt, herwig_l_pt, fs);
0273     GetSampleSpectra("Pythia", pythia_pt, pythia_l_pt, fs);
0274     
0275     for(int i=0; i<2; i++)
0276     {
0277         bool isHerwig       = false;
0278         if( i==0 ) isHerwig = true;
0279         else isHerwig       = false;
0280         std::array< std::array<TLegend*, 2>*, 2 >* Legs = 
0281                 new std::array<std::array<TLegend*, 2>*, 2>{};
0282         for(int j=0; j<2; j++)
0283         {
0284             RatioCanvi.at(i)->at(j)->cd();
0285             std::string LJ = "All Jets";
0286             if(j==1) LJ="Lead Jets";
0287             TLegend* l_head = new TLegend(0.7, 0.6, 0.9, 0.9);
0288             TLegend* l_data = new TLegend(0.7, 0.2, 0.9, 0.6);
0289                     
0290             co->SetLegend(l_data);
0291             co->SetsPhenixHeaderLegend(l_head, isHerwig, LJ);
0292             std::array<TLegend*, 2>* l = new std::array<TLegend*, 2> {l_head, l_data};
0293             Legs->at(j)=l;
0294         }
0295         RatioLegs->at(i)=Legs;
0296     }
0297     
0298     TH1F* ha1=(TH1F*)herwig_pt->at(0)->Clone();
0299     TH1F* pa1=(TH1F*)pythia_pt->at(0)->Clone();
0300     for(int i = 1; i<(int)herwig_pt->size(); i++) ha1->Add(herwig_pt->at(i));
0301     for(int i = 1; i<(int)pythia_pt->size(); i++) pa1->Add(pythia_pt->at(i));
0302 
0303     TH1F* hj1=(TH1F*)herwig_l_pt->at(0)->Clone();
0304     TH1F* pj1=(TH1F*)pythia_l_pt->at(0)->Clone();
0305     for(int i = 1; i<(int)herwig_l_pt->size(); i++) hj1->Add(herwig_l_pt->at(i));
0306     for(int i = 1; i<(int)pythia_l_pt->size(); i++) pj1->Add(pythia_l_pt->at(i));
0307     std::vector<TH1F*> rHA  {};
0308     std::vector<TH1F*> rHL  {};
0309     std::vector<TH1F*> rPA  {};
0310     std::vector<TH1F*> rPL  {};
0311     SampleRatios(herwig_pt, &rHA ,ha1, 
0312             RatioCanvi.at(0)->at(0), RatioLegs->at(0)->at(0)->at(0) , RatioLegs->at(0)->at(0)->at(1), 
0313             co, "Herwig", cutnames);
0314     SampleRatios(herwig_l_pt, &rHL ,hj1, 
0315             RatioCanvi.at(0)->at(1), RatioLegs->at(0)->at(1)->at(0) , RatioLegs->at(0)->at(1)->at(1),
0316                 co, "Herwig", cutnames);
0317     SampleRatios(pythia_pt, &rPA ,pa1,
0318                 RatioCanvi.at(1)->at(0), RatioLegs->at(1)->at(0)->at(0) , RatioLegs->at(1)->at(0)->at(1),
0319                 co, "Pythia", cutnames);
0320     SampleRatios(pythia_l_pt, &rPL ,pj1, 
0321             RatioCanvi.at(1)->at(1), RatioLegs->at(1)->at(1)->at(0) , RatioLegs->at(0)->at(0)->at(1), 
0322             co, "Pythia", cutnames);
0323     PlotBothThePlots(
0324         herwig_pt, herwig_l_pt,
0325             pythia_pt, pythia_l_pt, 
0326         &All, &Lead,
0327         co, cutnames);
0328     All.at(0)->Print("~/Herwig_comb_pt_QA.pdf(");
0329     for(int i = 0; i<(int) All.size();  i++) All.at(i)->Print("~/Herwig_comb_pt_QA.pdf");
0330     for(int i = 0; i<(int) Lead.size(); i++) Lead.at(i)->Print("~/Herwig_comb_pt_QA.pdf");
0331     for(int i = 0; i< 2; i++)
0332             for(int j = 0; j < 2; j++)
0333             RatioCanvi.at(i)->at(j)->Print("~/Herwig_comb_pt_QA.pdf");
0334     All.at(0)->Print("~/Herwig_comb_pt_QA.pdf)");
0335 
0336 
0337     return;
0338 }
0339             
0340             
0341 void MakeParticleRatios( std::map<std::string, particle_colls*>* h,  std::map<std::string, particle_colls*>* p,  std::map<std::string, particle_colls*>* r)
0342 {
0343     for(auto m:*h) 
0344     {
0345         if(!m.second) continue;
0346         auto pt = conf->GetRatioPlot(h->at(m.first)->pt, p->at(m.first)->pt);
0347         auto n = conf->GetRatioPlot(h->at(m.first)->n, p->at(m.first)->n);
0348         auto phi_eta = conf->GetRatioPlot(h->at(m.first)->phi_eta, p->at(m.first)->phi_eta);
0349         particle_colls* part = new particle_colls;
0350             part->pt    = pt;
0351         part->n     = n;
0352             part->phi_eta   = phi_eta;
0353         r->insert(std::pair<std::string, particle_colls*> (m.first,part));
0354     }
0355     return;
0356 }   
0357 void CollectEventPlots(TDirectory* event, std::vector<TH1F*>* particle_level, std::vector<TH2F*>* particle_correlations,  std::map<std::string, particle_colls*>* particle_coll)
0358 {
0359     //Lots of 2D Plots here as well, so follow along with the PhotonJetApproach
0360     event->cd();
0361     
0362     //get the 1D Plots across all particle types
0363     TH1F* particle_eta  = (TH1F*) event->Get("h_particle_eta");
0364     TH1F* particle_phi  = (TH1F*) event->Get("h_particle_phi");
0365     TH1F* particle_e    = (TH1F*) event->Get("h_particle_e");
0366     TH1F* particle_et   = (TH1F*) event->Get("h_particle_et");
0367     TH1F* particle_pt   = (TH1F*) event->Get("h_particle_pt");
0368     TH1F* total_E       = (TH1F*) event->Get("h_total_E");
0369     particle_eta->Scale(1/(float)total_E->GetEntries());
0370     particle_phi->Scale(1/(float)total_E->GetEntries());
0371     particle_eta->SetYTitle(" N_{hits} / N_{evts}");
0372     particle_phi->SetYTitle(" N_{hits} / N_{evts}");
0373     particle_level->push_back(particle_eta);
0374     particle_level->push_back(particle_phi);
0375     particle_level->push_back(particle_e);
0376     particle_level->push_back(particle_et);
0377     particle_level->push_back(particle_pt);
0378     particle_level->push_back(total_E);
0379 
0380     //now get the 2D Plots  
0381     TH2F* h_particle_et_eta     = (TH2F*) event->Get("h_particle_et_eta");
0382     TH2F* h_particle_et_phi     = (TH2F*) event->Get("h_particle_et_phi");
0383     TH2F* h_particle_pt_eta     = (TH2F*) event->Get("h_particle_pt_eta");
0384     TH2F* h_particle_pt_phi     = (TH2F*) event->Get("h_particle_pt_phi");
0385     TH2F* h_particle_e_eta      = (TH2F*) event->Get("h_particle_e_eta");
0386     TH2F* h_particle_e_phi      = (TH2F*) event->Get("h_particle_e_phi");
0387     TH2F* h_particle_phi_eta    = (TH2F*) event->Get("h_particle_phi_eta");
0388 
0389     particle_correlations->push_back(h_particle_et_eta);
0390     particle_correlations->push_back(h_particle_et_phi);
0391     particle_correlations->push_back(h_particle_pt_eta);
0392     particle_correlations->push_back(h_particle_pt_phi);
0393     particle_correlations->push_back(h_particle_e_eta);
0394     particle_correlations->push_back(h_particle_e_phi);
0395     particle_correlations->push_back(h_particle_phi_eta);
0396 
0397     //Individual particle type comp
0398     TDirectory* particles = (TDirectory*) event->GetDirectory("ParticleCat");
0399     particles->cd();
0400     std::vector<std::string> particle_names {"electron", "proton", "neutron", "pion", "photon"};
0401     for(auto n:particle_names)
0402     {
0403         TH1F* h_p_pt    = (TH1F*) particles->Get(std::format("h_{}_pt", n).c_str());
0404         TH1I* h_p_n = (TH1I*) particles->Get(std::format("h_{}_n", n).c_str());
0405         TH2F* h_p_ph    = (TH2F*) particles->Get(std::format("h_{}_phi_eta", n).c_str());
0406         if(!h_p_pt) continue;
0407         particle_colls* part = new particle_colls;
0408             part->pt    = h_p_pt;
0409             part->n     = h_p_n;
0410             part->phi_eta   = h_p_ph;
0411         particle_coll->insert(std::pair<std::string, particle_colls*>(n, part));
0412     }
0413     return;
0414 }
0415 void PlotEventObs(TH1F* herwig_obs, TH1F* pythia_obs, TCanvas* c1)
0416 {
0417     //plotting the kinematic variables
0418     std::string var = herwig_obs->GetXaxis()->GetTitle();
0419     std::vector<TPad*>* pads = conf->AddPads(c1);
0420     pads->at(1)->cd();
0421     TLegend* l_data=new TLegend(0.7, 0.4, 1, 0.58);
0422     TLegend* l_header=new TLegend(0.5, 0.6, 0.7, 1);
0423     conf->SetsPhenixHeaderLegend(l_header, tag);
0424     l_header->AddEntry("", std::format("Event {}", var).c_str(), "");
0425     conf->SetLegend(l_data);
0426     if(var.find("[GeV]") != std::string::npos) pads->at(1)->SetLogy();
0427     auto ratio = conf->GetRatioPlot(herwig_obs, pythia_obs);
0428     pythia_obs->SetMarkerStyle(24);
0429     herwig_obs->SetMarkerStyle(20);
0430     THStack* s=new THStack("s", "s");
0431     s->Add(herwig_obs);
0432     s->Add(pythia_obs);
0433     s->Draw("axis");
0434     s->Draw("plc pmc nostack same e1");
0435     s->GetXaxis()->SetTitle(var.c_str());
0436     s->GetYaxis()->SetTitle(herwig_obs->GetYaxis()->GetTitle());
0437     l_data->AddEntry(herwig_obs);
0438     l_data->AddEntry(pythia_obs);
0439     l_header->Draw();
0440     l_data->Draw("same");
0441     pads->at(0)->cd();
0442     ratio->SetMarkerStyle(34);
0443     ratio->Draw("pmc plc e1");
0444     l_data->AddEntry(ratio, "Herwig / Pythia");
0445     c1->cd();
0446     pads->at(0)->Draw();
0447     pads->at(1)->Draw();
0448     return;
0449 }
0450 void PlotEventObs(TH2F* herwig_obs, TH2F* pythia_obs, TCanvas* c1)
0451 {
0452     //plotting the kinematic variables
0453     std::string var = herwig_obs->GetXaxis()->GetTitle();
0454     std::string var2 = herwig_obs->GetYaxis()->GetTitle();
0455     std::vector<TPad*>* pads = new std::vector<TPad*>();
0456     TPad* p1=new TPad("p1", "p1", 0, 0.52, 0.48, 1);
0457     TPad* p2=new TPad("p2", "p2", 0.52, 0.52, 1, 1);
0458     TPad* p3=new TPad("p3", "p3", 0, 0, 0.48, 0.48);
0459     TPad* p4=new TPad("p4", "p4", 0.52, 0, 1, 0.48);
0460     pads->push_back(p1);
0461     pads->push_back(p2);
0462     pads->push_back(p3);
0463     pads->push_back(p4);
0464     pads->at(0)->cd();
0465     TLegend* l_header=new TLegend(0.1, 0.1, 1, 1);
0466     conf->SetsPhenixHeaderLegend(l_header, tag);
0467     l_header->AddEntry("", std::format("Event {} - {}", var, var2).c_str(), "");
0468     if(var.find("[GeV]") != std::string::npos) pads->at(1)->SetLogx();
0469     if(var2.find("[GeV]") != std::string::npos) pads->at(1)->SetLogy();
0470     pads->at(1)->SetLogz();
0471     if(var.find("[GeV]") == std::string::npos &&  var2.find("[GeV]") == std::string::npos)
0472     {
0473         pads->at(1)->SetLogz(0);
0474         gStyle->SetPalette(100, style_points->Enby_log_gradient_PT);    
0475     }
0476     else{
0477         gStyle->SetPalette(100, style_points->Enby_gradient_PT);    
0478     }
0479     auto ratio = conf->GetRatioPlot(herwig_obs, pythia_obs);
0480     l_header->Draw();
0481     pads->at(1)->cd();
0482     herwig_obs->Draw("colz");
0483     TLegend* l_data=new TLegend(0.5, 0.8, 1, 1);
0484     conf->SetLegend(l_data);
0485     l_data->SetTextSize(0.05f);
0486     l_data->AddEntry(herwig_obs, std::format("Herwig {}", var).c_str(), "");
0487     l_data->Draw();
0488     pads->at(2)->cd();
0489     if(var.find("[GeV]") != std::string::npos) pads->at(2)->SetLogx();
0490     if(var2.find("[GeV]") != std::string::npos) pads->at(2)->SetLogy();
0491     pads->at(2)->SetLogz();
0492     if(var.find("[GeV]") == std::string::npos &&  var2.find("[GeV]") == std::string::npos) pads->at(2)->SetLogz(0);
0493     pythia_obs->Draw("colz");
0494     TLegend* l_data_p=new TLegend(0.5, 0.8, 1, 1);
0495     conf->SetLegend(l_data_p);
0496     l_data_p->SetTextSize(0.05f);
0497     l_data_p->AddEntry(pythia_obs, std::format("Pythia {}", var).c_str(), "");
0498     l_data_p->Draw();
0499     
0500     pads->at(3)->cd();
0501     if(var.find("[GeV]") != std::string::npos) pads->at(3)->SetLogx();
0502     if(var2.find("[GeV]") != std::string::npos) pads->at(3)->SetLogy();
0503     pads->at(3)->SetLogz();
0504     if(var.find("[GeV]") == std::string::npos &&  var2.find("[GeV]") == std::string::npos) pads->at(3)->SetLogz(0);
0505     ratio->SetMarkerStyle(34);
0506     ratio->Draw("colz");
0507     TLegend* l_data_r=new TLegend(0.5, 0.8, 1, 1);
0508     conf->SetLegend(l_data_r);
0509     l_data_r->SetTextSize(0.05f);
0510     l_data_r->AddEntry(pythia_obs, std::format(" Herwig / Pythia {}", var).c_str(), "");
0511     l_data_r->Draw();
0512     c1->cd();
0513     pads->at(0)->Draw();
0514     pads->at(1)->Draw();
0515     pads->at(2)->Draw();
0516     pads->at(3)->Draw();
0517     return;
0518 }
0519 void PlotEventObs(TH1F* herwig_particle, TH1F* pythia_particle, std::map<std::string, particle_colls*>* h_pc, std::map<std::string, particle_colls*>* p_pc, std::map<std::string, particle_colls*>* r_pc, TCanvas* c1)
0520 {
0521     //comparing the particle species pt
0522     std::vector<TPad*>* pads=conf->AddPads(c1);
0523     pads->at(1)->cd();
0524     pads->at(1)->SetLogy();
0525     TLegend* l_data=new TLegend(0.3, 0.4, 1, 0.58);
0526     TLegend* l_header=new TLegend(0.5, 0.6, 0.7, 1);
0527     conf->SetsPhenixHeaderLegend(l_header, tag);
0528     l_header->AddEntry("", "Particle Species p_{T}", "");
0529     conf->SetLegend(l_data);
0530     l_data->SetNColumns(3);
0531     THStack* herwig = new THStack("herwig","herwig");
0532     THStack* pythia = new THStack("pythia","pythia");
0533     THStack* ratio = new THStack("ratio","ratio");
0534     herwig_particle->SetMarkerStyle(20);
0535     pythia_particle->SetMarkerStyle(24);
0536     herwig->Add(herwig_particle);
0537     pythia->Add(pythia_particle);
0538     pads->at(0)->cd();
0539     TH1F* ratio_particle=conf->GetRatioPlot(herwig_particle, pythia_particle);
0540     ratio_particle->SetMarkerStyle(37);
0541     ratio->Add(ratio_particle);
0542     l_data->AddEntry(herwig_particle, "Herwig All Final State Particles");
0543     l_data->AddEntry(pythia_particle, "Pythia All Final State Particles");
0544     l_data->AddEntry(ratio_particle, "Herwig / Pythia Particles");
0545     int i=1;
0546     for(auto m: *h_pc)
0547     {
0548         h_pc->at(m.first)->pt->SetMarkerStyle(i+20);
0549         p_pc->at(m.first)->pt->SetMarkerStyle(i+24);
0550         r_pc->at(m.first)->pt->SetMarkerStyle(2*i+39);
0551         if(i >= 4){
0552              m.second->pt->SetMarkerStyle(2*(i-4)+34);
0553              r_pc->at(m.first)->pt->SetMarkerStyle(2*i+39);
0554         }
0555         herwig->Add(h_pc->at(m.first)->pt);
0556         pythia->Add(p_pc->at(m.first)->pt);
0557         ratio->Add(r_pc->at(m.first)->pt);
0558         l_data->AddEntry( m.second->pt, std::format("Herwig Final State {}", m.first).c_str());
0559         l_data->AddEntry( p_pc->at(m.first)->pt, std::format("Pythia Final State {}", m.first).c_str());
0560         l_data->AddEntry( r_pc->at(m.first)->pt, std::format("Herwig / Pythia {}", m.first).c_str());
0561     }
0562     c1->cd();
0563     pads->at(1)->cd();
0564     bool herwig_high = false;
0565     if (herwig->GetMaximum() > pythia->GetMaximum() ) herwig_high=true;
0566     if (herwig_high) herwig->Draw("axis");
0567     else pythia->Draw("axis");
0568     herwig->Draw("pmc plc nostack same e1");
0569     pythia->Draw("same pmc plc nostack e1");
0570     herwig->GetXaxis()->SetTitle(herwig_particle->GetXaxis()->GetTitle());
0571     herwig->GetYaxis()->SetTitle(herwig_particle->GetYaxis()->GetTitle());
0572     l_data->Draw();
0573     l_header->Draw();
0574     pads->at(0)->cd();
0575     ratio->Draw("pmc plc nostack e1");
0576     ratio->GetYaxis()->SetRangeUser(0.01, 2.);
0577     ratio->GetYaxis()->SetTitle(" Herwig / Pythia" ); 
0578     ratio->Draw("pmc plc nostack e1");
0579     c1->cd();
0580     pads->at(0)->Draw();
0581     pads->at(1)->Draw();
0582     return; 
0583 }
0584 void PlotEventObs(TH1I* herwig_particle, TH1I* pythia_particle, std::map<std::string, particle_colls*>* h_pc, std::map<std::string, particle_colls*>* p_pc, std::map<std::string, particle_colls*>* r_pc, TCanvas* c1)
0585 {
0586     //comparing the particle species n 
0587     std::vector<TPad*>* pads=conf->AddPads(c1);
0588     pads->at(1)->cd();
0589     pads->at(1)->SetLogy();
0590     TLegend* l_data=new TLegend(0.2, 0.4, 0.6, 0.58);
0591     TLegend* l_header=new TLegend(0.5, 0.6, 0.7, 1);
0592     conf->SetsPhenixHeaderLegend(l_header, tag);
0593     l_header->AddEntry("", "Particle Species Count", "");
0594     conf->SetLegend(l_data);
0595     l_data->SetNColumns(3);
0596     THStack* herwig = new THStack("herwig","herwig");
0597     THStack* pythia = new THStack("pythia","pythia");
0598     THStack* ratio = new THStack("ratio","ratio");
0599     herwig_particle->SetMarkerStyle(20);
0600     pythia_particle->SetMarkerStyle(24);
0601     herwig_particle->GetXaxis()->SetRangeUser(0,200);
0602     herwig->Add(herwig_particle);
0603     pythia->Add(pythia_particle);
0604     pads->at(0)->cd();
0605     TH1I* ratio_particle=conf->GetRatioPlot(herwig_particle, pythia_particle);
0606     ratio_particle->SetMarkerStyle(37);
0607     ratio->Add(ratio_particle);
0608     l_data->AddEntry(herwig_particle, "Herwig All Final State Particles");
0609     l_data->AddEntry(pythia_particle, "Pythia All Final State Particles");
0610     l_data->AddEntry(ratio_particle, "Herwig / Pythia Particles");
0611     int i=1;
0612     for(auto m: *h_pc)
0613     {
0614         h_pc->at(m.first)->n->SetMarkerStyle(i+20);
0615         p_pc->at(m.first)->n->SetMarkerStyle(i+24);
0616         r_pc->at(m.first)->n->SetMarkerStyle(2*i+39);
0617         if(i >= 4){
0618              h_pc->at(m.first)->n->SetMarkerStyle(2*(i-4)+34);
0619              r_pc->at(m.first)->n->SetMarkerStyle(2*i+39);
0620         }
0621         pads->at(1)->cd();
0622         pads->at(0)->cd();
0623         herwig->Add(h_pc->at(m.first)->n);
0624         pythia->Add(p_pc->at(m.first)->n);
0625         ratio->Add(r_pc->at(m.first)->n);
0626         l_data->AddEntry( h_pc->at(m.first)->n, std::format("Herwig Final State {}", m.first).c_str());
0627         l_data->AddEntry( p_pc->at(m.first)->n, std::format("Pythia Final State {}", m.first).c_str());
0628         l_data->AddEntry( r_pc->at(m.first)->n, std::format("Herwig / Pythia {}", m.first).c_str());
0629     }
0630     c1->cd();
0631     pads->at(1)->cd();
0632     bool herwig_high = false;
0633     if (herwig->GetMaximum() > pythia->GetMaximum() ) herwig_high=true;
0634     if (herwig_high) herwig->Draw("axis");
0635     else pythia->Draw("axis");
0636     herwig->Draw("pmc plc nostack same e1");
0637     pythia->Draw("same pmc plc nostack e1");
0638     herwig->GetXaxis()->SetRangeUser(0, 200);
0639     pythia->GetXaxis()->SetRangeUser(0, 200);
0640     herwig->GetXaxis()->SetTitle(herwig_particle->GetXaxis()->GetTitle());
0641     l_data->Draw();
0642     l_header->Draw();
0643     pads->at(0)->cd();
0644     ratio->Draw("pmc plc nostack e1");
0645     ratio->GetXaxis()->SetTitle(herwig_particle->GetXaxis()->GetTitle());
0646     ratio->GetYaxis()->SetTitle(" Herwig / Pythia" ); 
0647     ratio->GetXaxis()->SetRangeUser(0, 200);
0648     ratio->GetYaxis()->SetRangeUser(0.01, 2.);
0649     ratio->Draw("pmc plc nostack e1");  
0650     c1->cd();
0651     pads->at(0)->Draw();
0652     pads->at(1)->Draw();
0653     return; 
0654 }
0655 void PlotEventObs(TH2F* particle, std::map<std::string, particle_colls*>* pc, TCanvas* c1, std::string generator)
0656 {
0657     //comparing the particle species phi-eta hits
0658     std::vector<TPad*>* pads = conf->Canvas2DDivide(c1);
0659     pads->at(0)->cd();
0660     TLegend* l_header=new TLegend(0.5, 0.6, 1, 1);
0661     conf->SetsPhenixHeaderLegend(l_header, tag);
0662     l_header->SetTextSize(0.03f);
0663     l_header->AddEntry("", generator.c_str(), "");
0664     l_header->AddEntry("", "Final State #eta - #varphi hit distribution", "");
0665     particle->Draw("colz");
0666     l_header->Draw();
0667     int i=1;
0668     for(auto m:*pc)
0669     {
0670         pads->at(i)->cd();
0671         TLegend* l_data=new TLegend(0.5, 0.8, 1, 0.9);
0672         conf->SetLegend(l_data);
0673         l_data->AddEntry("", m.first.c_str(), "");
0674         m.second->phi_eta->Draw("colz");
0675         l_data->Draw("same");
0676         i++;
0677     }
0678     c1->cd();
0679     for(int i=0; i<(int)pads->size(); i++) pads->at(i)->Draw();
0680     return;
0681 }
0682 
0683 
0684 void PlotEventPlots(TDirectory* herwig_event, TDirectory* pythia_event, std::vector<TCanvas*>* Canvi)
0685 {
0686     std::vector<TH1F*>* herwig_particle_level   = new std::vector<TH1F*> ();
0687     std::vector<TH2F*>* herwig_particle_correlations= new std::vector<TH2F*> ();
0688     TH1I* herwig_particle_n             = (TH1I*) herwig_event->Get("h_particle_n");
0689     std::map<std::string, particle_colls*>* herwig_particle_coll = new std::map<std::string, particle_colls*> ();
0690     std::vector<TH1F*>* pythia_particle_level   = new std::vector<TH1F*> ();
0691     std::vector<TH2F*>* pythia_particle_correlations= new std::vector<TH2F*> ();
0692     TH1I* pythia_particle_n             = (TH1I*) pythia_event->Get("h_particle_n");
0693     std::map<std::string, particle_colls*>* pythia_particle_coll  = new std::map<std::string, particle_colls*> ();
0694     CollectEventPlots(herwig_event, herwig_particle_level, herwig_particle_correlations, herwig_particle_coll);
0695     CollectEventPlots(pythia_event, pythia_particle_level, pythia_particle_correlations, pythia_particle_coll);
0696     std::map<std::string, particle_colls*>* ratio_particle_coll = new std::map<std::string, particle_colls*> ();
0697     MakeParticleRatios( herwig_particle_coll, pythia_particle_coll, ratio_particle_coll);
0698     gStyle->SetPalette(100, style_points->Lesbian_gradient_PT); 
0699     for(int i=0; i<(int)herwig_particle_level->size(); i++){
0700         std::string var = herwig_particle_level->at(i)->GetXaxis()->GetTitle();
0701         TCanvas* c1=new TCanvas(std::format("Canv_{}", var).c_str(),std::format("Canv_{}", var).c_str()); 
0702         PlotEventObs(herwig_particle_level->at(i), pythia_particle_level->at(i), c1);
0703         Canvi->push_back(c1);
0704         if(var.find("p_{T}") != std::string::npos){
0705             TCanvas* c2 = new TCanvas("pt", "pt");
0706             PlotEventObs(herwig_particle_level->at(i), pythia_particle_level->at(i), herwig_particle_coll, pythia_particle_coll, ratio_particle_coll, c2);
0707             Canvi->push_back(c2);
0708         }
0709     }
0710     for(int i=0; i<(int)herwig_particle_correlations->size(); i++){
0711         std::string var = herwig_particle_correlations->at(i)->GetXaxis()->GetTitle();
0712         std::string var2 = herwig_particle_correlations->at(i)->GetYaxis()->GetTitle();
0713         TCanvas* c1=new TCanvas(std::format("Canv2d_{}_{}", var, var2).c_str(),std::format("Canv2d_{}_{}", var, var2).c_str()); 
0714         PlotEventObs(herwig_particle_correlations->at(i), pythia_particle_correlations->at(i), c1);
0715         Canvi->push_back(c1);
0716         if(var.find("eta") !=std::string::npos && var2.find("varphi") != std::string::npos) 
0717         {
0718             TCanvas* ch = new TCanvas("etph_h", "etph_h");
0719             TCanvas* cp = new TCanvas("etph_p", "etph_p");
0720             TCanvas* cr = new TCanvas("etph_r", "etph_r");
0721             TH2F* ratio = conf->GetRatioPlot(herwig_particle_correlations->at(i), pythia_particle_correlations->at(i));
0722             PlotEventObs(herwig_particle_correlations->at(i), herwig_particle_coll, ch, "Herwig7.2");
0723             PlotEventObs(pythia_particle_correlations->at(i), pythia_particle_coll, cp, "Pythia8");
0724             PlotEventObs(ratio, ratio_particle_coll, cr, "Herwig / Pythia");
0725         }
0726     }
0727     gStyle->SetPalette(100, style_points->Trans_gradient_PT);   
0728     TCanvas* c3 = new TCanvas("n", "n");
0729     PlotEventObs(herwig_particle_n, pythia_particle_n, herwig_particle_coll, pythia_particle_coll, ratio_particle_coll, c3);
0730     Canvi->push_back(c3);
0731     return;
0732 
0733 }
0734 void PlotSingleGenPhotonJetObs(std::vector<TH2F*>* obs, TCanvas* c1, std::vector<TPad*>* pads, std::string label)
0735 {
0736     c1->cd();
0737     pads->at(0)->cd();
0738     TLegend* l_label=new TLegend(0.1, 0.1, 1, 1);
0739     conf->SetsPhenixHeaderLegend(l_label, tag);
0740     l_label->AddEntry("", label.c_str(), "");
0741     l_label->AddEntry("", std::format("Jet {} Versus Photon {}", obs->at(0)->GetXaxis()->GetTitle(), obs->at(0)->GetYaxis()->GetTitle()).c_str(), "");
0742     for(int i=0; i<(int)obs->size(); i++)
0743     {
0744         pads->at(i+1)->cd();
0745         TLegend* l_data=new TLegend(0.7, 0.9, 0.9, 1);
0746         conf->SetLegend(l_data);
0747         l_data->AddEntry(obs->at(i), obs->at(i)->GetTitle(), "");
0748         obs->at(i)->Draw("colz");
0749         l_data->Draw("same");
0750         c1->cd();
0751         pads->at(i+1)->Draw();
0752     }
0753     return;
0754 }
0755 void PlotPhotonJetObs(std::vector<TH2F*>* herwig_obs, std::vector<TH2F*>* pythia_obs, TCanvas* herwig_Canvas, TCanvas* pythia_Canvas, TCanvas* ratio_Canvas)
0756 {
0757     std::vector<TPad*>* subdivided_herwig = conf->Canvas2DDivide(herwig_Canvas);
0758     std::vector<TPad*>* subdivided_pythia = conf->Canvas2DDivide(pythia_Canvas);
0759     std::vector<TPad*>* subdivided_ratio = conf->Canvas2DDivide(ratio_Canvas);
0760     std::vector<TH2F*>* ratio_obs = conf->GetRatioPlots(herwig_obs, pythia_obs);
0761     PlotSingleGenPhotonJetObs(herwig_obs, herwig_Canvas, subdivided_herwig, "Herwig7.2");
0762     PlotSingleGenPhotonJetObs(pythia_obs, pythia_Canvas, subdivided_pythia, "Pythia8");
0763     PlotSingleGenPhotonJetObs(ratio_obs, ratio_Canvas, subdivided_ratio, "Herwig / Pythia");
0764     return;
0765 }
0766 void CollectJets(TDirectory* jets, std::array<std::vector<TH1F*>*, 4>* all_jets, std::array<std::vector<TH1F*>*, 4>* lead_jets, std::vector<TH1I*>* all_jet_n, std::vector<TH1I*>* all_jet_comp, std::vector<TH1I*>* lead_jet_comp)
0767 {
0768     for(int i=2; i<7; i++)
0769     {
0770         jets->cd();
0771         TDirectory* r_dir=(TDirectory*)jets->GetDirectory(std::format("R0{}Jets", i).c_str());
0772         r_dir->cd();
0773         all_jets->at(0)->push_back((TH1F*)r_dir->Get(std::format("h_jet_r0{}_pt", i).c_str()));
0774         all_jets->at(1)->push_back((TH1F*)r_dir->Get(std::format("h_jet_r0{}_e", i).c_str()));
0775         all_jets->at(2)->push_back((TH1F*)r_dir->Get(std::format("h_jet_r0{}_phi", i).c_str()));
0776         all_jets->at(3)->push_back((TH1F*)r_dir->Get(std::format("h_jet_r0{}_eta", i).c_str()));
0777         all_jet_n->push_back((TH1I*)r_dir->Get(std::format("h_jet_r0{}_n",i).c_str()));
0778         all_jet_comp->push_back((TH1I*)r_dir->Get(std::format("h_jet_r0{}_comp",i).c_str()));
0779         TDirectory* leaddir=(TDirectory*)r_dir->GetDirectory("Lead_Jets");
0780         lead_jets->at(0)->push_back((TH1F*)leaddir->Get(std::format("h_lead_jet_r0{}_pt", i).c_str()));
0781         lead_jets->at(1)->push_back((TH1F*)leaddir->Get(std::format("h_lead_jet_r0{}_e", i).c_str()));
0782         lead_jets->at(2)->push_back((TH1F*)leaddir->Get(std::format("h_lead_jet_r0{}_phi", i).c_str()));
0783         lead_jets->at(3)->push_back((TH1F*)leaddir->Get(std::format("h_lead_jet_r0{}_eta", i).c_str()));
0784         lead_jet_comp->push_back((TH1I*)leaddir->Get(std::format("h_lead_jet_r0{}_comp",i).c_str()));
0785         r_dir->cd();
0786         float n_evts = (float)lead_jets->at(0)->back()->GetEntries();
0787         all_jets->at(2)->back()->Scale(1/n_evts);
0788         all_jets->at(2)->back()->SetYTitle(" N_{jets} / N_{evts} ");
0789         all_jets->at(3)->back()->Scale(1/n_evts);
0790         all_jets->at(3)->back()->SetYTitle(" N_{jets} / N_{evts} ");
0791         lead_jets->at(2)->back()->Scale(1/n_evts);
0792         lead_jets->at(2)->back()->SetYTitle(" N_{jets} / N_{evts} ");
0793         lead_jets->at(3)->back()->Scale(1/n_evts);
0794         lead_jets->at(3)->back()->SetYTitle(" N_{jets} / N_{evts} ");
0795     }   
0796     return;
0797 
0798 }
0799 void CollectPhotons(TDirectory* photons, std::array<TH1F*, 4>* all_photons, std::array<TH1F*, 4>* lead_photons, std::array<TH1F*, 4>* direct_photons, std::array<TH1F*, 4>* frag_photons, TH1I* all_photons_n, TH1I* direct_photons_n, TH1I* frag_photons_n)
0800 {
0801     photons->cd();
0802     all_photons->at(0)=(TH1F*)photons->Get("h_photons_pt");
0803     all_photons->at(1)=(TH1F*)photons->Get("h_photons_e");
0804     all_photons->at(2)=(TH1F*)photons->Get("h_photons_phi");
0805     all_photons->at(3)=(TH1F*)photons->Get("h_photons_eta");
0806     all_photons_n=(TH1I*)photons->Get("h_photon_n");
0807     TDirectory* leaddir=(TDirectory*)photons->GetDirectory("Lead_Photons");
0808     lead_photons->at(0)=(TH1F*)leaddir->Get("h_lead_photons_pt");
0809     lead_photons->at(1)=(TH1F*)leaddir->Get("h_lead_photons_e");
0810     lead_photons->at(2)=(TH1F*)leaddir->Get("h_lead_photons_phi");
0811     lead_photons->at(3)=(TH1F*)leaddir->Get("h_lead_photons_eta");
0812     photons->cd();
0813     TDirectory* directdir=(TDirectory*)photons->GetDirectory("Direct_Photons");
0814     direct_photons->at(0)=(TH1F*)directdir->Get("h_direct_photons_pt");
0815     direct_photons->at(1)=(TH1F*)directdir->Get("h_direct_photons_e");
0816     direct_photons->at(2)=(TH1F*)directdir->Get("h_direct_photons_phi");
0817     direct_photons->at(3)=(TH1F*)directdir->Get("h_direct_photons_eta");
0818     direct_photons_n=(TH1I*)directdir->Get("h_direct_photon_n");
0819     photons->cd();
0820     TDirectory* fragdir=(TDirectory*)photons->GetDirectory("Fragmentation_Photons");
0821     frag_photons->at(0)=(TH1F*)fragdir->Get("h_frag_photons_pt");
0822     frag_photons->at(1)=(TH1F*)fragdir->Get("h_frag_photons_e");
0823     frag_photons->at(2)=(TH1F*)fragdir->Get("h_frag_photons_phi");
0824     frag_photons->at(3)=(TH1F*)fragdir->Get("h_frag_photons_eta");
0825     frag_photons_n=(TH1I*)fragdir->Get("h_frag_photon_n");
0826     photons->cd();
0827     float n_evts = (float) lead_photons->at(0)->GetEntries();
0828     //make phi and eta dist an average across events
0829     all_photons->at(2)->Scale(1/n_evts);
0830     all_photons->at(2)->SetYTitle(" N_{#gamma} / N_{evts} ");
0831     all_photons->at(3)->Scale(1/n_evts);
0832     all_photons->at(3)->SetYTitle(" N_{#gamma} / N_{evts} ");
0833     lead_photons->at(2)->Scale(1/n_evts);
0834     lead_photons->at(2)->SetYTitle(" N_{#gamma} / N_{evts} ");
0835     lead_photons->at(3)->Scale(1/n_evts);
0836     lead_photons->at(3)->SetYTitle(" N_{#gamma} / N_{evts} ");
0837     direct_photons->at(2)->Scale(1/n_evts);
0838     direct_photons->at(2)->SetYTitle(" N_{#gamma} / N_{evts} ");
0839     direct_photons->at(3)->Scale(1/n_evts);
0840     direct_photons->at(3)->SetYTitle(" N_{#gamma} / N_{evts} ");
0841     frag_photons->at(2)->Scale(1/n_evts);
0842     frag_photons->at(2)->SetYTitle(" N_{#gamma} / N_{evts} ");
0843     frag_photons->at(3)->Scale(1/n_evts);
0844     frag_photons->at(3)->SetYTitle(" N_{#gamma} / N_{evts} ");
0845     return;
0846 
0847 }
0848 void PlotJetObs(std::vector<TH1F*>* herwig_obs, std::vector<TH1F*>* pythia_obs, TCanvas* obs_canv)
0849 {
0850     //just does the plotting of one variable at a time
0851     TLegend* l_data=new TLegend(0.7, 0.4, 1, 0.58);
0852     TLegend* l_header=new TLegend(0.5, 0.6, 0.7, 1);
0853     conf->SetsPhenixHeaderLegend(l_header, tag);
0854     l_header->AddEntry("", std::format("Jet {}", herwig_obs->at(0)->GetXaxis()->GetTitle()).c_str(), "");
0855     conf->SetLegend(l_data);
0856     l_data->SetNColumns(3);
0857     std::vector<TPad*>* pads=conf->AddPads(obs_canv);
0858     std::string var=herwig_obs->at(0)->GetXaxis()->GetTitle();
0859     bool ispt = false;
0860     if(var.find("p_{T}") !=std::string::npos) ispt=true;
0861     if(ispt)
0862     {
0863         conf->ScaleXS(herwig_obs, true);
0864         conf->ScaleXS(pythia_obs, false);
0865         pads->at(1)->SetLogy();
0866     }
0867     else if(var.find("[GeV]") != std::string::npos) pads->at(1)->SetLogy();
0868     pads->at(1)->cd();
0869     THStack* herwig = new THStack("herwig", "herwig");
0870     THStack* pythia = new THStack("herwig", "herwig");
0871     for(int i= 0 ; i <(int)herwig_obs->size()-1;  i++)
0872     {
0873         pads->at(1)->cd();
0874         herwig_obs->at(i)->SetMarkerStyle(i+20);
0875         herwig_obs->at(i)->SetMarkerSize(2);
0876         if(i==5) herwig_obs->at(i)->SetMarkerStyle(33);
0877         else if(i==6) herwig_obs->at(i)->SetMarkerStyle(34);
0878         herwig->Add(herwig_obs->at(i));
0879         pythia_obs->at(i)->SetLineColor(herwig_obs->at(i)->GetLineColor());
0880         pythia_obs->at(i)->SetMarkerColor(herwig_obs->at(i)->GetMarkerColor());
0881         pythia_obs->at(i)->SetMarkerStyle(i+24);
0882         pythia_obs->at(i)->SetMarkerSize(2);
0883         pythia->Add(pythia_obs->at(i));
0884         l_data->AddEntry(herwig_obs->at(i), std::format("Herwig {}", herwig_obs->at(i)->GetTitle()).c_str());
0885         l_data->AddEntry(pythia_obs->at(i), std::format("Pythia ", pythia_obs->at(i)->GetTitle()).c_str());
0886         pads->at(0)->cd();
0887         TH1F* h_ratio = conf->GetRatioPlot(herwig_obs->at(i), pythia_obs->at(i));
0888         h_ratio->SetMarkerStyle(2*i+37);
0889         h_ratio->Draw("plc pmc same e1");
0890         l_data->AddEntry(h_ratio);
0891     }
0892     pads->at(1)->cd();
0893     bool herwig_high = false;
0894     if (herwig->GetMaximum() > pythia->GetMaximum() ) herwig_high=true;
0895     if (herwig_high) herwig->Draw("axis nostack");
0896     else pythia->Draw("axis nostack");
0897     herwig->Draw("plc pmc nostack same e1");
0898     pythia->Draw("plc pmc same nostack e1");
0899     pythia->GetXaxis()->SetTitle(herwig_obs->at(0)->GetXaxis()->GetTitle());
0900     pythia->GetYaxis()->SetTitle(herwig_obs->at(0)->GetYaxis()->GetTitle());
0901     l_data->Draw();
0902     l_header->Draw();
0903     obs_canv->cd();
0904     pads->at(0)->Draw();
0905     pads->at(1)->Draw();
0906     return;
0907 }
0908 void PlotJetObs(std::vector<TH1I*>* herwig_obs, std::vector<TH1I*>* pythia_obs, TCanvas* obs_canv)
0909 {
0910     //just does the plotting of one variable at a time
0911     TLegend* l_data=new TLegend(0.6, 0.3, 1, 0.5);
0912     TLegend* l_header=new TLegend(0.8, 0.6, 1, 1);
0913     conf->SetsPhenixHeaderLegend(l_header, tag);
0914     conf->SetLegend(l_data);
0915     l_data->SetNColumns(3);
0916     std::vector<TPad*>* pads=conf->AddPads(obs_canv);
0917     conf->ScaleXS(herwig_obs, true);
0918     conf->ScaleXS(pythia_obs, false);
0919     THStack* herwig = new THStack("herwig", "herwig");
0920     THStack* pythia = new THStack("herwig", "herwig");
0921     for(int i=0; i<(int)herwig_obs->size(); i++)
0922     {
0923         pads->at(1)->cd();
0924         herwig_obs->at(i)->SetMarkerStyle(i+20);
0925         herwig_obs->at(i)->SetMarkerSize(2);
0926         if(i==5) herwig_obs->at(i)->SetMarkerStyle(33);
0927         else if(i==6) herwig_obs->at(i)->SetMarkerStyle(34);
0928         herwig->Add(herwig_obs->at(i));
0929         pythia_obs->at(i)->SetMarkerStyle(i+24);
0930         pythia_obs->at(i)->SetMarkerSize(2);
0931         pythia->Add(pythia_obs->at(i));
0932         l_data->AddEntry(herwig_obs->at(i), std::format("Herwig {}", herwig_obs->at(i)->GetTitle()).c_str());
0933         l_data->AddEntry(pythia_obs->at(i), std::format("Pythia {}", pythia_obs->at(i)->GetTitle()).c_str());
0934         pads->at(0)->cd();
0935         TH1I* h_ratio = conf->GetRatioPlot(herwig_obs->at(i), pythia_obs->at(i));
0936         h_ratio->SetMarkerStyle(2*(i)+37);
0937         h_ratio->Draw("same plc pmc");
0938         l_data->AddEntry(h_ratio);
0939     }
0940     pads->at(1)->cd();
0941     pads->at(1)->SetLogy();
0942     l_data->Draw();
0943     l_header->Draw();
0944     bool herwig_high = false;
0945     if (herwig->GetMaximum() > pythia->GetMaximum() ) herwig_high=true;
0946     if (herwig_high) herwig->Draw("axis");
0947     else pythia->Draw("axis");
0948     herwig->Draw("plc pmc nostack same e1");
0949     pythia->Draw("plc pmc same nostack e1");
0950     pythia->GetXaxis()->SetTitle(herwig_obs->at(0)->GetXaxis()->GetTitle());
0951     pythia->GetYaxis()->SetTitle(herwig_obs->at(0)->GetYaxis()->GetTitle());
0952 
0953     obs_canv->cd();
0954     pads->at(0)->Draw();
0955     pads->at(1)->Draw();
0956     return;
0957 }
0958 void PlotPhotonObs(TH1F* herwig_obs, TH1F* pythia_obs, TCanvas* obs_canv, int i)
0959 {
0960     //just does the plotting of one variable at a time
0961     TLegend* l_data=new TLegend(0.6, 0.3, 1, 0.5);
0962     TLegend* l_header=new TLegend(0.8, 0.6, 1, 1);
0963     conf->SetsPhenixHeaderLegend(l_header, tag);
0964     conf->SetLegend(l_data);
0965     l_data->SetNColumns(3);
0966     std::vector<TPad*>* pads=conf->AddPads(obs_canv);
0967     conf->ScaleXS(herwig_obs, true);
0968     conf->ScaleXS(pythia_obs, false);
0969     pads->at(1)->cd();
0970     herwig_obs->SetMarkerStyle(i+20);
0971     herwig_obs->SetMarkerSize(2);
0972     if(i==5) herwig_obs->SetMarkerStyle(33);
0973     else if(i==6) herwig_obs->SetMarkerStyle(34);
0974     THStack* st=new THStack("s1", "s1");
0975     st->Add(herwig_obs);
0976     pythia_obs->SetMarkerStyle(i+24);
0977     pythia_obs->SetMarkerSize(2);
0978     st->Add(pythia_obs);
0979     st->Draw("axis");
0980     st->Draw("plc pmc nostack same e1");
0981     l_data->AddEntry(herwig_obs, std::format("Herwig {}", herwig_obs->GetTitle()).c_str());
0982     l_data->AddEntry(pythia_obs, std::format("Pythia {}", pythia_obs->GetTitle()).c_str());
0983     pads->at(0)->cd();
0984     TH1F* h_ratio = conf->GetRatioPlot(herwig_obs, pythia_obs);
0985     h_ratio->SetMarkerStyle(2*(i)+37);
0986     h_ratio->Draw("same");
0987     l_data->AddEntry(h_ratio);
0988     pads->at(1)->cd();
0989     l_data->Draw();
0990     obs_canv->cd();
0991     pads->at(0)->Draw();
0992     pads->at(1)->Draw();
0993     return;
0994 }
0995 void PlotPhotonObs(TH1I* herwig_obs, TH1I* pythia_obs, TCanvas* obs_canv, int i)
0996 {
0997     //just does the plotting of one variable at a time
0998     TLegend* l_data=new TLegend(0.6, 0.3, 1, 0.5);
0999     TLegend* l_header=new TLegend(0.8, 0.6, 1, 1);
1000     conf->SetsPhenixHeaderLegend(l_header, tag);
1001     conf->SetLegend(l_data);
1002     l_data->SetNColumns(3);
1003     std::vector<TPad*>* pads=conf->AddPads(obs_canv);
1004     conf->ScaleXS(herwig_obs, true);
1005     conf->ScaleXS(pythia_obs, false);
1006     pads->at(1)->cd();
1007     herwig_obs->SetLineColor((i)*22+1);
1008     herwig_obs->SetMarkerColor(i*22+1);
1009     herwig_obs->SetMarkerStyle(i+20);
1010     herwig_obs->SetMarkerSize(2);
1011     if(i==5) herwig_obs->SetMarkerStyle(33);
1012     else if(i==6) herwig_obs->SetMarkerStyle(34);
1013     herwig_obs->Draw("same e1");
1014     pythia_obs->SetLineColor((i)*22+1);
1015     pythia_obs->SetMarkerColor((i)*22+1);
1016     pythia_obs->SetMarkerStyle(i+24);
1017     pythia_obs->SetMarkerSize(2);
1018     pythia_obs->Draw("same e1");
1019     l_data->AddEntry(herwig_obs, std::format("Herwig {}", herwig_obs->GetTitle()).c_str());
1020     l_data->AddEntry(pythia_obs, std::format("Pythia {}", pythia_obs->GetTitle()).c_str());
1021     pads->at(0)->cd();
1022     TH1I* h_ratio = conf->GetRatioPlot(herwig_obs, pythia_obs);
1023     h_ratio->SetMarkerStyle(2*(i)+37);
1024     h_ratio->Draw("same");
1025     l_data->AddEntry(h_ratio);
1026     pads->at(1)->cd();
1027     l_data->Draw();
1028     obs_canv->cd();
1029     pads->at(0)->Draw();
1030     pads->at(1)->Draw();
1031     return;
1032 }
1033 void PlotJetPlots(TDirectory* herwig_jets, TDirectory* pythia_jets, std::vector<TCanvas*>*Canvi)
1034 {
1035     //all Jets
1036     std::vector<TH1F*>* herwig_pt       = new std::vector<TH1F*> ();
1037     std::vector<TH1F*>* herwig_e        = new std::vector<TH1F*> ();
1038     std::vector<TH1F*>* herwig_phi      = new std::vector<TH1F*> ();
1039     std::vector<TH1F*>* herwig_eta      = new std::vector<TH1F*> ();
1040     std::vector<TH1I*>* herwig_n_jets   = new std::vector<TH1I*> ();
1041     std::vector<TH1I*>* herwig_n_comp   = new std::vector<TH1I*> ();
1042     std::array<std::vector<TH1F*>*, 4>* herwig_jet_array =new std::array<std::vector<TH1F*>*, 4>();
1043     herwig_jet_array->at(0)=herwig_pt;
1044     herwig_jet_array->at(1)=herwig_e;
1045     herwig_jet_array->at(2)=herwig_phi;
1046     herwig_jet_array->at(3)=herwig_eta;
1047     //lead Jets
1048     std::vector<TH1F*>* herwig_lead_pt  = new std::vector<TH1F*> ();
1049     std::vector<TH1F*>* herwig_lead_e   = new std::vector<TH1F*> ();
1050     std::vector<TH1F*>* herwig_lead_phi = new std::vector<TH1F*> ();
1051     std::vector<TH1F*>* herwig_lead_eta = new std::vector<TH1F*> ();
1052     std::vector<TH1I*>* herwig_lead_n_comp  = new std::vector<TH1I*> ();
1053     std::array<std::vector<TH1F*>*, 4>* herwig_lead_jet_array =new std::array<std::vector<TH1F*>*, 4>();
1054     herwig_lead_jet_array->at(0)=herwig_lead_pt;
1055     herwig_lead_jet_array->at(1)=herwig_lead_e;
1056     herwig_lead_jet_array->at(2)=herwig_lead_phi;
1057     herwig_lead_jet_array->at(3)=herwig_lead_eta;
1058 
1059     CollectJets(herwig_jets, herwig_jet_array, herwig_lead_jet_array, herwig_n_jets, herwig_n_comp, herwig_lead_n_comp);
1060     //all Jets
1061     std::vector<TH1F*>* pythia_pt       = new std::vector<TH1F*> ();
1062     std::vector<TH1F*>* pythia_e        = new std::vector<TH1F*> ();
1063     std::vector<TH1F*>* pythia_phi      = new std::vector<TH1F*> ();
1064     std::vector<TH1F*>* pythia_eta      = new std::vector<TH1F*> ();
1065     std::vector<TH1I*>* pythia_n_jets   = new std::vector<TH1I*> ();
1066     std::vector<TH1I*>* pythia_n_comp   = new std::vector<TH1I*> ();
1067     std::array<std::vector<TH1F*>*, 4>* pythia_jet_array =new std::array<std::vector<TH1F*>*, 4>();
1068     pythia_jet_array->at(0)=pythia_pt;
1069     pythia_jet_array->at(1)=pythia_e;
1070     pythia_jet_array->at(2)=pythia_phi;
1071     pythia_jet_array->at(3)=pythia_eta;
1072     //lead Jets
1073     std::vector<TH1F*>* pythia_lead_pt  = new std::vector<TH1F*> ();
1074     std::vector<TH1F*>* pythia_lead_e   = new std::vector<TH1F*> ();
1075     std::vector<TH1F*>* pythia_lead_phi = new std::vector<TH1F*> ();
1076     std::vector<TH1F*>* pythia_lead_eta = new std::vector<TH1F*> ();
1077     std::vector<TH1I*>* pythia_lead_n_comp  = new std::vector<TH1I*> ();
1078     std::array<std::vector<TH1F*>*, 4>* pythia_lead_jet_array =new std::array<std::vector<TH1F*>*, 4>();
1079     pythia_lead_jet_array->at(0)=pythia_lead_pt;
1080     pythia_lead_jet_array->at(1)=pythia_lead_e;
1081     pythia_lead_jet_array->at(2)=pythia_lead_phi;
1082     pythia_lead_jet_array->at(3)=pythia_lead_eta;
1083     CollectJets(pythia_jets, pythia_jet_array, pythia_lead_jet_array, pythia_n_jets, pythia_n_comp, pythia_lead_n_comp);
1084     TCanvas* J_pt=new TCanvas("jet_pt", "jet_pt");
1085     PlotJetObs(herwig_jet_array->at(0), pythia_jet_array->at(0), J_pt);
1086     J_pt->SetLogy();
1087     TCanvas* J_l_pt=new TCanvas("jet_l_pt", "jet_l_pt");
1088     PlotJetObs(herwig_lead_jet_array->at(0), pythia_lead_jet_array->at(0), J_l_pt);
1089     J_l_pt->SetLogy();
1090     TCanvas* J_e=new TCanvas("jet_e", "jet_e");
1091     PlotJetObs(herwig_jet_array->at(1), pythia_jet_array->at(1), J_e);
1092     J_e->SetLogy();
1093     TCanvas* J_l_e=new TCanvas("jet_l_e", "jet_l_e");
1094     PlotJetObs(herwig_lead_jet_array->at(1), pythia_lead_jet_array->at(1), J_l_e);
1095     J_l_e->SetLogy();
1096     TCanvas* J_phi=new TCanvas("jet_phi", "jet_phi");
1097     PlotJetObs(herwig_jet_array->at(2), pythia_jet_array->at(2), J_phi);
1098     TCanvas* J_l_phi=new TCanvas("jet_l_phi", "jet_l_phi");
1099     PlotJetObs(herwig_lead_jet_array->at(2), pythia_lead_jet_array->at(2), J_l_phi);
1100     TCanvas* J_eta=new TCanvas("jet_eta", "jet_eta");
1101     PlotJetObs(herwig_jet_array->at(3), pythia_jet_array->at(3), J_eta);
1102     TCanvas* J_l_eta=new TCanvas("jet_l_eta", "jet_l_eta");
1103     PlotJetObs(herwig_lead_jet_array->at(3), pythia_lead_jet_array->at(3), J_l_eta);
1104     TCanvas* J_n_comp=new TCanvas("jet_n_comp", "jet_n_comp");
1105     PlotJetObs(herwig_n_comp, pythia_n_comp, J_n_comp);
1106     TCanvas* J_l_n_comp=new TCanvas("jet_l_n_comp", "jet_l_n_comp");
1107     PlotJetObs(herwig_lead_n_comp, pythia_lead_n_comp, J_l_n_comp);
1108     TCanvas* J_N=new TCanvas("jet_N", "jet_N");
1109     PlotJetObs(herwig_n_jets, pythia_n_jets, J_N);
1110 
1111     Canvi->push_back(J_pt);
1112     Canvi->push_back(J_l_pt);
1113     Canvi->push_back(J_e);
1114     Canvi->push_back(J_l_e);
1115     Canvi->push_back(J_phi);
1116     Canvi->push_back(J_l_phi);
1117     Canvi->push_back(J_eta);
1118     Canvi->push_back(J_l_eta);
1119     Canvi->push_back(J_n_comp);
1120     Canvi->push_back(J_l_n_comp);
1121     Canvi->push_back(J_N);
1122     
1123     storage->cd();
1124     TDirectory* hwj=(TDirectory*)storage->mkdir("Herwig_jets");
1125     hwj->cd();
1126     for(int i=0; i<(int)herwig_pt->size(); i++) herwig_pt->at(i)->Write();
1127     for(int i=0; i<(int)herwig_lead_pt->size(); i++) herwig_lead_pt->at(i)->Write();
1128     storage->cd();
1129     TDirectory* pj=(TDirectory*)storage->mkdir("Pythia_jets");
1130     pj->cd();
1131     for(int i=0; i<(int)pythia_pt->size(); i++) pythia_pt->at(i)->Write();
1132     for(int i=0; i<(int)pythia_lead_pt->size(); i++) pythia_lead_pt->at(i)->Write();
1133     storage->cd();
1134     
1135     return;
1136     
1137 }
1138 
1139 void PlotPhotonPlots(TDirectory* herwig_photons, TDirectory* pythia_photons, std::vector<TCanvas*>*Canvi)
1140 {
1141     //all Photons
1142     TH1F* herwig_pt     {};
1143     TH1F* herwig_e      {};
1144     TH1F* herwig_phi        {};
1145     TH1F* herwig_eta        {};
1146     TH1I* herwig_n_photons  {};
1147     std::array<TH1F*, 4>* herwig_photon_array =new std::array<TH1F*, 4>();
1148     herwig_photon_array->at(0)=herwig_pt;
1149     herwig_photon_array->at(1)=herwig_e;
1150     herwig_photon_array->at(2)=herwig_phi;
1151     herwig_photon_array->at(3)=herwig_eta;
1152     //lead Photons
1153     TH1F* herwig_lead_pt    {};
1154     TH1F* herwig_lead_e {};
1155     TH1F* herwig_lead_phi   {};
1156     TH1F* herwig_lead_eta   {};
1157     std::array<TH1F*, 4>* herwig_lead_photon_array =new std::array<TH1F*, 4>();
1158     herwig_lead_photon_array->at(0)=herwig_lead_pt;
1159     herwig_lead_photon_array->at(1)=herwig_lead_e;
1160     herwig_lead_photon_array->at(2)=herwig_lead_phi;
1161     herwig_lead_photon_array->at(3)=herwig_lead_eta;
1162     //direct Photons
1163     TH1F* herwig_direct_pt      {};
1164     TH1F* herwig_direct_e       {};
1165     TH1F* herwig_direct_phi     {};
1166     TH1F* herwig_direct_eta     {};
1167     TH1I* herwig_direct_n_photons   {};
1168     std::array<TH1F*, 4>* herwig_direct_photon_array =new std::array<TH1F*, 4>();
1169     herwig_direct_photon_array->at(0)=herwig_direct_pt;
1170     herwig_direct_photon_array->at(1)=herwig_direct_e;
1171     herwig_direct_photon_array->at(2)=herwig_direct_phi;
1172     herwig_direct_photon_array->at(3)=herwig_direct_eta;
1173     //all Photons
1174     TH1F* herwig_frag_pt        {};
1175     TH1F* herwig_frag_e     {};
1176     TH1F* herwig_frag_phi       {};
1177     TH1F* herwig_frag_eta       {};
1178     TH1I* herwig_frag_n_photons {};
1179     std::array<TH1F*, 4>* herwig_frag_photon_array =new std::array<TH1F*, 4>();
1180     herwig_frag_photon_array->at(0)=herwig_frag_pt;
1181     herwig_frag_photon_array->at(1)=herwig_frag_e;
1182     herwig_frag_photon_array->at(2)=herwig_frag_phi;
1183     herwig_frag_photon_array->at(3)=herwig_frag_eta;
1184     CollectPhotons(herwig_photons, herwig_photon_array, herwig_lead_photon_array, herwig_direct_photon_array, herwig_frag_photon_array, herwig_n_photons, herwig_direct_n_photons, herwig_frag_n_photons);
1185     
1186     //all Photons
1187     TH1F* pythia_pt     {};
1188     TH1F* pythia_e      {};
1189     TH1F* pythia_phi        {};
1190     TH1F* pythia_eta        {};
1191     TH1I* pythia_n_photons  {};
1192     std::array<TH1F*, 4>* pythia_photon_array =new std::array<TH1F*, 4>();
1193     pythia_photon_array->at(0)=pythia_pt;
1194     pythia_photon_array->at(1)=pythia_e;
1195     pythia_photon_array->at(2)=pythia_phi;
1196     pythia_photon_array->at(3)=pythia_eta;
1197     //lead Photons
1198     TH1F* pythia_lead_pt    {};
1199     TH1F* pythia_lead_e {};
1200     TH1F* pythia_lead_phi   {};
1201     TH1F* pythia_lead_eta   {};
1202     std::array<TH1F*, 4>* pythia_lead_photon_array =new std::array<TH1F*, 4>();
1203     pythia_lead_photon_array->at(0)=pythia_lead_pt;
1204     pythia_lead_photon_array->at(1)=pythia_lead_e;
1205     pythia_lead_photon_array->at(2)=pythia_lead_phi;
1206     pythia_lead_photon_array->at(3)=pythia_lead_eta;
1207     //direct Photons
1208     TH1F* pythia_direct_pt      {};
1209     TH1F* pythia_direct_e       {};
1210     TH1F* pythia_direct_phi     {};
1211     TH1F* pythia_direct_eta     {};
1212     TH1I* pythia_direct_n_photons   {};
1213     std::array<TH1F*, 4>* pythia_direct_photon_array =new std::array<TH1F*, 4>();
1214     pythia_direct_photon_array->at(0)=pythia_direct_pt;
1215     pythia_direct_photon_array->at(1)=pythia_direct_e;
1216     pythia_direct_photon_array->at(2)=pythia_direct_phi;
1217     pythia_direct_photon_array->at(3)=pythia_direct_eta;
1218     //all Photons
1219     TH1F* pythia_frag_pt        {};
1220     TH1F* pythia_frag_e     {};
1221     TH1F* pythia_frag_phi       {};
1222     TH1F* pythia_frag_eta       {};
1223     TH1I* pythia_frag_n_photons {};
1224     std::array<TH1F*, 4>* pythia_frag_photon_array =new std::array<TH1F*, 4>();
1225     pythia_frag_photon_array->at(0)=pythia_frag_pt;
1226     pythia_frag_photon_array->at(1)=pythia_frag_e;
1227     pythia_frag_photon_array->at(2)=pythia_frag_phi;
1228     pythia_frag_photon_array->at(3)=pythia_frag_eta;
1229     CollectPhotons(pythia_photons, pythia_photon_array, pythia_lead_photon_array, pythia_direct_photon_array, pythia_frag_photon_array, pythia_n_photons, pythia_direct_n_photons, pythia_frag_n_photons);
1230     
1231     TCanvas* J_pt=new TCanvas("photon_pt", "photon_pt");
1232     PlotPhotonObs(herwig_photon_array->at(0), pythia_photon_array->at(0), J_pt, 0);
1233     TCanvas* J_l_pt=new TCanvas("photon_l_pt", "photon_l_pt");
1234     PlotPhotonObs(herwig_lead_photon_array->at(0), pythia_lead_photon_array->at(0), J_l_pt, 1);
1235     TCanvas* J_e=new TCanvas("photon_e", "photon_e");
1236     PlotPhotonObs(herwig_photon_array->at(1), pythia_photon_array->at(1), J_e, 0);
1237     TCanvas* J_l_e=new TCanvas("photon_l_e", "photon_l_e");
1238     PlotPhotonObs(herwig_lead_photon_array->at(1), pythia_lead_photon_array->at(1), J_l_e, 1);
1239     TCanvas* J_phi=new TCanvas("photon_phi", "photon_phi");
1240     PlotPhotonObs(herwig_photon_array->at(2), pythia_photon_array->at(2), J_phi, 0);
1241     TCanvas* J_l_phi=new TCanvas("photon_l_pt", "photon_l_pt");
1242     PlotPhotonObs(herwig_lead_photon_array->at(2), pythia_lead_photon_array->at(2), J_l_phi, 1);
1243     TCanvas* J_eta=new TCanvas("photon_eta", "photon_eta");
1244     PlotPhotonObs(herwig_photon_array->at(3), pythia_photon_array->at(3), J_eta, 0);
1245     TCanvas* J_l_eta=new TCanvas("photon_l_eta", "photon_l_eta");
1246     PlotPhotonObs(herwig_lead_photon_array->at(3), pythia_lead_photon_array->at(3), J_l_eta, 1);
1247     TCanvas* J_N=new TCanvas("photon_N", "photon_N");
1248     PlotPhotonObs(herwig_n_photons, pythia_n_photons, J_N, 0);
1249 
1250     Canvi->push_back(J_pt);
1251     Canvi->push_back(J_l_pt);
1252     Canvi->push_back(J_e);
1253     Canvi->push_back(J_l_e);
1254     Canvi->push_back(J_phi);
1255     Canvi->push_back(J_l_phi);
1256     Canvi->push_back(J_eta);
1257     Canvi->push_back(J_l_eta);
1258     Canvi->push_back(J_N);
1259     
1260     TCanvas* J_d_pt=new TCanvas("direct_photon_pt", "direct_photon_pt");
1261     PlotPhotonObs(herwig_direct_photon_array->at(0), pythia_direct_photon_array->at(0), J_d_pt, 2);
1262     TCanvas* J_f_pt=new TCanvas("frag_photon_pt", "frag_photon_pt");
1263     PlotPhotonObs(herwig_frag_photon_array->at(0), pythia_frag_photon_array->at(0), J_f_pt, 3);
1264     TCanvas* J_d_e=new TCanvas("direct_photone", "direct_photone");
1265     PlotPhotonObs(herwig_direct_photon_array->at(1), pythia_direct_photon_array->at(1), J_d_e, 2);
1266     TCanvas* J_f_e=new TCanvas("frag_photon_e", "frag_photon_e");
1267     PlotPhotonObs(herwig_frag_photon_array->at(1), pythia_frag_photon_array->at(1), J_f_e, 3);
1268     TCanvas* J_d_phi=new TCanvas("direct_photonphi", "direct_photonphi");
1269     PlotPhotonObs(herwig_direct_photon_array->at(2), pythia_direct_photon_array->at(2), J_d_phi, 2);
1270     TCanvas* J_f_phi=new TCanvas("frag_photon_pt", "frag_photon_pt");
1271     PlotPhotonObs(herwig_frag_photon_array->at(2), pythia_frag_photon_array->at(2), J_f_phi, 3);
1272     TCanvas* J_d_eta=new TCanvas("direct_photoneta", "direct_photoneta");
1273     PlotPhotonObs(herwig_direct_photon_array->at(3), pythia_direct_photon_array->at(3), J_d_eta, 2);
1274     TCanvas* J_f_eta=new TCanvas("frag_photon_eta", "frag_photon_eta");
1275     PlotPhotonObs(herwig_frag_photon_array->at(3), pythia_frag_photon_array->at(3), J_f_eta, 3);
1276     TCanvas* J_d_N=new TCanvas("direct_photonN", "direct_photonN");
1277     PlotPhotonObs(herwig_direct_n_photons, pythia_direct_n_photons, J_d_N, 2);
1278     TCanvas* J_f_N=new TCanvas("frag_photonN", "frag_photonN");
1279     PlotPhotonObs(herwig_direct_n_photons, pythia_frag_n_photons, J_f_N, 3);
1280 
1281     Canvi->push_back(J_d_pt);
1282     Canvi->push_back(J_f_pt);
1283     Canvi->push_back(J_d_e);
1284     Canvi->push_back(J_f_e);
1285     Canvi->push_back(J_d_phi);
1286     Canvi->push_back(J_f_phi);
1287     Canvi->push_back(J_d_eta);
1288     Canvi->push_back(J_f_eta);
1289     Canvi->push_back(J_d_N);
1290     Canvi->push_back(J_f_N);
1291     return;
1292     
1293 }
1294 void PlotPhotonJetPlots(TDirectory* herwig_photons, TDirectory* pythia_photons, std::vector<TCanvas*>* Canvi)
1295 {
1296     //mainly 2D plots so I have to change the approach a bit here 
1297     TDirectory* H_pj = (TDirectory*)herwig_photons->GetDirectory("Photon-Jets");
1298     std::vector<TH2F*>* herwig_pt       = new std::vector<TH2F*> ();
1299     std::vector<TH2F*>* herwig_eta      = new std::vector<TH2F*> ();
1300     std::vector<TH2F*>* herwig_phi      = new std::vector<TH2F*> ();
1301     std::vector<TH2F*>* herwig_e        = new std::vector<TH2F*> ();
1302     std::vector<TH1F*>* herwig_dphi     = new std::vector<TH1F*> ();
1303     //CollectPhotonJets(H_pj, herwig_pt, herwig_eta, herwig_phi, herwig_e, herwig_dphi);
1304 
1305     TDirectory* P_pj = (TDirectory*)pythia_photons->GetDirectory("Photon-Jets");
1306     std::vector<TH2F*>* pythia_pt       = new std::vector<TH2F*> ();
1307     std::vector<TH2F*>* pythia_eta      = new std::vector<TH2F*> ();
1308     std::vector<TH2F*>* pythia_phi      = new std::vector<TH2F*> ();
1309     std::vector<TH2F*>* pythia_e        = new std::vector<TH2F*> ();
1310     std::vector<TH1F*>* pythia_dphi     = new std::vector<TH1F*> ();
1311     //CollectPhotonJets(P_pj, pythia_pt, pythia_eta, pythia_phi, pythia_e, pythia_dphi);
1312     
1313     TCanvas* J_pt=new TCanvas("photon_jet_pt");
1314     TCanvas* J_h_pt=new TCanvas("herwig_photon_jet_pt");
1315     TCanvas* J_p_pt=new TCanvas("pythia_photon_jet_pt");
1316     PlotPhotonJetObs(herwig_pt, pythia_pt, J_pt, J_h_pt, J_p_pt); 
1317     
1318     TCanvas* J_eta=new TCanvas("photon_jet_eta");
1319     TCanvas* J_h_eta=new TCanvas("photon_herwig_jet_eta");
1320     TCanvas* J_p_eta=new TCanvas("pythia_photon_jet_eta");
1321     PlotPhotonJetObs(herwig_eta, pythia_eta, J_eta, J_h_eta, J_p_eta); 
1322 
1323     TCanvas* J_phi=new TCanvas("photon_herwig_jet_phi");
1324     TCanvas* J_h_phi=new TCanvas("photon_herwig_jet_phi");
1325     TCanvas* J_p_phi=new TCanvas("pythia_photon_jet_phi");
1326     PlotPhotonJetObs(herwig_phi, pythia_phi, J_phi, J_h_phi, J_p_phi); 
1327 
1328     TCanvas* J_e=new TCanvas("photon_herwig_jet_e");
1329     TCanvas* J_h_e=new TCanvas("photon_herwig_jet_e");
1330     TCanvas* J_p_e=new TCanvas("pythia_photon_jet_e");
1331     PlotPhotonJetObs(herwig_e, pythia_e, J_e, J_h_e, J_p_e); 
1332 
1333         TCanvas* J_dphi=new TCanvas("photon_jet_dphi");
1334     PlotJetObs(herwig_dphi, pythia_dphi, J_dphi);
1335     Canvi->push_back(J_dphi);
1336     return;
1337 }
1338 void DoAllThePlotting(TFile* herwig_file, TFile* pythia_file, std::string trigger_tag="Jet30", float herwig_xs=1., float pythia_xs=1.)
1339 {
1340     //this does all the plotting of Pythia vrs herwig
1341     SetsPhenixStyle();  
1342     storage=new TFile(std::format("{}_scaled_pt.root", trigger_tag).c_str(), "RECREATE");
1343     conf =  new HerwigQAPlottingConfig(herwig_xs, pythia_xs);
1344     style_points=new Skaydis_colors();
1345     gStyle->SetPalette(100, style_points->Trans_gradient_PT);   
1346     conf->ExtractType(herwig_file);
1347     std::map<std::string, TDirectory*> top_dirs;
1348     std::vector<TCanvas*>* Canvi =new std::vector<TCanvas*> ();
1349     tag=trigger_tag;
1350     std::cout<<"Tag is: " <<tag<<std::endl;
1351     std::cout<<"isPhotons: " <<conf->isPhoton() <<std::endl;
1352     //find the relevant directories
1353     if(conf->isJet() || trigger_tag.find("MB") != std::string::npos){
1354         TDirectory* HJets=(TDirectory*)herwig_file->GetDirectory("Jets");
1355         TDirectory* PJets=(TDirectory*)pythia_file->GetDirectory("Jets");
1356         top_dirs["herwig jets"]=HJets;
1357         top_dirs["pythia jets"]=PJets;
1358         PlotJetPlots(HJets, PJets, Canvi);
1359     }
1360     if(conf->isPhoton() || trigger_tag.find("MB") == std::string::npos )
1361     {
1362         TDirectory* HPh=(TDirectory*)herwig_file->GetDirectory("Photons");
1363         TDirectory* PPh=(TDirectory*)pythia_file->GetDirectory("Photons");
1364         top_dirs["herwig photons"]=HPh;
1365         top_dirs["pythia photons"]=PPh;
1366         PlotPhotonPlots(HPh, PPh, Canvi);
1367     }
1368     if(conf->isPhoton() && conf->isJet() && trigger_tag.find("MB") == std::string::npos)
1369     {
1370         PlotPhotonJetPlots(top_dirs["herwig photons"], top_dirs["pythia photons"], Canvi);
1371     }
1372 
1373     TDirectory* HEvent=(TDirectory*)herwig_file->GetDirectory("Event");
1374     TDirectory* PEvent=(TDirectory*)pythia_file->GetDirectory("Event");
1375     top_dirs["herwig event"]=HEvent;
1376     top_dirs["pythia event"]=PEvent;    
1377     PlotEventPlots(HEvent, PEvent, Canvi);
1378     conf->DumpHistos(std::format("~/{}_output.pdf", trigger_tag), Canvi);
1379     storage->cd();
1380     storage->Write();
1381     storage->Close();
1382     return;
1383 }
1384 
1385 #endif