Back to home page

EIC code displayed by LXR

 
 

    


Warning, file /snippets/JetsAndHF/JetValidation/MakeJetValidationPlots.C was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 // ============================================================================
0002 //! \file    MakeJetValidationPlots.C
0003 //! \authors Brian Page (bpage@bnl.gov),
0004 //!          adapted by Derek Anderson (derek.murphy.anderson@protonmail.com)
0005 // ----------------------------------------------------------------------------
0006 //! \brief Adaption of the Jet Benchmark to run standalone for validation.
0007 //!   This macro generates plots from the output file produced by
0008 //!   `MakeJetValidationHists.C`.
0009 //!
0010 //! \usage In eic-shell:
0011 //!     root -b -q MakeJetValidationPlots.C'(<output path>, \
0012 //!                                          <output suffix>, \
0013 //!                                          <input file>)'
0014 // ============================================================================
0015 
0016 #include <edm4eic/EDM4eicVersion.h>
0017 #include <TCanvas.h>
0018 #include <TFile.h>
0019 #include <TGraph.h>
0020 #include <TH1D.h>
0021 #include <TH2D.h>
0022 #include <string>
0023 
0024 #include "fmt/color.h"
0025 #include "fmt/core.h"
0026 
0027 ///! Default output file path.
0028 const std::string DefaultOutPath = ".";
0029 
0030 ///! Default output file suffix.
0031 const std::string DefaultOutSuffix = "files26071.py8ncdis10x100q100t1000";
0032 
0033 ///! Default input file.
0034 const std::string DefaultInFile = "hists.files26071.py8ncdis10x100q100t1000.root";
0035 
0036 // ----------------------------------------------------------------------------
0037 // Macro body
0038 // ----------------------------------------------------------------------------
0039 /*! Process input ROOT file to generate a set of reconstructed,
0040  *! generated jet plots and save them as PNG files.
0041  *!
0042  *! \param[out] results_path   Location to save PNGs to
0043  *! \param[out] results_suffix Suffix to append to PNGs
0044  *! \param[in]  input_file     Input ROOT file to use
0045  */
0046 int MakeJetValidationPlots(
0047   const std::string& results_path = DefaultOutPath,
0048   const std::string& results_suffix = DefaultOutSuffix,
0049   const std::string& input_file = DefaultInFile
0050 ) {
0051 
0052   const bool PRINT = true;
0053 
0054   const int seabornRed = TColor::GetColor(213, 94, 0);
0055 
0056   // Seaborn Green: #009E73 -> (0, 158, 115)
0057   const int seabornGreen = TColor::GetColor(0, 158, 115);
0058 
0059   // Seaborn Blue: #56B4E9 -> (86, 180, 233)
0060   const int seabornBlue = TColor::GetColor(100, 149, 237);
0061 
0062   // Get input histograms
0063   TFile* in_file = new TFile(input_file.c_str(), "read");
0064   if (!in_file) {
0065     std::cerr << "PANIC: Couldn't open input file:\n  " << input_file << std::endl;
0066     return 1;
0067   }
0068 
0069   // Check if area histograms exist
0070   //   --> Using jet EDM if they do!
0071   bool useNewEDM = false;
0072 #if EDM4EIC_BUILD_VERSION >= EDM4EIC_VERSION(8,9,0)
0073   {
0074     TH1D* recoAreaHistTest = (TH1D*) in_file->Get("recoChargedJetAreaECut");
0075     if (recoAreaHistTest) {
0076       useNewEDM = true;
0077     }
0078   }
0079 #endif
0080   if (PRINT) {
0081     std::cout << "INFO: Using new EDM? " << useNewEDM << std::endl;
0082   }
0083 
0084   // Reco
0085   TH1D *numRecoChargedJetsECutHist = (TH1D*) in_file->Get("numRecoChargedJetsECut");
0086   TH1D *recoChargedJetEHist = (TH1D*) in_file->Get("recoChargedJetE");
0087   TH1D *recoChargedJetEtaECutHist = (TH1D*) in_file->Get("recoChargedJetEtaECut");
0088   TH1D *recoChargedJetAreaECutHist = nullptr;
0089   TH2D *recoChargedJetEvsAreaHist = nullptr;
0090   if (useNewEDM) {
0091     recoChargedJetAreaECutHist = (TH1D*) in_file->Get("recoChargedJetAreaECut");
0092     recoChargedJetEvsAreaHist = (TH2D*) in_file->Get("recoChargedJetEvsArea");
0093   }
0094   TH2D *recoChargedJetEvsEtaHist = (TH2D*) in_file->Get("recoChargedJetEvsEta");
0095   TH2D *recoChargedJetPhiVsEtaECutHist = (TH2D*) in_file->Get("recoChargedJetPhiVsEtaECut");
0096 
0097   TH1D *numRecoChargedJetsECutNoElecHist = (TH1D*) in_file->Get("numRecoChargedJetsECutNoElec");
0098   TH1D *recoChargedJetENoElecHist = (TH1D*) in_file->Get("recoChargedJetENoElec");
0099   TH1D *recoChargedJetEtaECutNoElecHist = (TH1D*) in_file->Get("recoChargedJetEtaECutNoElec");
0100   TH1D *recoChargedJetAreaECutNoElecHist = nullptr;
0101   TH2D *recoChargedJetEvsAreaNoElecHist = nullptr;
0102   if (useNewEDM) {
0103     recoChargedJetAreaECutNoElecHist = (TH1D*) in_file->Get("recoHargedJetAreaECutNoElec");
0104     recoChargedJetEvsAreaNoElecHist = (TH2D*) in_file->Get("recoChargedJetEvsAreaNoElec");
0105   }
0106   TH2D *recoChargedJetEvsEtaNoElecHist = (TH2D*) in_file->Get("recoChargedJetEvsEtaNoElec");
0107   TH2D *recoChargedJetPhiVsEtaECutNoElecHist = (TH2D*) in_file->Get("recoChargedJetPhiVsEtaECutNoElec");
0108 
0109   TH1D *numRecoChargedJetPartsHist = (TH1D*) in_file->Get("numRecoChargedJetParts");
0110   TH1D *recoChargedJetPartPHist = (TH1D*) in_file->Get("recoChargedJetPartP");
0111   TH1D *recoChargedJetPartEtaHist = (TH1D*) in_file->Get("recoChargedJetPartEta");
0112   TH2D *recoChargedJetPartPvsEtaHist = (TH2D*) in_file->Get("recoChargedJetPartPvsEta");
0113   TH2D *recoChargedJetPartPhiVsEtaHist = (TH2D*) in_file->Get("recoChargedJetPartPhiVsEta");
0114 
0115   TH1D *numRecoChargedJetPartsNoElecHist = (TH1D*) in_file->Get("numRecoChargedJetPartsNoElec");
0116   TH1D *recoChargedJetPartPNoElecHist = (TH1D*) in_file->Get("recoChargedJetPartPNoElec");
0117   TH1D *recoChargedJetPartEtaNoElecHist = (TH1D*) in_file->Get("recoChargedJetPartEtaNoElec");
0118   TH2D *recoChargedJetPartPvsEtaNoElecHist = (TH2D*) in_file->Get("recoChargedJetPartPvsEtaNoElec");
0119   TH2D *recoChargedJetPartPhiVsEtaNoElecHist = (TH2D*) in_file->Get("recoChargedJetPartPhiVsEtaNoElec");
0120 
0121   TH1D *recoChargedJetPartPairwiseDeltaRHist = (TH1D*) in_file->Get("recoChargedJetPartPairwiseDeltaRHist");
0122 
0123   // Gen
0124   TH1D *numGenChargedJetsECutHist = (TH1D*) in_file->Get("numGenChargedJetsECut");
0125   TH1D *genChargedJetEHist = (TH1D*) in_file->Get("genChargedJetE");
0126   TH1D *genChargedJetEtaECutHist = (TH1D*) in_file->Get("genChargedJetEtaECut");
0127   TH1D *genChargedJetAreaECutHist = nullptr;
0128   TH2D *genChargedJetEvsAreaHist = nullptr;
0129   if (useNewEDM) {
0130     genChargedJetAreaECutHist = (TH1D*) in_file->Get("genChargedJetAreaECut");
0131     genChargedJetEvsAreaHist = (TH2D*) in_file->Get("genChargedJetEvsAreaHist");
0132   }
0133   TH2D *genChargedJetEvsEtaHist = (TH2D*) in_file->Get("genChargedJetEvsEta");
0134   TH2D *genChargedJetPhiVsEtaECutHist = (TH2D*) in_file->Get("genChargedJetPhiVsEtaECut");
0135 
0136   TH1D *numGenChargedJetsECutNoElecHist = (TH1D*) in_file->Get("numGenChargedJetsECutNoElec");
0137   TH1D *genChargedJetENoElecHist = (TH1D*) in_file->Get("genChargedJetENoElec");
0138   TH1D *genChargedJetEtaECutNoElecHist = (TH1D*) in_file->Get("genChargedJetEtaECutNoElec");
0139   TH1D *genChargedJetAreaECutNoElecHist = nullptr;
0140   TH2D *genChargedJetEvsAreaNoElecHist = nullptr;
0141   if (useNewEDM) {
0142     genChargedJetAreaECutNoElecHist = (TH1D*) in_file->Get("genChargedJetAreaECutNoElec");
0143     genChargedJetEvsAreaNoElecHist = (TH2D*) in_file->Get("genChargedJetEvsAreaNoElec");
0144   }
0145   TH2D *genChargedJetEvsEtaNoElecHist = (TH2D*) in_file->Get("genChargedJetEvsEtaNoElec");
0146   TH2D *genChargedJetPhiVsEtaECutNoElecHist = (TH2D*) in_file->Get("genChargedJetPhiVsEtaECutNoElec");
0147 
0148   TH1D *numGenChargedJetPartsHist = (TH1D*) in_file->Get("numGenChargedJetParts");
0149   TH1D *genChargedJetPartPHist = (TH1D*) in_file->Get("genChargedJetPartP");
0150   TH1D *genChargedJetPartEtaHist = (TH1D*) in_file->Get("genChargedJetPartEta");
0151   TH2D *genChargedJetPartPvsEtaHist = (TH2D*) in_file->Get("genChargedJetPartPvsEta");
0152   TH2D *genChargedJetPartPhiVsEtaHist = (TH2D*) in_file->Get("genChargedJetPartPhiVsEta");
0153 
0154   TH1D *numGenChargedJetPartsNoElecHist = (TH1D*) in_file->Get("numGenChargedJetPartsNoElec");
0155   TH1D *genChargedJetPartPNoElecHist = (TH1D*) in_file->Get("genChargedJetPartPNoElec");
0156   TH1D *genChargedJetPartEtaNoElecHist = (TH1D*) in_file->Get("genChargedJetPartEtaNoElec");
0157   TH2D *genChargedJetPartPvsEtaNoElecHist = (TH2D*) in_file->Get("genChargedJetPartPvsEtaNoElec");
0158   TH2D *genChargedJetPartPhiVsEtaNoElecHist = (TH2D*) in_file->Get("genChargedJetPartPhiVsEtaNoElec");
0159 
0160   TH1D *genChargedJetPartPairwiseDeltaRHist = (TH1D*) in_file->Get("genChargedJetPartPairwiseDeltaRHist");
0161 
0162   // Matched
0163   TH1D *matchJetDeltaRHist = (TH1D*) in_file->Get("matchJetDeltaR");
0164   TH1D *matchJetDeltaRBackHist = (TH1D*) in_file->Get("matchJetDeltaRBack");
0165   TH2D *recoVsGenChargedJetEtaHist = (TH2D*) in_file->Get("recoVsGenChargedJetEta");
0166   TH2D *recoVsGenChargedJetPhiHist = (TH2D*) in_file->Get("recoVsGenChargedJetPhi");
0167   TH2D *recoVsGenChargedJetAreaHist = nullptr;
0168   if (useNewEDM) {
0169     recoVsGenChargedJetAreaHist = (TH2D*) in_file->Get("recoVsGenChargedJetArea");
0170   }
0171   TH2D *recoVsGenChargedJetEHist = (TH2D*) in_file->Get("recoVsGenChargedJetE");
0172   TH2D *recoVsGenChargedJetENoDRHist = (TH2D*) in_file->Get("recoVsGenChargedJetENoDRHist");
0173   TH2D *recoVsGenChargedJetENoDupHist = (TH2D*) in_file->Get("recoVsGenChargedJetENoDup");
0174 
0175   TH2D *jetResVsEtaHist = (TH2D*) in_file->Get("jetResVsEta");
0176   TH2D *jetResVsEHist = (TH2D*) in_file->Get("jetResVsE");
0177   TH2D *jetResVsENegEtaHist = (TH2D*) in_file->Get("jetResVsENegEta");
0178   TH2D *jetResVsEMidEtaHist = (TH2D*) in_file->Get("jetResVsEMidEta");
0179   TH2D *jetResVsEPosEtaHist = (TH2D*) in_file->Get("jetResVsEPosEta");
0180 
0181   TH2D *jetResVsENegEtaNoDupHist = (TH2D*) in_file->Get("jetResVsENegEtaNoDup");
0182   TH2D *jetResVsEMidEtaNoDupHist = (TH2D*) in_file->Get("jetResVsEMidEtaNoDup");
0183   TH2D *jetResVsEPosEtaNoDupHist = (TH2D*) in_file->Get("jetResVsEPosEtaNoDup");
0184 
0185   gStyle->SetOptStat(0);
0186   ////////////////////////  Reconstructed Jets Plots  ////////////////////////
0187   // Reco Number
0188   TCanvas *c1 = new TCanvas("c1","Number Reco Jets",800,600);
0189   c1->Clear();
0190   c1->Divide(1,1);
0191 
0192   c1->cd(1);
0193   numRecoChargedJetsECutHist->Draw("HIST");
0194   numRecoChargedJetsECutNoElecHist->SetLineColor(seabornRed);
0195   numRecoChargedJetsECutNoElecHist->Draw("HISTSAME");
0196   numRecoChargedJetsECutHist->SetLineWidth(2); // Set line width to 2 (adjust as needed)
0197 numRecoChargedJetsECutNoElecHist->SetLineWidth(2);
0198   numRecoChargedJetsECutHist->SetTitle("Reconstructed Jets per Event (|eta| < 2.5 && E > 5);Number");
0199 
0200 TLegend *legend1 = new TLegend(0.7, 0.7, 0.9, 0.9); // Adjust the coordinates as needed
0201 legend1->AddEntry(numRecoChargedJetsECutHist, "With Electrons", "l");
0202 legend1->AddEntry(numRecoChargedJetsECutNoElecHist, "No Electrons", "l");
0203 legend1->Draw();
0204 
0205 
0206 
0207   gPad->SetLogy();
0208   if(PRINT) c1->Print((results_path+"/numberRecoJets."+results_suffix+".png").c_str()); // Number of reconstructed jets per event with energy > 5 GeV and Abs(eta) < 2.5
0209    delete c1;
0210 
0211   // Reco Energy
0212   TCanvas *c2 = new TCanvas("c2","Reco Jet Energy",800,600);
0213   c2->Clear();
0214   c2->Divide(1,1);
0215 
0216   c2->cd(1);
0217   recoChargedJetEHist->Draw("HIST");
0218   recoChargedJetENoElecHist->SetLineColor(seabornRed);
0219   recoChargedJetENoElecHist->Draw("HISTSAME");
0220 
0221   recoChargedJetEHist->SetLineWidth(2);
0222   recoChargedJetENoElecHist->SetLineWidth(2);
0223   recoChargedJetEHist->SetTitle("Reconstructed Jet Energy (|eta| < 2.5);Energy [GeV]");
0224 
0225 TLegend *legend2 = new TLegend(0.7, 0.7, 0.9, 0.9); // Adjust the coordinates as needed
0226 legend2->AddEntry(recoChargedJetEHist, "With Electrons", "l");
0227 legend2->AddEntry(recoChargedJetENoElecHist, "No Electrons", "l");
0228 legend2->Draw();
0229 
0230   gPad->SetLogy();
0231   if(PRINT) c2->Print((results_path+"/recoJetEnergy."+results_suffix+".png").c_str()); // Energy spectrum of reconstructed jets with Abs(eta) < 2.5
0232 
0233     delete c2;
0234   // Reco Eta
0235   TCanvas *c3 = new TCanvas("c3","Reco Jet Eta",800,600);
0236   c3->Clear();
0237   c3->Divide(1,1);
0238 
0239   c3->cd(1);
0240   recoChargedJetEtaECutHist->Draw("HIST");
0241   recoChargedJetEtaECutNoElecHist->SetLineColor(seabornRed);
0242   recoChargedJetEtaECutNoElecHist->Draw("HISTSAME");
0243 
0244   recoChargedJetEtaECutHist->SetLineWidth(2);
0245   recoChargedJetEtaECutNoElecHist->SetLineWidth(2);
0246   recoChargedJetEtaECutHist->SetTitle("Reconstructed Jet Eta (E > 5);Eta");
0247 
0248 //add legend 
0249 TLegend *legend3 = new TLegend(0.7, 0.7, 0.9, 0.9); // Adjust the coordinates as needed
0250 legend3->AddEntry(recoChargedJetEtaECutHist, "With Electrons", "l");
0251 legend3->AddEntry(recoChargedJetEtaECutNoElecHist, "No Electrons", "l");
0252 legend3->Draw();
0253 
0254   gPad->SetLogy();
0255   if(PRINT) c3->Print((results_path+"/recoJetEta."+results_suffix+".png").c_str()); // Eta spectrum of reconstructed jets with energy > 5 GeV
0256     delete c3;
0257 
0258   // Reco Area
0259   if(useNewEDM) {
0260     TCanvas *c3_1 = new TCanvas("c3_1","Reco Jet Area",800,600);
0261     c3_1->Clear();
0262     c3_1->Divide(1,1);
0263 
0264     c3_1->cd(1);
0265     recoChargedJetAreaECutHist->Draw("HIST");
0266     recoChargedJetAreaECutNoElecHist->SetLineColor(seabornRed);
0267     recoChargedJetAreaECutNoElecHist->Draw("HISTSAME");
0268 
0269     recoChargedJetAreaECutHist->SetLineWidth(2);
0270     recoChargedJetAreaECutNoElecHist->SetLineWidth(2);
0271     recoChargedJetAreaECutHist->SetTitle("Reconstructed Jet Area (E > 5);Area");
0272 
0273     //add legend
0274     TLegend *legend3_1 = new TLegend(0.7, 0.7, 0.9, 0.9); // Adjust the coordinates as needed
0275     legend3_1->AddEntry(recoChargedJetAreaECutHist, "With Electrons", "l");
0276     legend3_1->AddEntry(recoChargedJetAreaECutNoElecHist, "No Electrons", "l");
0277     legend3_1->Draw();
0278 
0279     gPad->SetLogy();
0280     if(PRINT) c3_1->Print((results_path+"/recoJetArea."+results_suffix+".png").c_str()); // Area spectrum of reconstructed jets with energy > 5 GeV
0281       delete c3_1;
0282    }
0283 
0284   // Reco E Vs Eta
0285   TCanvas *c4 = new TCanvas("c4","Reco Jet E Vs Eta",800,600);
0286   c4->Clear();
0287   c4->Divide(1,1);
0288 
0289   c4->cd(1);
0290   recoChargedJetEvsEtaHist->Draw("COLZ");
0291   recoChargedJetEvsEtaHist->SetTitle("Reconstructed Jet Energy Vs Eta;Eta;Energy [GeV]");
0292   gPad->SetLogz();
0293   if(PRINT) c4->Print((results_path+"/recoJetEnergyvsEta."+results_suffix+".png").c_str()); // Energy vs eta of reconstructed jets
0294 
0295   // Reco E Vs Area
0296   if (useNewEDM) {
0297     TCanvas *c4_1 = new TCanvas("c4_1","Reco Jet E Vs Area",800,600);
0298     c4_1->Clear();
0299     c4_1->Divide(1,1);
0300 
0301     c4_1->cd(1);
0302     recoChargedJetEvsAreaHist->Draw("COLZ");
0303     recoChargedJetEvsAreaHist->SetTitle("Reconstructed Jet Energy Vs Area;Area;Energy [GeV]");
0304     gPad->SetLogz();
0305     if(PRINT) c4_1->Print((results_path+"/recoJetEnergyvsArea."+results_suffix+".png").c_str()); // Energy vs area of reconstructed jets
0306   }
0307 
0308   // Reco Phi Vs Eta
0309   TCanvas *c5 = new TCanvas("c5","Reco Jet Phi Vs Eta",800,600);
0310   c5->Clear();
0311   c5->Divide(1,1);
0312 
0313   c5->cd(1);
0314   recoChargedJetPhiVsEtaECutHist->Draw("COLZ");
0315   recoChargedJetPhiVsEtaECutHist->SetTitle("Reconstructed Jet Phi Vs Eta (E > 5);Eta;Phi");
0316   gPad->SetLogz();
0317   if(PRINT) c5->Print((results_path+"/recoJetPhivsEta."+results_suffix+".png").c_str()); // Phi vs eta of reconstructed jets
0318 
0319   // Num Particles Per Reco Jet
0320   TCanvas *c6 = new TCanvas("c6","Number Constituents Per Reco Jet",800,600);
0321   c6->Clear();
0322   c6->Divide(1,1);
0323 
0324   c6->cd(1);
0325   numRecoChargedJetPartsHist->Draw("HIST");
0326   numRecoChargedJetPartsNoElecHist->SetLineColor(seabornRed);
0327   numRecoChargedJetPartsNoElecHist->Draw("HISTSAME");
0328 
0329   numRecoChargedJetPartsHist->SetLineWidth(2);
0330   numRecoChargedJetPartsNoElecHist->SetLineWidth(2);
0331   numRecoChargedJetPartsHist->SetTitle("Number of Constituents Per Reco Jet;Number of Constituents");
0332 
0333 TLegend *legend6 = new TLegend(0.7, 0.7, 0.9, 0.9); // Adjust the coordinates as needed
0334 legend6->AddEntry(numRecoChargedJetPartsHist, "With Electrons", "l");
0335 legend6->AddEntry(numRecoChargedJetPartsNoElecHist, "No Electrons", "l");
0336 legend6->Draw();
0337 
0338   gPad->SetLogy();
0339   if(PRINT) c6->Print((results_path+"/numConstituentsPerRecoJet."+results_suffix+".png").c_str()); // Number of constituents in reconstructed jets
0340 
0341   // Reco Part Energy
0342   TCanvas *c7 = new TCanvas("c7","Reco Jet Constituent Momentum",800,600);
0343   c7->Clear();
0344   c7->Divide(1,1);
0345 
0346   c7->cd(1);
0347   recoChargedJetPartPHist->Draw("HIST");
0348   recoChargedJetPartPNoElecHist->SetLineColor(seabornRed);
0349   recoChargedJetPartPNoElecHist->Draw("HISTSAME");
0350 
0351   recoChargedJetPartPHist->SetLineWidth(2);
0352   recoChargedJetPartPNoElecHist->SetLineWidth(2);
0353   recoChargedJetPartPHist->SetTitle("Reconstructed Jet Constituent Momentum;Momentum [GeV/c]");
0354 
0355   TLegend *legend7 = new TLegend(0.7, 0.7, 0.9, 0.9); // Adjust the coordinates as needed
0356   legend7->AddEntry(recoChargedJetPartPHist, "With Electrons", "l");
0357   legend7->AddEntry(recoChargedJetPartPNoElecHist, "No Electrons", "l");
0358   legend7->Draw();
0359 
0360   gPad->SetLogy();
0361   if(PRINT) c7->Print((results_path+"/recoJetConstituentMomentum."+results_suffix+".png").c_str()); // Momentum of reconstructed jet constituents
0362 
0363   // Reco Part Eta
0364   TCanvas *c8 = new TCanvas("c8","Reco Jet Constituent Eta",800,600);
0365   c8->Clear();
0366   c8->Divide(1,1);
0367 
0368   c8->cd(1);
0369   recoChargedJetPartEtaHist->Draw("HIST");
0370   recoChargedJetPartEtaNoElecHist->SetLineColor(seabornRed);
0371   recoChargedJetPartEtaNoElecHist->Draw("HISTSAME");
0372 
0373   recoChargedJetPartEtaHist->SetLineWidth(2);
0374   recoChargedJetPartEtaNoElecHist->SetLineWidth(2);
0375 
0376   recoChargedJetPartEtaHist->SetTitle("Reconstructed Jet Constituent Eta;Eta");
0377 
0378   TLegend *legend8 = new TLegend(0.7, 0.7, 0.9, 0.9); // Adjust the coordinates as needed
0379   legend8->AddEntry(recoChargedJetPartEtaHist, "With Electrons", "l");
0380   legend8->AddEntry(recoChargedJetPartEtaNoElecHist, "No Electrons", "l");
0381   legend8->Draw();
0382 
0383   gPad->SetLogy();
0384   if(PRINT) c8->Print((results_path+"/recoJetConstituentEta."+results_suffix+".png").c_str()); // Eta of reconstructed jet constituents
0385 
0386   // Reco Part P Vs Eta
0387   TCanvas *c9 = new TCanvas("c9","Reco Jet Constituent Momentum Vs Eta",800,600);
0388   c9->Clear();
0389   c9->Divide(1,1);
0390 
0391   c9->cd(1);
0392   recoChargedJetPartPvsEtaHist->Draw("COLZ");
0393   recoChargedJetPartPvsEtaHist->SetTitle("Reconstructed Jet Constituent Momentum Vs Eta;Eta;Momentum [GeV/c]");
0394   gPad->SetLogz();
0395   if(PRINT) c9->Print((results_path+"/recoJetConstituentMomentumVsEta."+results_suffix+".png").c_str()); // Momentum vs eta of reconstructed jet constituents
0396 
0397   // Reco Part Phi Vs Eta
0398   TCanvas *c10 = new TCanvas("c10","Reco Jet Constituent Phi Vs Eta",800,600);
0399   c10->Clear();
0400   c10->Divide(1,1);
0401 
0402   c10->cd(1);
0403   recoChargedJetPartPhiVsEtaHist->Draw("COLZ");
0404   recoChargedJetPartPhiVsEtaHist->SetTitle("Reconstructed Jet Constituent Phi Vs Eta;Eta;Phi");
0405   gPad->SetLogz();
0406   if(PRINT) c10->Print((results_path+"/recoJetConstituentPhiVsEta."+results_suffix+".png").c_str()); // Phi vs eta of reconstructed jet constituents
0407 
0408   // Reco Constituent Pairwise delta R
0409   TCanvas *c11 = new TCanvas("c11","Reco Jet Constituent Pairwise Delta R",800,600);
0410   c11->Clear();
0411   c11->Divide(1,1);
0412 
0413   c11->cd(1);
0414   recoChargedJetPartPairwiseDeltaRHist->Draw("COLZ");
0415   recoChargedJetPartPairwiseDeltaRHist->SetTitle("Pairwise Constituent Delta R;Delta R");
0416   recoChargedJetPartPairwiseDeltaRHist->GetXaxis()->SetRangeUser(0,0.5);
0417   gPad->SetLogy();
0418   if(PRINT) c11->Print((results_path+"/recoJetConstituentPairwiseDR."+results_suffix+".png").c_str()); // Distance between each pair of constituents in reconstructed jets
0419 
0420   // Reco E Vs Eta No Electron Jets
0421   TCanvas *c12 = new TCanvas("c12","Reco Jet E Vs Eta (No Electrons)",800,600);
0422   c12->Clear();
0423   c12->Divide(1,1);
0424 
0425   c12->cd(1);
0426   recoChargedJetEvsEtaNoElecHist->Draw("COLZ");
0427   recoChargedJetEvsEtaNoElecHist->SetTitle("Reconstructed Jet Energy Vs Eta (No Electrons);Eta;Energy [GeV]");
0428   gPad->SetLogz();
0429   if(PRINT) c12->Print((results_path+"/recoJetEnergyVsEtaNoElectron."+results_suffix+".png").c_str()); // Reconstructed jet energy - no jets containing electrons included
0430 
0431   // Reco Phi Vs Eta No Electron Jets
0432   TCanvas *c13 = new TCanvas("c13","Reco Jet Phi Vs Eta (No Electrons)",800,600);
0433   c13->Clear();
0434   c13->Divide(1,1);
0435 
0436   c13->cd(1);
0437   recoChargedJetPhiVsEtaECutNoElecHist->Draw("COLZ");
0438   recoChargedJetPhiVsEtaECutNoElecHist->SetTitle("Reconstructed Jet Phi Vs Eta (E > 5) (No Electrons);Eta;Phi");
0439   gPad->SetLogz();
0440   if(PRINT) c13->Print((results_path+"/recoJetPhiVsEtaNoElectron."+results_suffix+".png").c_str()); // Reconstructed Jet phi vs eta - no jets containing electrons included
0441 
0442   // Reco Part P Vs Eta No Electron Jets
0443   TCanvas *c14 = new TCanvas("c14","Reco Jet Constituent Momentum Vs Eta (No Electrons)",800,600);
0444   c14->Clear();
0445   c14->Divide(1,1);
0446 
0447   c14->cd(1);
0448   recoChargedJetPartPvsEtaNoElecHist->Draw("COLZ");
0449   recoChargedJetPartPvsEtaNoElecHist->SetTitle("Reconstructed Jet Constituent Momentum Vs Eta (No Electrons);Eta;Momentum [GeV/c]");
0450   gPad->SetLogz();
0451   if(PRINT) c14->Print((results_path+"/recoJetConstituentMomentumVsEtaNoElectron."+results_suffix+".png").c_str()); // Reconstructed jet constituent momentum vs eta - no jets containing electrons included
0452 
0453   // Reco Part Phi Vs Eta No Electron Jets
0454   TCanvas *c15 = new TCanvas("c15","Reco Jet Constituent Phi Vs Eta (No Electrons)",800,600);
0455   c15->Clear();
0456   c15->Divide(1,1);
0457 
0458   c15->cd(1);
0459   recoChargedJetPartPhiVsEtaNoElecHist->Draw("COLZ");
0460   recoChargedJetPartPhiVsEtaNoElecHist->SetTitle("Reconstructed Jet Constituent Phi Vs Eta (No Electrons);Eta;Phi");
0461   gPad->SetLogz();
0462   if(PRINT) c15->Print((results_path+"/recoJetConstituentPhiVsEtaNoElectron."+results_suffix+".png").c_str()); // Reconstructed jet constituent phi vs eta - no jets containing electrons included
0463 
0464   
0465   ////////////////////////  Generated Jets Plots  ////////////////////////
0466   // Gen Number
0467   TCanvas *c16 = new TCanvas("c16","Number Gen Jets",800,600);
0468   c16->Clear();
0469   c16->Divide(1,1);
0470 
0471   c16->cd(1);
0472   numGenChargedJetsECutHist->Draw("HIST");
0473   numGenChargedJetsECutNoElecHist->SetLineColor(seabornRed);
0474   numGenChargedJetsECutNoElecHist->Draw("HISTSAME");
0475 
0476   numGenChargedJetsECutHist->SetLineWidth(2);
0477   numGenChargedJetsECutNoElecHist->SetLineWidth(2);
0478 
0479   numGenChargedJetsECutHist->SetTitle("Generator Jets per Event (|eta| < 2.5 && E > 5);Number");
0480 
0481   TLegend *legend16 = new TLegend(0.7, 0.7, 0.9, 0.9); // Adjust the coordinates as needed
0482   legend16->AddEntry(numGenChargedJetsECutHist, "With Electrons", "l");
0483   legend16->AddEntry(numGenChargedJetsECutNoElecHist, "No Electrons", "l");
0484   legend16->Draw();
0485 
0486   gPad->SetLogy();
0487   if(PRINT) c16->Print((results_path+"/numberGenJets."+results_suffix+".png").c_str()); // Number of generator jets per event with energy > 5 GeV and Abs(eta) < 2.5
0488 
0489   // Gen Energy
0490   TCanvas *c17 = new TCanvas("c17","Gen Jet Energy",800,600);
0491   c17->Clear();
0492   c17->Divide(1,1);
0493 
0494   c17->cd(1);
0495   genChargedJetEHist->Draw("HIST");
0496   genChargedJetENoElecHist->SetLineColor(seabornRed);
0497   genChargedJetENoElecHist->Draw("HISTSAME");
0498 
0499   genChargedJetEHist->SetLineWidth(2);
0500   genChargedJetENoElecHist->SetLineWidth(2);
0501 
0502   genChargedJetEHist->SetTitle("Generator Jet Energy (|eta| < 2.5);Energy [GeV]");
0503   TLegend *legend17 = new TLegend(0.7, 0.7, 0.9, 0.9); // Adjust the coordinates as needed
0504   legend17->AddEntry(genChargedJetEHist, "With Electrons", "l");
0505   legend17->AddEntry(genChargedJetENoElecHist, "No Electrons", "l");
0506   legend17->Draw();
0507 
0508   gPad->SetLogy();
0509   if(PRINT) c17->Print((results_path+"/genJetEnergy."+results_suffix+".png").c_str()); // Energy spectrum of generated jets with Abs(eta) < 2.5
0510 
0511   // Gen Eta
0512   TCanvas *c18 = new TCanvas("c18","Gen Jet Eta",800,600);
0513   c18->Clear();
0514   c18->Divide(1,1);
0515 
0516   c18->cd(1);
0517   genChargedJetEtaECutHist->Draw("HIST");
0518   genChargedJetEtaECutNoElecHist->SetLineColor(seabornRed);
0519   genChargedJetEtaECutNoElecHist->Draw("HISTSAME");
0520 
0521   genChargedJetEtaECutHist->SetLineWidth(2);
0522   genChargedJetEtaECutNoElecHist->SetLineWidth(2);
0523 
0524   genChargedJetEtaECutHist->SetTitle("Generator Jet Eta (E > 5);Eta");
0525 
0526   TLegend *legend18 = new TLegend(0.7, 0.7, 0.9, 0.9); // Adjust the coordinates as needed
0527   legend18->AddEntry(genChargedJetEtaECutHist, "With Electrons", "l");
0528   legend18->AddEntry(genChargedJetEtaECutNoElecHist, "No Electrons", "l");
0529   legend18->Draw();
0530 
0531   gPad->SetLogy();
0532   if(PRINT) c18->Print((results_path+"/genJetEta."+results_suffix+".png").c_str()); // Eta spectrum of generator jets with energy > 5 GeV
0533 
0534   // Gen Area
0535   if(useNewEDM) {
0536     TCanvas *c18_1 = new TCanvas("c18_1","Gen Jet Area",800,600);
0537     c18_1->Clear();
0538     c18_1->Divide(1,1);
0539 
0540     c18_1->cd(1);
0541     genChargedJetAreaECutHist->Draw("HIST");
0542     genChargedJetAreaECutNoElecHist->SetLineColor(seabornRed);
0543     genChargedJetAreaECutNoElecHist->Draw("HISTSAME");
0544 
0545     genChargedJetAreaECutHist->SetLineWidth(2);
0546     genChargedJetAreaECutNoElecHist->SetLineWidth(2);
0547 
0548     genChargedJetAreaECutHist->SetTitle("Generator Jet Area (E > 5);Area");
0549 
0550     TLegend *legend18_1 = new TLegend(0.7, 0.7, 0.9, 0.9); // Adjust the coordinates as needed
0551     legend18_1->AddEntry(genChargedJetAreaECutHist, "With Electrons", "l");
0552     legend18_1->AddEntry(genChargedJetAreaECutNoElecHist, "No Electrons", "l");
0553     legend18_1->Draw();
0554 
0555     gPad->SetLogy();
0556     if(PRINT) c18_1->Print((results_path+"/genJetArea."+results_suffix+".png").c_str()); // Area spectrum of generator jets with energy > 5 GeV
0557   }
0558 
0559   // Gen E Vs Eta
0560   TCanvas *c19 = new TCanvas("c19","Gen Jet E Vs Eta",800,600);
0561   c19->Clear();
0562   c19->Divide(1,1);
0563 
0564   c19->cd(1);
0565   genChargedJetEvsEtaHist->Draw("COLZ");
0566   genChargedJetEvsEtaHist->SetTitle("Generator Jet Energy Vs Eta;Eta;Energy [GeV]");
0567   gPad->SetLogz();
0568   if(PRINT) c19->Print((results_path+"/genJetEnergyvsEta."+results_suffix+".png").c_str()); // Energy vs eta of generator jets
0569 
0570   // Gen E Vs Area
0571   if(useNewEDM) {
0572     TCanvas *c19_1 = new TCanvas("c19_1","Gen Jet E Vs Area",800,600);
0573     c19_1->Clear();
0574     c19_1->Divide(1,1);
0575 
0576     c19_1->cd(1);
0577     genChargedJetEvsAreaHist->Draw("COLZ");
0578     genChargedJetEvsAreaHist->SetTitle("Generator Jet Energy Vs Area;Area;Energy [GeV]");
0579     gPad->SetLogz();
0580     if(PRINT) c19_1->Print((results_path+"/genJetEnergyvsArea."+results_suffix+".png").c_str()); // Energy vs area of generator jets
0581   }
0582 
0583   // Gen Phi Vs Eta
0584   TCanvas *c20 = new TCanvas("c20","Gen Jet Phi Vs Eta",800,600);
0585   c20->Clear();
0586   c20->Divide(1,1);
0587 
0588   c20->cd(1);
0589   genChargedJetPhiVsEtaECutHist->Draw("COLZ");
0590   genChargedJetPhiVsEtaECutHist->SetTitle("Generator Jet Phi Vs Eta (E > 5);Eta;Phi");
0591   gPad->SetLogz();
0592   if(PRINT) c20->Print((results_path+"/genJetPhiVsEta."+results_suffix+".png").c_str()); // Phi vs eta of generator jets
0593 
0594   // Num Particles Per Gen Jet
0595   TCanvas *c21 = new TCanvas("c21","Number Constituents Per Gen Jet",800,600);
0596   c21->Clear();
0597   c21->Divide(1,1);
0598 
0599   c21->cd(1);
0600   numGenChargedJetPartsHist->Draw("HIST");
0601   numGenChargedJetPartsNoElecHist->SetLineColor(seabornRed);
0602   numGenChargedJetPartsNoElecHist->Draw("HISTSAME");
0603 
0604   numGenChargedJetPartsHist->SetLineWidth(2);
0605   numGenChargedJetPartsNoElecHist->SetLineWidth(2);
0606 
0607   numGenChargedJetPartsHist->SetTitle("Number of Constituents Per Gen Jet;Number of Constituents");
0608 
0609   TLegend *legend21 = new TLegend(0.7, 0.7, 0.9, 0.9); // Adjust the coordinates as needed
0610   legend21->AddEntry(numGenChargedJetPartsHist, "With Electrons", "l");
0611   legend21->AddEntry(numGenChargedJetPartsNoElecHist, "No Electrons", "l");
0612   legend21->Draw();
0613   gPad->SetLogy();
0614   if(PRINT) c21->Print((results_path+"/numConstituentsPerGenJet."+results_suffix+".png").c_str()); // Number of constituents in generator jets
0615 
0616   // Gen Part Momentum
0617   TCanvas *c22 = new TCanvas("c22","Gen Jet Constituent Momentum",800,600);
0618   c22->Clear();
0619   c22->Divide(1,1);
0620 
0621   c22->cd(1);
0622   genChargedJetPartPHist->Draw("HIST");
0623   genChargedJetPartPNoElecHist->SetLineColor(seabornRed);
0624   genChargedJetPartPNoElecHist->Draw("HISTSAME");
0625 
0626   genChargedJetPartPHist->SetLineWidth(2);
0627   genChargedJetPartPNoElecHist->SetLineWidth(2);
0628 
0629   genChargedJetPartPHist->SetTitle("Generator Jet Constituent Momentum;Momentum [GeV/c]");
0630 
0631   TLegend *legend22 = new TLegend(0.7, 0.7, 0.9, 0.9); // Adjust the coordinates as needed
0632   legend22->AddEntry(genChargedJetPartPHist, "With Electrons", "l");
0633   legend22->AddEntry(genChargedJetPartPNoElecHist, "No Electrons", "l");
0634   legend22->Draw();
0635 
0636   gPad->SetLogy();
0637   if(PRINT) c22->Print((results_path+"/genJetConstituentMomentum."+results_suffix+".png").c_str()); // Momentum of generator jet constituents
0638 
0639   // Gen Part Eta
0640   TCanvas *c23 = new TCanvas("c23","Gen Jet Constituent Eta",800,600);
0641   c23->Clear();
0642   c23->Divide(1,1);
0643 
0644   c23->cd(1);
0645   genChargedJetPartEtaHist->Draw("HIST");
0646   genChargedJetPartEtaNoElecHist->SetLineColor(seabornRed);
0647   genChargedJetPartEtaNoElecHist->Draw("HISTSAME");
0648 
0649   genChargedJetPartEtaHist->SetLineWidth(2);
0650   genChargedJetPartEtaNoElecHist->SetLineWidth(2);
0651 
0652   genChargedJetPartEtaHist->SetTitle("Generator Jet Constituent Eta;Eta");
0653 
0654   TLegend *legend23 = new TLegend(0.7, 0.7, 0.9, 0.9); // Adjust the coordinates as needed
0655   legend23->AddEntry(genChargedJetPartEtaHist, "With Electrons", "l");
0656   legend23->AddEntry(genChargedJetPartEtaNoElecHist, "No Electrons", "l");
0657   legend23->Draw();
0658 
0659   gPad->SetLogy();
0660   if(PRINT) c23->Print((results_path+"/genJetConstituentEta."+results_suffix+".png").c_str()); // Eta of generator jet constituents
0661 
0662   // Gen Part P Vs Eta
0663   TCanvas *c24 = new TCanvas("c24","Gen Jet Constituent Momentum Vs Eta",800,600);
0664   c24->Clear();
0665   c24->Divide(1,1);
0666 
0667   c24->cd(1);
0668   genChargedJetPartPvsEtaHist->Draw("COLZ");
0669   genChargedJetPartPvsEtaHist->SetTitle("Generator Jet Constituent Momentum Vs Eta;Eta;Momentum [GeV/c]");
0670   gPad->SetLogz();
0671   if(PRINT) c24->Print((results_path+"/genJetConstituentMomentumVsEta."+results_suffix+".png").c_str()); // Momentum vs eta of generator jet constituents
0672 
0673   // Gen Part Phi Vs Eta
0674   TCanvas *c25 = new TCanvas("c25","Gen Jet Constituent Phi Vs Eta",800,600);
0675   c25->Clear();
0676   c25->Divide(1,1);
0677 
0678   c25->cd(1);
0679   genChargedJetPartPhiVsEtaHist->Draw("COLZ");
0680   genChargedJetPartPhiVsEtaHist->SetTitle("Generator Jet Constituent Phi Vs Eta;Eta;Phi");
0681   gPad->SetLogz();
0682   if(PRINT) c25->Print((results_path+"/genJetConstituentPhiVsEta."+results_suffix+".png").c_str()); // Phi vs eta of generator jet constituents
0683 
0684   // Gen Constituent Pairwise delta R
0685   TCanvas *c26 = new TCanvas("c26","Gen Jet Constituent Pairwise Delta R",800,600);
0686   c26->Clear();
0687   c26->Divide(1,1);
0688 
0689   c26->cd(1);
0690   genChargedJetPartPairwiseDeltaRHist->Draw("COLZ");
0691   genChargedJetPartPairwiseDeltaRHist->SetTitle("Generator Jet Pairwise Constituent Delta R;Delta R");
0692   genChargedJetPartPairwiseDeltaRHist->GetXaxis()->SetRangeUser(0,0.5);
0693   gPad->SetLogy();
0694   if(PRINT) c26->Print((results_path+"/genJetConstituentPairwiseDR."+results_suffix+".png").c_str()); // Distance between each pair of constituents in generator jets
0695 
0696   // Gen E Vs Eta No Electron Jets
0697   TCanvas *c27 = new TCanvas("c27","Gen Jet E Vs Eta (No Electrons)",800,600);
0698   c27->Clear();
0699   c27->Divide(1,1);
0700 
0701   c27->cd(1);
0702   genChargedJetEvsEtaNoElecHist->Draw("COLZ");
0703   genChargedJetEvsEtaNoElecHist->SetTitle("Generator Jet Energy Vs Eta (No Electrons);Eta;Energy [GeV]");
0704   gPad->SetLogz();
0705   if(PRINT) c27->Print((results_path+"/genJetEnergyVsEtaNoElectron."+results_suffix+".png").c_str()); // Generator jet energy vs eta - no jets containing electrons included
0706 
0707   // Gen Phi Vs Eta No Electron Jets
0708   TCanvas *c28 = new TCanvas("c28","Gen Jet Phi Vs Eta (No Electrons)",800,600);
0709   c28->Clear();
0710   c28->Divide(1,1);
0711 
0712   c28->cd(1);
0713   genChargedJetPhiVsEtaECutNoElecHist->Draw("COLZ");
0714   genChargedJetPhiVsEtaECutNoElecHist->SetTitle("Generator Jet Phi Vs Eta (E > 5) (No Electrons);Eta;Phi");
0715   gPad->SetLogz();
0716   if(PRINT) c28->Print((results_path+"/genJetPhiVsEtaNoElectron."+results_suffix+".png").c_str()); // Generator Jet phi vs eta - no jets containing electrons included
0717 
0718   // Gen Part P Vs Eta No Electron Jets
0719   TCanvas *c29 = new TCanvas("c29","Gen Jet Constituent Momentum Vs Eta (No Electrons)",800,600);
0720   c29->Clear();
0721   c29->Divide(1,1);
0722 
0723   c29->cd(1);
0724   genChargedJetPartPvsEtaNoElecHist->Draw("COLZ");
0725   genChargedJetPartPvsEtaNoElecHist->SetTitle("Generator Jet Constituent Momentum Vs Eta (No Electrons);Eta;Momentum [GeV/c]");
0726   gPad->SetLogz();
0727   if(PRINT) c29->Print((results_path+"/genJetConstituentMomentumVsEtaNoElectron."+results_suffix+".png").c_str()); // Generator jet constituent momentum vs eta - no jets containing electrons included
0728 
0729   // Gen Part Phi Vs Eta No Electron Jets
0730   TCanvas *c30 = new TCanvas("c30","Gen Jet Constituent Phi Vs Eta (No Electrons)",800,600);
0731   c30->Clear();
0732   c30->Divide(1,1);
0733 
0734   c30->cd(1);
0735   genChargedJetPartPhiVsEtaNoElecHist->Draw("COLZ");
0736   genChargedJetPartPhiVsEtaNoElecHist->SetTitle("Generator Jet Constituent Phi Vs Eta (No Electrons);Eta;Phi");
0737   gPad->SetLogz();
0738   //c30->Print((results_path+"/recoJetEvsEta.png").c_str());
0739   if(PRINT) c30->Print((results_path+"/genJetConstituentPhiVsEtaNoElectron."+results_suffix+".png").c_str()); // Generator jet constituent phi vs eta - no jets containing electrons included
0740 
0741   
0742   ////////////////////////  Matched Jets Plots  ////////////////////////
0743   // Matched Delta R
0744   TCanvas *c31 = new TCanvas("c31","Gen - Reco Delta R",800,600);
0745   c31->Clear();
0746   c31->Divide(1,1);
0747 
0748   c31->cd(1);
0749   matchJetDeltaRHist->Draw("HIST");
0750   matchJetDeltaRBackHist->SetLineColor(seabornRed);
0751   //matchJetDeltaRBackHist->Draw("HISTSAME");
0752   matchJetDeltaRHist->SetTitle("Matched Gen - Reco Jet Delta R;Delta R");
0753   gPad->SetLogy();
0754   if(PRINT) c31->Print((results_path+"/genRecoJetDeltaR."+results_suffix+".png").c_str()); // Distance between closest generated and reconstructed jet pair
0755 
0756   // Matched Reco Vs Gen Eta
0757   TCanvas *c32 = new TCanvas("c32","Reco Vs Gen Eta",800,600);
0758   c32->Clear();
0759   c32->Divide(1,1);
0760 
0761   c32->cd(1);
0762   recoVsGenChargedJetEtaHist->Draw("COLZ");
0763   recoVsGenChargedJetEtaHist->SetTitle("Reconstructed Vs Generator Jet Eta;Gen Eta;Reco Eta");
0764   gPad->SetLogz();
0765   if(PRINT) c32->Print((results_path+"/matchedRecoVsGenJetEta."+results_suffix+".png").c_str()); // Matched Reconstructed Vs Generator Jet eta
0766 
0767   // Matched Reco Vs Gen Phi
0768   TCanvas *c33 = new TCanvas("c33","Reco Vs Gen Phi",800,600);
0769   c33->Clear();
0770   c33->Divide(1,1);
0771 
0772   c33->cd(1);
0773   recoVsGenChargedJetPhiHist->Draw("COLZ");
0774   recoVsGenChargedJetPhiHist->SetTitle("Reconstructed Vs Generator Jet Phi;Gen Phi;Reco Phi");
0775   gPad->SetLogz();
0776   if(PRINT) c33->Print((results_path+"/matchedRecoVsGenJetPhi."+results_suffix+".png").c_str()); // Matched reconstructed vs generator jet phi
0777 
0778   // Matched Reco Vs Gen Area
0779   if(useNewEDM) {
0780     TCanvas *c33_1 = new TCanvas("c33_1","Reco Vs Gen Area",800,600);
0781     c33_1->Clear();
0782     c33_1->Divide(1,1);
0783 
0784     c33_1->cd(1);
0785     recoVsGenChargedJetAreaHist->Draw("COLZ");
0786     recoVsGenChargedJetAreaHist->SetTitle("Reconstructed Vs Generator Jet Area;Gen Area;Reco Area");
0787     gPad->SetLogz();
0788     if(PRINT) c33_1->Print((results_path+"/matchedRecoVsGenJetArea."+results_suffix+".png").c_str()); // Matched reconstructed vs generator jet area
0789   }
0790 
0791   // Matched Reco Vs Gen Energy
0792   TCanvas *c34 = new TCanvas("c34","Reco Vs Gen Energy",800,600);
0793   c34->Clear();
0794   c34->Divide(1,1);
0795 
0796   TF1 *f1_34 = new TF1("f1_34","1.0*x + 0.0",1,100);
0797   TF1 *f2_34 = new TF1("f2_34","2.0*x + 0.0",1,100);
0798   TF1 *f3_34 = new TF1("f3_34","3.0*x + 0.0",1,100);
0799 
0800   c34->cd(1);
0801   recoVsGenChargedJetEHist->Draw("COLZ");
0802   recoVsGenChargedJetEHist->SetTitle("Reconstructed Vs Generator Jet Energy;Gen E;Reco E");
0803   f1_34->Draw("SAME");
0804   f2_34->Draw("SAME");
0805   f3_34->Draw("SAME");
0806   gPad->SetLogz();
0807   if(PRINT) c34->Print((results_path+"/matchedRecoVsGenJetEnergy."+results_suffix+".png").c_str()); // Matched reconstructed vs generator jet energy
0808 
0809   // Jet Res Vs Gen Eta
0810   TCanvas *c35 = new TCanvas("c35","Jet Res Vs Gen Eta",800,600);
0811   c35->Clear();
0812   c35->Divide(1,1);
0813 
0814   c35->cd(1);
0815   jetResVsEtaHist->Draw("COLZ");
0816   jetResVsEtaHist->SetTitle("(Reco - Gen)/Gen Jet Energy Vs Gen Eta;Gen Eta;Res");
0817   gPad->SetLogz();
0818   if(PRINT) c35->Print((results_path+"/matchedJetResolutionVsEta."+results_suffix+".png").c_str()); // Matched jet resolution vs generator jet eta
0819 
0820   // Jet Res Vs Gen E
0821   TCanvas *c36 = new TCanvas("c36","Jet Res Vs Gen E",800,600);
0822   c36->Clear();
0823   c36->Divide(1,1);
0824 
0825   c36->cd(1);
0826   jetResVsEHist->Draw("COLZ");
0827   jetResVsEHist->SetTitle("(Reco - Gen)/Gen Jet Energy Vs Gen Energy;Gen E;Res");
0828   gPad->SetLogz();
0829   if(PRINT) c36->Print((results_path+"/matchedJetResolutionVsEnergy."+results_suffix+".png").c_str()); // Matched jet resolution vs generator jet energy
0830 
0831   // Jet Res Vs Gen E Neg Eta
0832   TCanvas *c37 = new TCanvas("c37","Jet Res Vs Gen E (-2.5 < eta < -1.0)",800,600);
0833   c37->Clear();
0834   c37->Divide(1,1);
0835 
0836   c37->cd(1);
0837   jetResVsENegEtaNoDupHist->Draw("COLZ");
0838   jetResVsENegEtaNoDupHist->SetTitle("(Reco - Gen)/Gen Jet Energy Vs Gen Energy (-2.5 < eta < -1.0) No Duplicate;Gen E;Res");
0839   gPad->SetLogz();
0840   if(PRINT) c37->Print((results_path+"/matchedJetResolutionVsEnergyNegEta."+results_suffix+".png").c_str()); // Matched jet resolution vs generator jet energy -2.5 < eta < -1.0
0841 
0842   // Jet Res Vs Gen E Mid Eta
0843   TCanvas *c38 = new TCanvas("c38","Jet Res Vs Gen E (-1.0 < eta < 1.0)",800,600);
0844   c38->Clear();
0845   c38->Divide(1,1);
0846 
0847   c38->cd(1);
0848   jetResVsEMidEtaNoDupHist->Draw("COLZ");
0849   jetResVsEMidEtaNoDupHist->SetTitle("(Reco - Gen)/Gen Jet Energy Vs Gen Energy (-1.0 < eta < 1.0) No Duplicate;Gen E;Res");
0850   gPad->SetLogz();
0851   if(PRINT) c38->Print((results_path+"/matchedJetResolutionVsEnergyMidEta."+results_suffix+".png").c_str()); // Matched jet resolution vs generator jet energy -1.0 < eta < 1.0
0852     delete c38;
0853   // Jet Res Vs Gen E Pos Eta
0854   TCanvas *c39 = new TCanvas("c39","Jet Res Vs Gen E (1.0 < eta < 2.5)",800,600);
0855   c39->Clear();
0856   c39->Divide(1,1);
0857 
0858   c39->cd(1);
0859   jetResVsEPosEtaNoDupHist->Draw("COLZ");
0860   jetResVsEPosEtaNoDupHist->SetTitle("(Reco - Gen)/Gen Jet Energy Vs Gen Energy (1.0 < eta < 2.5) No Duplicate;Gen E;Res");
0861   gPad->SetLogz();
0862   if(PRINT) c39->Print((results_path+"/matchedJetResolutionVsEnergyPosEta."+results_suffix+".png").c_str()); // Matched jet resolution vs generator jet energy 1.0 < eta < 2.5
0863   delete c39;
0864 
0865   
0866   // Generate Resolution Plots
0867   const int BINS = 20;
0868   double binCent[BINS];
0869   double jesVsENeg[BINS];
0870   double jesVsEMid[BINS];
0871   double jesVsEPos[BINS];
0872   double jerVsENeg[BINS];
0873   double jerVsEMid[BINS];
0874   double jerVsEPos[BINS];
0875 
0876   std::fill(std::begin(binCent), std::end(binCent), -999.);
0877   std::fill(std::begin(jesVsENeg), std::end(jesVsENeg), -999.);
0878   std::fill(std::begin(jesVsEMid), std::end(jesVsEMid), -999.);
0879   std::fill(std::begin(jesVsEPos), std::end(jesVsEPos), -999.);
0880   std::fill(std::begin(jerVsENeg), std::end(jerVsENeg), -999.);
0881   std::fill(std::begin(jerVsEMid), std::end(jerVsEMid), -999.);
0882   std::fill(std::begin(jerVsEPos), std::end(jerVsEPos), -999.);
0883 
0884   TH1D *pxA = jetResVsENegEtaNoDupHist->ProjectionX("pxA",1,10000);
0885   for(int i=0; i<BINS; i++)
0886     {
0887       binCent[i] = pxA->GetBinCenter(i+1);
0888     }
0889 
0890   TCanvas *c40 = new TCanvas("c40","Negative Rapidity Fit Results",800,600);
0891   c40->Clear();
0892   c40->Divide(5,4);
0893 
0894   TH1D *hA[20];
0895   for(int i=1; i<21; i++)
0896     {
0897       hA[i-1] = (TH1D *)jetResVsENegEtaNoDupHist->ProjectionY(Form("projYA_%d",i),i,i);
0898 
0899       TF1 *myGausA = new TF1("myGausA","gaus",-0.5,0.5);
0900       myGausA->SetParameters(hA[i-1]->GetMaximum(),0.0,0.01);
0901 
0902       c40->cd(i);
0903       //hA[i-1]->Draw("HIST");
0904       hA[i-1]->Fit("myGausA","B","",-0.5,0.5);
0905       hA[i-1]->GetXaxis()->SetRangeUser(-1,1);
0906       gPad->SetLogy();
0907 
0908       if(hA[i-1]->GetEntries() > 2)
0909     {
0910       auto fA = hA[i-1]->GetFunction("myGausA");
0911 
0912       if(fA->GetParError(2)/fA->GetParameter(2) < 0.5)
0913         {
0914           jesVsENeg[i-1] = fA->GetParameter(1);
0915           jerVsENeg[i-1] = fA->GetParameter(2);
0916         }
0917       //cout << fA->GetParameter(0) << " " << fA->GetParameter(1) << " " << fA->GetParameter(2) << endl;
0918       //cout << fA->GetParError(0) << " " << fA->GetParError(1) << " " << fA->GetParError(2) << endl;
0919     }
0920     }
0921   if(PRINT) c40->Print((results_path+"/matchedJetResolutionVsEnergyNegEtaFitSummary."+results_suffix+".png").c_str()); // Matched jet resolution vs generator jet energy -2.5 < eta < -1.0 fits
0922     delete c40;
0923 
0924   TCanvas *c41 = new TCanvas("c41","Mid Rapidity Fit Results",800,600);
0925   c41->Clear();
0926   c41->Divide(5,4);
0927 
0928   TH1D *hB[20];
0929   for(int i=1; i<21; i++)
0930     {
0931       hB[i-1] = (TH1D *)jetResVsEMidEtaNoDupHist->ProjectionY(Form("projYB_%d",i),i,i);
0932 
0933       TF1 *myGausB = new TF1("myGausB","gaus",-0.5,0.5);
0934       myGausB->SetParameters(hB[i-1]->GetMaximum(),0.0,0.01);
0935 
0936       c41->cd(i);
0937       //hA[i-1]->Draw("HIST");
0938       hB[i-1]->Fit("myGausB","B","",-0.5,0.5);
0939       hB[i-1]->GetXaxis()->SetRangeUser(-1,1);
0940       gPad->SetLogy();
0941 
0942       if(hB[i-1]->GetEntries() > 2)
0943     {
0944       auto fB = hB[i-1]->GetFunction("myGausB");
0945 
0946       if(fB->GetParError(2)/fB->GetParameter(2) < 0.5)
0947         {
0948           jesVsEMid[i-1] = fB->GetParameter(1);
0949           jerVsEMid[i-1] = fB->GetParameter(2);
0950         }
0951       //cout << fB->GetParameter(0) << " " << fB->GetParameter(1) << " " << fB->GetParameter(2) << endl;
0952       //cout << fB->GetParError(0) << " " << fB->GetParError(1) << " " << fB->GetParError(2) << endl;
0953     }
0954     }
0955   if(PRINT) c41->Print((results_path+"/matchedJetResolutionVsEnergyMidEtaFitSummary."+results_suffix+".png").c_str()); // Matched jet resolution vs generator jet energy -1.0 < eta < 1.0 fits
0956     delete c41;
0957 
0958   TCanvas *c42 = new TCanvas("c42","Positive Rapidity Fit Results",800,600);
0959   c42->Clear();
0960   c42->Divide(5,4);
0961 
0962   TH1D *hC[20];
0963   for(int i=1; i<21; i++)
0964     {
0965       hC[i-1] = (TH1D *)jetResVsEPosEtaNoDupHist->ProjectionY(Form("projYC_%d",i),i,i);
0966 
0967       TF1 *myGausC = new TF1("myGausC","gaus",-0.5,0.5);
0968       myGausC->SetParameters(hC[i-1]->GetMaximum(),0.0,0.01);
0969 
0970       c42->cd(i);
0971       //hA[i-1]->Draw("HIST");
0972       hC[i-1]->Fit("myGausC","B","",-0.5,0.5);
0973       hC[i-1]->GetXaxis()->SetRangeUser(-1,1);
0974       gPad->SetLogy();
0975 
0976       if(hC[i-1]->GetEntries() > 2)
0977     {
0978       auto fC = hC[i-1]->GetFunction("myGausC");
0979 
0980       if(fC->GetParError(2)/fC->GetParameter(2) < 0.5)
0981         {
0982           jesVsEPos[i-1] = fC->GetParameter(1);
0983           jerVsEPos[i-1] = fC->GetParameter(2);
0984         }
0985       //cout << fC->GetParameter(0) << " " << fC->GetParameter(1) << " " << fC->GetParameter(2) << endl;
0986       //cout << fC->GetParError(0) << " " << fC->GetParError(1) << " " << fC->GetParError(2) << endl;
0987     }
0988     }
0989   if(PRINT) c42->Print((results_path+"/matchedJetResolutionVsEnergyPosEtaFitSummary."+results_suffix+".png").c_str()); // Matched jet resolution vs generator jet energy 1.0 < eta < 2.5 fits
0990     delete c42;
0991   TCanvas *c43 = new TCanvas("c43","Positive JES/JER",800,600);
0992   c43->Clear();
0993   c43->Divide(1,1);
0994 
0995   TGraph *gJESvsENeg = new TGraph(BINS,binCent,jesVsENeg);
0996   TGraph *gJERvsENeg = new TGraph(BINS,binCent,jerVsENeg);
0997 
0998   TGraph *gJESvsEMid = new TGraph(BINS,binCent,jesVsEMid);
0999   TGraph *gJERvsEMid = new TGraph(BINS,binCent,jerVsEMid);
1000 
1001   TGraph *gJESvsEPos = new TGraph(BINS,binCent,jesVsEPos);
1002   TGraph *gJERvsEPos = new TGraph(BINS,binCent,jerVsEPos);
1003 
1004   TH2D *test43 = new TH2D("test43","Jet Energy Scale / Resolution Vs Eta;True Eta;JES/JER",1,0.,100.,1,-0.2,0.2);
1005   test43->Draw();
1006 
1007   c43->cd(1);
1008   gJERvsENeg->Draw("*");
1009   gJERvsENeg->SetMarkerStyle(21);
1010   gJERvsENeg->SetMarkerSize(1);
1011   gJERvsENeg->SetMarkerColor(seabornBlue);
1012 
1013   gJESvsENeg->Draw("*");
1014   gJESvsENeg->SetMarkerStyle(26);
1015   gJESvsENeg->SetMarkerSize(1);
1016   gJESvsENeg->SetMarkerColor(seabornBlue);
1017 
1018   gJERvsEMid->Draw("*");
1019   gJERvsEMid->SetMarkerStyle(21);
1020   gJERvsEMid->SetMarkerSize(1);
1021   gJERvsEMid->SetMarkerColor(seabornRed);
1022 
1023   gJESvsEMid->Draw("*");
1024   gJESvsEMid->SetMarkerStyle(26);
1025   gJESvsEMid->SetMarkerSize(1);
1026   gJESvsEMid->SetMarkerColor(seabornRed);
1027 
1028   gJERvsEPos->Draw("*");
1029   gJERvsEPos->SetMarkerStyle(21);
1030   gJERvsEPos->SetMarkerSize(1);
1031   gJERvsEPos->SetMarkerColor(seabornGreen);
1032 
1033   gJESvsEPos->Draw("*");
1034   gJESvsEPos->SetMarkerStyle(26);
1035   gJESvsEPos->SetMarkerSize(1);
1036   gJESvsEPos->SetMarkerColor(seabornGreen);
1037 
1038   TLegend *legend = new TLegend(0.7,0.7,0.9,0.9); 
1039   legend->AddEntry(gJERvsENeg, "JER, (-2.5 < #eta < -1)", "p");
1040   legend->AddEntry(gJESvsENeg, "JES, (-2.5 < #eta < -1)","p");
1041   legend->AddEntry(gJERvsEMid, "JER, (-1 < #eta < 1)", "p");
1042   legend->AddEntry(gJESvsEMid, "JES, (-1 < #eta < 1)", "p");
1043   legend->AddEntry(gJERvsEPos, "JER, (1 < #eta < 2.5) ", "p");
1044   legend->AddEntry(gJESvsEPos, "JES, (1 < #eta < 2.5)", "p");
1045   legend->Draw();
1046 
1047   if(PRINT) c43->Print((results_path+"/matchedJetScaleResolutionSummary."+results_suffix+".png").c_str()); // Matched jet JER/JES summary
1048     delete c43;
1049 
1050   return 0;
1051 }