File indexing completed on 2025-12-18 10:45:04
0001 #include "common_bench/benchmark.h"
0002 #include "common_bench/mt.h"
0003 #include "common_bench/util.h"
0004 #include "common_bench/plot.h"
0005
0006 #include <TCanvas.h>
0007 #include <TChain.h>
0008 #include <TFile.h>
0009 #include <TGraph.h>
0010 #include <TH1D.h>
0011 #include <TH2D.h>
0012 #include <TTreeReader.h>
0013 #include <TTreeReaderArray.h>
0014 #include <TLegend.h>
0015 #include <TVector3.h>
0016
0017 #include "fmt/color.h"
0018 #include "fmt/core.h"
0019
0020 #include "nlohmann/json.hpp"
0021
0022
0023
0024
0025
0026
0027 int jets(const std::string& config_name)
0028 {
0029
0030 std::ifstream config_file{config_name};
0031 nlohmann::json config;
0032 config_file >> config;
0033
0034 const std::string rec_file = config["rec_file"];
0035 const std::string detector = config["detector"];
0036 const std::string results_path = config["results_path"];
0037 const std::string plot_tag = config["plot_tag"];
0038 const std::string test_tag = config["test_tag"];
0039 const int ebeam = config["ebeam"];
0040 const int pbeam = config["pbeam"];
0041
0042 fmt::print(fmt::emphasis::bold | fg(fmt::color::forest_green),
0043 "Running jet analysis...\n");
0044 fmt::print(" - Detector package: {}\n", detector);
0045 fmt::print(" - input file: {}\n", rec_file);
0046 fmt::print(" - test tag: {}\n", test_tag);
0047 fmt::print(" - ebeam: {}\n", ebeam);
0048 fmt::print(" - pbeam: {}\n", pbeam);
0049
0050 const bool PRINT = true;
0051
0052
0053 TChain *mychain = new TChain("events");
0054 mychain->Add(rec_file.c_str());
0055
0056 const int seabornRed = TColor::GetColor(213, 94, 0);
0057
0058
0059 const int seabornGreen = TColor::GetColor(0, 158, 115);
0060
0061
0062 const int seabornBlue = TColor::GetColor(100, 149, 237);
0063
0064
0065
0066
0067
0068 TTreeReader tree_reader(mychain);
0069
0070
0071 float DELTARCUT = 0.05;
0072
0073
0074 TTreeReaderArray<int> recoType = {tree_reader, "ReconstructedChargedJets.type"};
0075 TTreeReaderArray<float> recoNRG = {tree_reader, "ReconstructedChargedJets.energy"};
0076 TTreeReaderArray<int> recoPDG = {tree_reader, "ReconstructedChargedJets.PDG"};
0077 TTreeReaderArray<float> recoMomX = {tree_reader, "ReconstructedChargedJets.momentum.x"};
0078 TTreeReaderArray<float> recoMomY = {tree_reader, "ReconstructedChargedJets.momentum.y"};
0079 TTreeReaderArray<float> recoMomZ = {tree_reader, "ReconstructedChargedJets.momentum.z"};
0080 TTreeReaderArray<float> recoM = {tree_reader, "ReconstructedChargedJets.mass"};
0081 TTreeReaderArray<unsigned int> partsBegin = {tree_reader, "ReconstructedChargedJets.particles_begin"};
0082 TTreeReaderArray<unsigned int> partsEnd = {tree_reader, "ReconstructedChargedJets.particles_end"};
0083
0084 TTreeReaderArray<int> recoClustIndex = {tree_reader, "_ReconstructedChargedJets_clusters.index"};
0085 TTreeReaderArray<int> recoTrackIndex = {tree_reader, "_ReconstructedChargedJets_tracks.index"};
0086 TTreeReaderArray<int> recoPartIndex = {tree_reader, "_ReconstructedChargedJets_particles.index"};
0087
0088
0089 TTreeReaderArray<float> recoPartMomX = {tree_reader, "ReconstructedChargedParticles.momentum.x"};
0090 TTreeReaderArray<float> recoPartMomY = {tree_reader, "ReconstructedChargedParticles.momentum.y"};
0091 TTreeReaderArray<float> recoPartMomZ = {tree_reader, "ReconstructedChargedParticles.momentum.z"};
0092 TTreeReaderArray<float> recoPartM = {tree_reader, "ReconstructedChargedParticles.mass"};
0093 TTreeReaderArray<int> recoPartPDG = {tree_reader, "ReconstructedChargedParticles.PDG"};
0094 TTreeReaderArray<float> recoPartNRG = {tree_reader, "ReconstructedChargedParticles.energy"};
0095
0096 TTreeReaderArray<unsigned int> recoPartAssocRec = {tree_reader, "ReconstructedChargedParticleAssociations.recID"};
0097 TTreeReaderArray<unsigned int> recoPartAssocSim = {tree_reader, "ReconstructedChargedParticleAssociations.simID"};
0098 TTreeReaderArray<float> recoPartAssocWeight = {tree_reader, "ReconstructedChargedParticleAssociations.weight"};
0099
0100
0101 TTreeReaderArray<int> genType = {tree_reader, "GeneratedChargedJets.type"};
0102 TTreeReaderArray<float> genNRG = {tree_reader, "GeneratedChargedJets.energy"};
0103 TTreeReaderArray<int> genPDG = {tree_reader, "GeneratedChargedJets.PDG"};
0104 TTreeReaderArray<float> genMomX = {tree_reader, "GeneratedChargedJets.momentum.x"};
0105 TTreeReaderArray<float> genMomY = {tree_reader, "GeneratedChargedJets.momentum.y"};
0106 TTreeReaderArray<float> genMomZ = {tree_reader, "GeneratedChargedJets.momentum.z"};
0107 TTreeReaderArray<float> genM = {tree_reader, "GeneratedChargedJets.mass"};
0108 TTreeReaderArray<unsigned int> genPartsBegin = {tree_reader, "GeneratedChargedJets.particles_begin"};
0109 TTreeReaderArray<unsigned int> genPartsEnd = {tree_reader, "GeneratedChargedJets.particles_end"};
0110
0111 TTreeReaderArray<int> genPartIndex = {tree_reader, "_GeneratedChargedJets_particles.index"};
0112
0113
0114
0115
0116 TTreeReaderArray<float> mcMomX = {tree_reader, "GeneratedParticles.momentum.x"};
0117 TTreeReaderArray<float> mcMomY = {tree_reader, "GeneratedParticles.momentum.y"};
0118 TTreeReaderArray<float> mcMomZ = {tree_reader, "GeneratedParticles.momentum.z"};
0119 TTreeReaderArray<float> mcM = {tree_reader, "GeneratedParticles.mass"};
0120 TTreeReaderArray<int> pdg = {tree_reader, "GeneratedParticles.PDG"};
0121
0122 TTreeReaderArray<int> mcGenStat = {tree_reader, "MCParticles.generatorStatus"};
0123 TTreeReaderArray<double> mcMomXPart = {tree_reader, "MCParticles.momentum.x"};
0124 TTreeReaderArray<double> mcMomYPart = {tree_reader, "MCParticles.momentum.y"};
0125 TTreeReaderArray<double> mcMomZPart = {tree_reader, "MCParticles.momentum.z"};
0126 TTreeReaderArray<double> mcMPart = {tree_reader, "MCParticles.mass"};
0127 TTreeReaderArray<int> pdgMCPart = {tree_reader, "MCParticles.PDG"};
0128
0129
0130 TH1D *counter = new TH1D("counter","",10,0.,10.);
0131
0132
0133
0134 TH1D *numRecoChargedJetsECutHist = new TH1D("numRecoChargedJetsECut","",20,0.,20.);
0135 TH1D *recoChargedJetEHist = new TH1D("recoChargedJetE","",300,0.,300.);
0136 TH1D *recoChargedJetEtaECutHist = new TH1D("recoChargedJetEtaECut","",60,-3.,3.);
0137 TH2D *recoChargedJetEvsEtaHist = new TH2D("recoChargedJetEvsEta","",60,-3.,3.,300,0.,300.);
0138 TH2D *recoChargedJetPhiVsEtaECutHist = new TH2D("recoChargedJetPhiVsEtaECut","",60,-3.,3.,100,-TMath::Pi(),TMath::Pi());
0139
0140 TH1D *numRecoChargedJetsECutNoElecHist = new TH1D("numRecoChargedJetsECutNoElec","",20,0.,20.);
0141 TH1D *recoChargedJetENoElecHist = new TH1D("recoChargedJetENoElec","",300,0.,300.);
0142 TH1D *recoChargedJetEtaECutNoElecHist = new TH1D("recoChargedJetEtaECutNoElec","",60,-3.,3.);
0143 TH2D *recoChargedJetEvsEtaNoElecHist = new TH2D("recoChargedJetEvsEtaNoElec","",60,-3.,3.,300,0.,300.);
0144 TH2D *recoChargedJetPhiVsEtaECutNoElecHist = new TH2D("recoChargedJetPhiVsEtaECutNoElec","",60,-3.,3.,100,-TMath::Pi(),TMath::Pi());
0145
0146 TH1D *numRecoChargedJetPartsHist = new TH1D("numRecoChargedJetParts","",20,0.,20.);
0147 TH1D *recoChargedJetPartPHist = new TH1D("recoChargedJetPartP","",500,0.,100.);
0148 TH1D *recoChargedJetPartEtaHist = new TH1D("recoChargedJetPartEta","",80,-4.,4.);
0149 TH2D *recoChargedJetPartPvsEtaHist = new TH2D("recoChargedJetPartPvsEta","",80,-4.,4.,500,0.,100.);
0150 TH2D *recoChargedJetPartPhiVsEtaHist = new TH2D("recoChargedJetPartPhiVsEta","",80,-4.,4.,100,-TMath::Pi(),TMath::Pi());
0151
0152 TH1D *numRecoChargedJetPartsNoElecHist = new TH1D("numRecoChargedJetPartsNoElec","",20,0.,20.);
0153 TH1D *recoChargedJetPartPNoElecHist = new TH1D("recoChargedJetPartPNoElec","",500,0.,100.);
0154 TH1D *recoChargedJetPartEtaNoElecHist = new TH1D("recoChargedJetPartEtaNoElec","",80,-4.,4.);
0155 TH2D *recoChargedJetPartPvsEtaNoElecHist = new TH2D("recoChargedJetPartPvsEtaNoElec","",80,-4.,4.,500,0.,100.);
0156 TH2D *recoChargedJetPartPhiVsEtaNoElecHist = new TH2D("recoChargedJetPartPhiVsEtaNoElec","",80,-4.,4.,100,-TMath::Pi(),TMath::Pi());
0157
0158 TH1D *recoChargedJetPartPairwiseDeltaRHist = new TH1D("recoChargedJetPartPairwiseDeltaRHist","",5000,0.,5.);
0159
0160
0161 TH1D *numGenChargedJetsECutHist = new TH1D("numGenChargedJetsECut","",20,0.,20.);
0162 TH1D *genChargedJetEHist = new TH1D("genChargedJetE","",300,0.,300.);
0163 TH1D *genChargedJetEtaECutHist = new TH1D("genChargedJetEtaECut","",60,-3.,3.);
0164 TH2D *genChargedJetEvsEtaHist = new TH2D("genChargedJetEvsEta","",60,-3.,3.,300,0.,300.);
0165 TH2D *genChargedJetPhiVsEtaECutHist = new TH2D("genChargedJetPhiVsEtaECut","",60,-3.,3.,100,-TMath::Pi(),TMath::Pi());
0166
0167 TH1D *numGenChargedJetsECutNoElecHist = new TH1D("numGenChargedJetsECutNoElec","",20,0.,20.);
0168 TH1D *genChargedJetENoElecHist = new TH1D("genChargedJetENoElec","",300,0.,300.);
0169 TH1D *genChargedJetEtaECutNoElecHist = new TH1D("genChargedJetEtaECutNoElec","",60,-3.,3.);
0170 TH2D *genChargedJetEvsEtaNoElecHist = new TH2D("genChargedJetEvsEtaNoElec","",60,-3.,3.,300,0.,300.);
0171 TH2D *genChargedJetPhiVsEtaECutNoElecHist = new TH2D("genChargedJetPhiVsEtaECutNoElec","",60,-3.,3.,100,-TMath::Pi(),TMath::Pi());
0172
0173 TH1D *numGenChargedJetPartsHist = new TH1D("numGenChargedJetParts","",20,0.,20.);
0174 TH1D *genChargedJetPartPHist = new TH1D("genChargedJetPartP","",500,0.,100.);
0175 TH1D *genChargedJetPartEtaHist = new TH1D("genChargedJetPartEta","",80,-4.,4.);
0176 TH2D *genChargedJetPartPvsEtaHist = new TH2D("genChargedJetPartPvsEta","",80,-4.,4.,500,0.,100.);
0177 TH2D *genChargedJetPartPhiVsEtaHist = new TH2D("genChargedJetPartPhiVsEta","",80,-4.,4.,100,-TMath::Pi(),TMath::Pi());
0178
0179 TH1D *numGenChargedJetPartsNoElecHist = new TH1D("numGenChargedJetPartsNoElec","",20,0.,20.);
0180 TH1D *genChargedJetPartPNoElecHist = new TH1D("genChargedJetPartPNoElec","",500,0.,100.);
0181 TH1D *genChargedJetPartEtaNoElecHist = new TH1D("genChargedJetPartEtaNoElec","",80,-4.,4.);
0182 TH2D *genChargedJetPartPvsEtaNoElecHist = new TH2D("genChargedJetPartPvsEtaNoElec","",80,-4.,4.,500,0.,100.);
0183 TH2D *genChargedJetPartPhiVsEtaNoElecHist = new TH2D("genChargedJetPartPhiVsEtaNoElec","",80,-4.,4.,100,-TMath::Pi(),TMath::Pi());
0184
0185 TH1D *genChargedJetPartPairwiseDeltaRHist = new TH1D("genChargedJetPartPairwiseDeltaRHist","",5000,0.,5.);
0186
0187
0188 TH1D *matchJetDeltaRHist = new TH1D("matchJetDeltaR","",5000,0.,5.);
0189 TH1D *matchJetDeltaRBackHist = new TH1D("matchJetDeltaRBack","",5000,0.,5.);
0190 TH2D *recoVsGenChargedJetEtaHist = new TH2D("recoVsGenChargedJetEta","",80,-4.,4.,80,-4.,4.);
0191 TH2D *recoVsGenChargedJetPhiHist = new TH2D("recoVsGenChargedJetPhi","",100,-TMath::Pi(),TMath::Pi(),100,-TMath::Pi(),TMath::Pi());
0192 TH2D *recoVsGenChargedJetEHist = new TH2D("recoVsGenChargedJetE","",100,0.,100.,100,0.,100.);
0193 TH2D *recoVsGenChargedJetENoDRHist = new TH2D("recoVsGenChargedJetENoDRHist","",100,0.,100.,100,0.,100.);
0194 TH2D *recoVsGenChargedJetENoDupHist = new TH2D("recoVsGenChargedJetENoDup","",100,0.,100.,100,0.,100.);
0195
0196 TH2D *jetResVsEtaHist = new TH2D("jetResVsEta","",80,-4.,4.,10000,-10.,10.);
0197 TH2D *jetResVsEHist = new TH2D("jetResVsE","",100,0.,100.,10000,-10.,10.);
0198 TH2D *jetResVsENegEtaHist = new TH2D("jetResVsENegEta","",20,0.,100.,10000,-10.,10.);
0199 TH2D *jetResVsEMidEtaHist = new TH2D("jetResVsEMidEta","",20,0.,100.,10000,-10.,10.);
0200 TH2D *jetResVsEPosEtaHist = new TH2D("jetResVsEPosEta","",20,0.,100.,10000,-10.,10.);
0201
0202 TH2D *jetResVsENegEtaNoDupHist = new TH2D("jetResVsENegEtaNoDup","",20,0.,100.,10000,-10.,10.);
0203 TH2D *jetResVsEMidEtaNoDupHist = new TH2D("jetResVsEMidEtaNoDup","",20,0.,100.,10000,-10.,10.);
0204 TH2D *jetResVsEPosEtaNoDupHist = new TH2D("jetResVsEPosEtaNoDup","",20,0.,100.,10000,-10.,10.);
0205
0206
0207
0208 int NEVENTS = 0;
0209 while(tree_reader.Next()) {
0210
0211 if(NEVENTS%10000 == 0) cout << "Events Processed: " << NEVENTS << endl;
0212
0213 counter->Fill(0);
0214
0215
0216
0217
0218 int numRecoChargedJets = 0;
0219 int numRecoChargedJetsNoElec = 0;
0220 for(unsigned int i=0; i<recoType.GetSize(); i++)
0221 {
0222 TVector3 jetMom(recoMomX[i],recoMomY[i],recoMomZ[i]);
0223
0224 counter->Fill(3);
0225
0226
0227 if(TMath::Abs(jetMom.PseudoRapidity()) > 2.5) continue;
0228
0229
0230 bool ECut = recoNRG[i] > 5.0;
0231
0232 if(ECut) numRecoChargedJets++;
0233
0234 recoChargedJetEHist->Fill(recoNRG[i]);
0235 if(ECut) recoChargedJetEtaECutHist->Fill(jetMom.PseudoRapidity());
0236 recoChargedJetEvsEtaHist->Fill(jetMom.PseudoRapidity(),recoNRG[i]);
0237 if(ECut) recoChargedJetPhiVsEtaECutHist->Fill(jetMom.PseudoRapidity(),jetMom.Phi());
0238
0239
0240 bool noElectron = true;
0241 for(unsigned int m=partsBegin[i]; m<partsEnd[i]; m++)
0242 {
0243 int elecIndex = -1;
0244 double elecIndexWeight = -1.0;
0245 int chargePartIndex = recoPartIndex[m];
0246 for(unsigned int n=0; n<recoPartAssocRec.GetSize(); n++)
0247 {
0248 if(recoPartAssocRec[n] == chargePartIndex)
0249 {
0250 if(recoPartAssocWeight[n] > elecIndexWeight)
0251 {
0252 elecIndex = recoPartAssocSim[n];
0253 elecIndexWeight = recoPartAssocWeight[n];
0254 }
0255 }
0256 }
0257
0258 if(pdgMCPart[elecIndex] == 11)
0259 noElectron = false;
0260 }
0261
0262 if(ECut)
0263 {
0264 for(unsigned int j=partsBegin[i]; j<partsEnd[i]; j++)
0265 {
0266
0267
0268 double mX = recoPartMomX[recoPartIndex[j]];
0269 double mY = recoPartMomY[recoPartIndex[j]];
0270 double mZ = recoPartMomZ[recoPartIndex[j]];
0271 double mM = recoPartM[recoPartIndex[j]];
0272
0273
0274 TVector3 partMom(mX,mY,mZ);
0275
0276 recoChargedJetPartPHist->Fill(partMom.Mag());
0277 recoChargedJetPartEtaHist->Fill(partMom.PseudoRapidity());
0278 recoChargedJetPartPvsEtaHist->Fill(partMom.PseudoRapidity(),partMom.Mag());
0279 recoChargedJetPartPhiVsEtaHist->Fill(partMom.PseudoRapidity(),partMom.Phi());
0280
0281 if(noElectron)
0282 {
0283 recoChargedJetPartPNoElecHist->Fill(partMom.Mag());
0284 recoChargedJetPartEtaNoElecHist->Fill(partMom.PseudoRapidity());
0285 recoChargedJetPartPvsEtaNoElecHist->Fill(partMom.PseudoRapidity(),partMom.Mag());
0286 recoChargedJetPartPhiVsEtaNoElecHist->Fill(partMom.PseudoRapidity(),partMom.Phi());
0287 }
0288
0289
0290 if(j<(partsEnd[i]-1))
0291 {
0292 for(unsigned int k=j+1; k<partsEnd[i]; k++)
0293 {
0294 double mXB = recoPartMomX[recoPartIndex[k]];
0295 double mYB = recoPartMomY[recoPartIndex[k]];
0296 double mZB = recoPartMomZ[recoPartIndex[k]];
0297
0298 TVector3 partMomB(mXB,mYB,mZB);
0299
0300 double dEta = partMom.PseudoRapidity() - partMomB.PseudoRapidity();
0301 double dPhi = TVector2::Phi_mpi_pi(partMom.Phi() - partMomB.Phi());
0302 double dR = TMath::Sqrt(dEta*dEta + dPhi*dPhi);
0303
0304 recoChargedJetPartPairwiseDeltaRHist->Fill(dR);
0305 }
0306 }
0307 }
0308 numRecoChargedJetPartsHist->Fill(partsEnd[i] - partsBegin[i]);
0309 if(noElectron) numRecoChargedJetPartsNoElecHist->Fill(partsEnd[i] - partsBegin[i]);
0310 }
0311
0312
0313 if(noElectron)
0314 {
0315 recoChargedJetENoElecHist->Fill(recoNRG[i]);
0316 if(ECut) recoChargedJetEtaECutNoElecHist->Fill(jetMom.PseudoRapidity());
0317 recoChargedJetEvsEtaNoElecHist->Fill(jetMom.PseudoRapidity(),recoNRG[i]);
0318 if(ECut) recoChargedJetPhiVsEtaECutNoElecHist->Fill(jetMom.PseudoRapidity(),jetMom.Phi());
0319
0320 if(ECut) numRecoChargedJetsNoElec++;
0321 }
0322 }
0323 numRecoChargedJetsECutHist->Fill(numRecoChargedJets);
0324 numRecoChargedJetsECutNoElecHist->Fill(numRecoChargedJetsNoElec);
0325
0326
0327
0328
0329 int numGenChargedJets = 0;
0330 int numGenChargedJetsNoElec = 0;
0331 for(unsigned int i=0; i<genType.GetSize(); i++)
0332 {
0333 TVector3 jetMom(genMomX[i],genMomY[i],genMomZ[i]);
0334
0335 counter->Fill(4);
0336
0337
0338 if(TMath::Abs(jetMom.PseudoRapidity()) > 2.5) continue;
0339
0340
0341 bool ECut = genNRG[i] > 5.0;
0342
0343 if(ECut) numGenChargedJets++;
0344
0345 genChargedJetEHist->Fill(genNRG[i]);
0346 if(ECut) genChargedJetEtaECutHist->Fill(jetMom.PseudoRapidity());
0347 genChargedJetEvsEtaHist->Fill(jetMom.PseudoRapidity(),genNRG[i]);
0348 if(ECut) genChargedJetPhiVsEtaECutHist->Fill(jetMom.PseudoRapidity(),jetMom.Phi());
0349
0350
0351 bool noElectron = true;
0352 for(unsigned int m=genPartsBegin[i]; m<genPartsEnd[i]; m++)
0353 {
0354 if(pdg[genPartIndex[m]] == 11)
0355 noElectron = false;
0356 }
0357
0358 if(ECut)
0359 {
0360 for(unsigned int j=genPartsBegin[i]; j<genPartsEnd[i]; j++)
0361 {
0362
0363
0364 double mX = mcMomX[genPartIndex[j]];
0365 double mY = mcMomY[genPartIndex[j]];
0366 double mZ = mcMomZ[genPartIndex[j]];
0367 double mM = mcM[genPartIndex[j]];
0368
0369
0370 TVector3 partMom(mX,mY,mZ);
0371
0372 genChargedJetPartPHist->Fill(partMom.Mag());
0373 genChargedJetPartEtaHist->Fill(partMom.PseudoRapidity());
0374 genChargedJetPartPvsEtaHist->Fill(partMom.PseudoRapidity(),partMom.Mag());
0375 genChargedJetPartPhiVsEtaHist->Fill(partMom.PseudoRapidity(),partMom.Phi());
0376
0377 if(noElectron)
0378 {
0379 genChargedJetPartPNoElecHist->Fill(partMom.Mag());
0380 genChargedJetPartEtaNoElecHist->Fill(partMom.PseudoRapidity());
0381 genChargedJetPartPvsEtaNoElecHist->Fill(partMom.PseudoRapidity(),partMom.Mag());
0382 genChargedJetPartPhiVsEtaNoElecHist->Fill(partMom.PseudoRapidity(),partMom.Phi());
0383 }
0384
0385
0386 if(j<(genPartsEnd[i]-1))
0387 {
0388 for(unsigned int k=j+1; k<genPartsEnd[i]; k++)
0389 {
0390 double mXB = mcMomX[genPartIndex[k]];
0391 double mYB = mcMomY[genPartIndex[k]];
0392 double mZB = mcMomZ[genPartIndex[k]];
0393
0394 TVector3 partMomB(mXB,mYB,mZB);
0395
0396 double dEta = partMom.PseudoRapidity() - partMomB.PseudoRapidity();
0397 double dPhi = TVector2::Phi_mpi_pi(partMom.Phi() - partMomB.Phi());
0398 double dR = TMath::Sqrt(dEta*dEta + dPhi*dPhi);
0399
0400 genChargedJetPartPairwiseDeltaRHist->Fill(dR);
0401 }
0402 }
0403 }
0404 numGenChargedJetPartsHist->Fill(genPartsEnd[i] - genPartsBegin[i]);
0405 if(noElectron) numGenChargedJetPartsNoElecHist->Fill(genPartsEnd[i] - genPartsBegin[i]);
0406 }
0407
0408
0409 if(noElectron)
0410 {
0411 genChargedJetENoElecHist->Fill(genNRG[i]);
0412 if(ECut) genChargedJetEtaECutNoElecHist->Fill(jetMom.PseudoRapidity());
0413 genChargedJetEvsEtaNoElecHist->Fill(jetMom.PseudoRapidity(),genNRG[i]);
0414 if(ECut) genChargedJetPhiVsEtaECutNoElecHist->Fill(jetMom.PseudoRapidity(),jetMom.Phi());
0415
0416 if(ECut) numGenChargedJetsNoElec++;
0417 }
0418 }
0419 numGenChargedJetsECutHist->Fill(numGenChargedJets);
0420 numGenChargedJetsECutNoElecHist->Fill(numGenChargedJetsNoElec);
0421
0422
0423
0424
0425
0426 for(unsigned int i=0; i<genType.GetSize(); i++)
0427 {
0428 TVector3 jetMom(genMomX[i],genMomY[i],genMomZ[i]);
0429
0430
0431
0432
0433
0434
0435
0436
0437 bool hasElectron = false;
0438
0439 for(unsigned int m=genPartsBegin[i]; m<genPartsEnd[i]; m++)
0440 {
0441 if(pdg[genPartIndex[m]] == 11)
0442 hasElectron = true;
0443 }
0444
0445
0446
0447 double minDeltaR = 999.;
0448 int minIndex = -1;
0449 for(unsigned int j=0; j<recoType.GetSize(); j++)
0450 {
0451 TVector3 recoMom(recoMomX[j],recoMomY[j],recoMomZ[j]);
0452
0453 double dEta = jetMom.PseudoRapidity() - recoMom.PseudoRapidity();
0454 double dPhi = TVector2::Phi_mpi_pi(jetMom.Phi() - recoMom.Phi());
0455 double dR = TMath::Sqrt(dEta*dEta + dPhi*dPhi);
0456
0457 if(dR < minDeltaR)
0458 {
0459 minDeltaR = dR;
0460 minIndex = j;
0461 }
0462 }
0463
0464
0465 double minDeltaRBack = 999.;
0466 double minIndexBack = -1;
0467 if(minIndex > -1)
0468 {
0469 TVector3 recoMatchMom(recoMomX[minIndex],recoMomY[minIndex],recoMomZ[minIndex]);
0470 for(unsigned int j=0; j<genType.GetSize(); j++)
0471 {
0472 TVector3 genMom(genMomX[j],genMomY[j],genMomZ[j]);
0473
0474 double dEta = recoMatchMom.PseudoRapidity() - genMom.PseudoRapidity();
0475 double dPhi = TVector2::Phi_mpi_pi(recoMatchMom.Phi() - genMom.Phi());
0476 double dR = TMath::Sqrt(dEta*dEta + dPhi*dPhi);
0477
0478 if(dR < minDeltaRBack)
0479 {
0480 minDeltaRBack = dR;
0481 minIndexBack = j;
0482 }
0483 }
0484 }
0485
0486
0487 if(genNRG[i] > 5.0 && TMath::Abs(jetMom.PseudoRapidity()) < 2.5 && minIndex > -1 && !hasElectron) matchJetDeltaRHist->Fill(minDeltaR);
0488 if(genNRG[i] > 5.0 && TMath::Abs(jetMom.PseudoRapidity()) < 2.5 && minIndex > -1) matchJetDeltaRBackHist->Fill(minDeltaR);
0489 if(minIndex > -1 && genNRG[i] > 5.0 && TMath::Abs(jetMom.PseudoRapidity()) < 2.5 && !hasElectron)
0490 {
0491 TVector3 recoMatchMom(recoMomX[minIndex],recoMomY[minIndex],recoMomZ[minIndex]);
0492
0493 recoVsGenChargedJetENoDRHist->Fill(genNRG[i],recoNRG[minIndex]);
0494
0495 if(minDeltaR < DELTARCUT)
0496 {
0497 recoVsGenChargedJetEtaHist->Fill(jetMom.PseudoRapidity(),recoMatchMom.PseudoRapidity());
0498 recoVsGenChargedJetPhiHist->Fill(jetMom.Phi(),recoMatchMom.Phi());
0499 recoVsGenChargedJetEHist->Fill(genNRG[i],recoNRG[minIndex]);
0500
0501 double jetERes = (recoNRG[minIndex] - genNRG[i])/genNRG[i];
0502
0503 jetResVsEtaHist->Fill(jetMom.PseudoRapidity(),jetERes);
0504 jetResVsEHist->Fill(genNRG[i],jetERes);
0505 if(jetMom.PseudoRapidity() > -2.5 && jetMom.PseudoRapidity() < -1.0)
0506 jetResVsENegEtaHist->Fill(genNRG[i],jetERes);
0507 if(jetMom.PseudoRapidity() > -1.0 && jetMom.PseudoRapidity() < 1.0)
0508 jetResVsEMidEtaHist->Fill(genNRG[i],jetERes);
0509 if(jetMom.PseudoRapidity() > 1.0 && jetMom.PseudoRapidity() < 2.5)
0510 jetResVsEPosEtaHist->Fill(genNRG[i],jetERes);
0511
0512
0513 bool noDuplicate = true;
0514 for(unsigned int j=partsBegin[minIndex]; j<partsEnd[minIndex]; j++)
0515 {
0516 double mX = recoPartMomX[recoPartIndex[j]];
0517 double mY = recoPartMomY[recoPartIndex[j]];
0518 double mZ = recoPartMomZ[recoPartIndex[j]];
0519 double mM = recoPartM[recoPartIndex[j]];
0520 double tmpE = TMath::Sqrt(mX*mX + mY*mY + mZ*mZ + mM*mM);
0521
0522 TVector3 partMom(mX,mY,mZ);
0523
0524
0525 if(j<(partsEnd[minIndex]-1))
0526 {
0527 for(unsigned int k=j+1; k<partsEnd[minIndex]; k++)
0528 {
0529 double mXB = recoPartMomX[recoPartIndex[k]];
0530 double mYB = recoPartMomY[recoPartIndex[k]];
0531 double mZB = recoPartMomZ[recoPartIndex[k]];
0532
0533 TVector3 partMomB(mXB,mYB,mZB);
0534
0535 double dEta = partMom.PseudoRapidity() - partMomB.PseudoRapidity();
0536 double dPhi = TVector2::Phi_mpi_pi(partMom.Phi() - partMomB.Phi());
0537 double dR = TMath::Sqrt(dEta*dEta + dPhi*dPhi);
0538
0539 if(dR < 0.02) noDuplicate = false;
0540 }
0541 }
0542 }
0543
0544 if(noDuplicate)
0545 {
0546 recoVsGenChargedJetENoDupHist->Fill(genNRG[i],recoNRG[minIndex]);
0547
0548 if(jetMom.PseudoRapidity() > -2.5 && jetMom.PseudoRapidity() < -1.0)
0549 jetResVsENegEtaNoDupHist->Fill(genNRG[i],jetERes);
0550 if(jetMom.PseudoRapidity() > -1.0 && jetMom.PseudoRapidity() < 1.0)
0551 jetResVsEMidEtaNoDupHist->Fill(genNRG[i],jetERes);
0552 if(jetMom.PseudoRapidity() > 1.0 && jetMom.PseudoRapidity() < 2.5)
0553 jetResVsEPosEtaNoDupHist->Fill(genNRG[i],jetERes);
0554 }
0555 }
0556 }
0557 }
0558
0559 NEVENTS++;
0560 }
0561
0562
0563 gStyle->SetOptStat(0);
0564
0565
0566 TCanvas *c1 = new TCanvas("c1","Number Reco Jets",800,600);
0567 c1->Clear();
0568 c1->Divide(1,1);
0569
0570 c1->cd(1);
0571 numRecoChargedJetsECutHist->Draw("HIST");
0572 numRecoChargedJetsECutNoElecHist->SetLineColor(seabornRed);
0573 numRecoChargedJetsECutNoElecHist->Draw("HISTSAME");
0574 numRecoChargedJetsECutHist->SetLineWidth(2);
0575 numRecoChargedJetsECutNoElecHist->SetLineWidth(2);
0576 numRecoChargedJetsECutHist->SetTitle("Reconstructed Jets per Event (|eta| < 2.5 && E > 5);Number");
0577
0578 TLegend *legend1 = new TLegend(0.7, 0.7, 0.9, 0.9);
0579 legend1->AddEntry(numRecoChargedJetsECutHist, "With Electrons", "l");
0580 legend1->AddEntry(numRecoChargedJetsECutNoElecHist, "No Electrons", "l");
0581 legend1->Draw();
0582
0583
0584
0585 gPad->SetLogy();
0586 if(PRINT) c1->Print((results_path+"/numberRecoJets.png").c_str());
0587 delete c1;
0588
0589
0590 TCanvas *c2 = new TCanvas("c2","Reco Jet Energy",800,600);
0591 c2->Clear();
0592 c2->Divide(1,1);
0593
0594 c2->cd(1);
0595 recoChargedJetEHist->Draw("HIST");
0596 recoChargedJetENoElecHist->SetLineColor(seabornRed);
0597 recoChargedJetENoElecHist->Draw("HISTSAME");
0598
0599 recoChargedJetEHist->SetLineWidth(2);
0600 recoChargedJetENoElecHist->SetLineWidth(2);
0601 recoChargedJetEHist->SetTitle("Reconstructed Jet Energy (|eta| < 2.5);Energy [GeV]");
0602
0603 TLegend *legend2 = new TLegend(0.7, 0.7, 0.9, 0.9);
0604 legend2->AddEntry(recoChargedJetEHist, "With Electrons", "l");
0605 legend2->AddEntry(recoChargedJetENoElecHist, "No Electrons", "l");
0606 legend2->Draw();
0607
0608 gPad->SetLogy();
0609 if(PRINT) c2->Print((results_path+"/recoJetEnergy.png").c_str());
0610
0611 delete c2;
0612
0613 TCanvas *c3 = new TCanvas("c3","Reco Jet Eta",800,600);
0614 c3->Clear();
0615 c3->Divide(1,1);
0616
0617 c3->cd(1);
0618 recoChargedJetEtaECutHist->Draw("HIST");
0619 recoChargedJetEtaECutNoElecHist->SetLineColor(seabornRed);
0620 recoChargedJetEtaECutNoElecHist->Draw("HISTSAME");
0621
0622 recoChargedJetEtaECutHist->SetLineWidth(2);
0623 recoChargedJetEtaECutNoElecHist->SetLineWidth(2);
0624 recoChargedJetEtaECutHist->SetTitle("Reconstructed Jet Eta (E > 5);Eta");
0625
0626
0627 TLegend *legend3 = new TLegend(0.7, 0.7, 0.9, 0.9);
0628 legend3->AddEntry(recoChargedJetEtaECutHist, "With Electrons", "l");
0629 legend3->AddEntry(recoChargedJetEtaECutNoElecHist, "No Electrons", "l");
0630 legend3->Draw();
0631
0632 gPad->SetLogy();
0633 if(PRINT) c3->Print((results_path+"/recoJetEta.png").c_str());
0634 delete c3;
0635
0636 TCanvas *c4 = new TCanvas("c4","Reco Jet E Vs Eta",800,600);
0637 c4->Clear();
0638 c4->Divide(1,1);
0639
0640 c4->cd(1);
0641 recoChargedJetEvsEtaHist->Draw("COLZ");
0642 recoChargedJetEvsEtaHist->SetTitle("Reconstructed Jet Energy Vs Eta;Eta;Energy [GeV]");
0643 gPad->SetLogz();
0644 if(PRINT) c4->Print((results_path+"/recoJetEnergyvsEta.png").c_str());
0645
0646
0647 TCanvas *c5 = new TCanvas("c5","Reco Jet Phi Vs Eta",800,600);
0648 c5->Clear();
0649 c5->Divide(1,1);
0650
0651 c5->cd(1);
0652 recoChargedJetPhiVsEtaECutHist->Draw("COLZ");
0653 recoChargedJetPhiVsEtaECutHist->SetTitle("Reconstructed Jet Phi Vs Eta (E > 5);Eta;Phi");
0654 gPad->SetLogz();
0655 if(PRINT) c5->Print((results_path+"/recoJetPhivsEta.png").c_str());
0656
0657
0658 TCanvas *c6 = new TCanvas("c6","Number Constituents Per Reco Jet",800,600);
0659 c6->Clear();
0660 c6->Divide(1,1);
0661
0662 c6->cd(1);
0663 numRecoChargedJetPartsHist->Draw("HIST");
0664 numRecoChargedJetPartsNoElecHist->SetLineColor(seabornRed);
0665 numRecoChargedJetPartsNoElecHist->Draw("HISTSAME");
0666
0667 numRecoChargedJetPartsHist->SetLineWidth(2);
0668 numRecoChargedJetPartsNoElecHist->SetLineWidth(2);
0669 numRecoChargedJetPartsHist->SetTitle("Number of Constituents Per Reco Jet;Number of Constituents");
0670
0671 TLegend *legend6 = new TLegend(0.7, 0.7, 0.9, 0.9);
0672 legend6->AddEntry(numRecoChargedJetPartsHist, "With Electrons", "l");
0673 legend6->AddEntry(numRecoChargedJetPartsNoElecHist, "No Electrons", "l");
0674 legend6->Draw();
0675
0676 gPad->SetLogy();
0677 if(PRINT) c6->Print((results_path+"/numConstituentsPerRecoJet.png").c_str());
0678
0679
0680 TCanvas *c7 = new TCanvas("c7","Reco Jet Constituent Momentum",800,600);
0681 c7->Clear();
0682 c7->Divide(1,1);
0683
0684 c7->cd(1);
0685 recoChargedJetPartPHist->Draw("HIST");
0686 recoChargedJetPartPNoElecHist->SetLineColor(seabornRed);
0687 recoChargedJetPartPNoElecHist->Draw("HISTSAME");
0688
0689 recoChargedJetPartPHist->SetLineWidth(2);
0690 recoChargedJetPartPNoElecHist->SetLineWidth(2);
0691 recoChargedJetPartPHist->SetTitle("Reconstructed Jet Constituent Momentum;Momentum [GeV/c]");
0692
0693 TLegend *legend7 = new TLegend(0.7, 0.7, 0.9, 0.9);
0694 legend7->AddEntry(recoChargedJetPartPHist, "With Electrons", "l");
0695 legend7->AddEntry(recoChargedJetPartPNoElecHist, "No Electrons", "l");
0696 legend7->Draw();
0697
0698 gPad->SetLogy();
0699 if(PRINT) c7->Print((results_path+"/recoJetConstituentMomentum.png").c_str());
0700
0701
0702 TCanvas *c8 = new TCanvas("c8","Reco Jet Constituent Eta",800,600);
0703 c8->Clear();
0704 c8->Divide(1,1);
0705
0706 c8->cd(1);
0707 recoChargedJetPartEtaHist->Draw("HIST");
0708 recoChargedJetPartEtaNoElecHist->SetLineColor(seabornRed);
0709 recoChargedJetPartEtaNoElecHist->Draw("HISTSAME");
0710
0711 recoChargedJetPartEtaHist->SetLineWidth(2);
0712 recoChargedJetPartEtaNoElecHist->SetLineWidth(2);
0713
0714 recoChargedJetPartEtaHist->SetTitle("Reconstructed Jet Constituent Eta;Eta");
0715
0716 TLegend *legend8 = new TLegend(0.7, 0.7, 0.9, 0.9);
0717 legend8->AddEntry(recoChargedJetPartEtaHist, "With Electrons", "l");
0718 legend8->AddEntry(recoChargedJetPartEtaNoElecHist, "No Electrons", "l");
0719 legend8->Draw();
0720
0721 gPad->SetLogy();
0722 if(PRINT) c8->Print((results_path+"/recoJetConstituentEta.png").c_str());
0723
0724
0725 TCanvas *c9 = new TCanvas("c9","Reco Jet Constituent Momentum Vs Eta",800,600);
0726 c9->Clear();
0727 c9->Divide(1,1);
0728
0729 c9->cd(1);
0730 recoChargedJetPartPvsEtaHist->Draw("COLZ");
0731 recoChargedJetPartPvsEtaHist->SetTitle("Reconstructed Jet Constituent Momentum Vs Eta;Eta;Momentum [GeV/c]");
0732 gPad->SetLogz();
0733 if(PRINT) c9->Print((results_path+"/recoJetConstituentMomentumVsEta.png").c_str());
0734
0735
0736 TCanvas *c10 = new TCanvas("c10","Reco Jet Constituent Phi Vs Eta",800,600);
0737 c10->Clear();
0738 c10->Divide(1,1);
0739
0740 c10->cd(1);
0741 recoChargedJetPartPhiVsEtaHist->Draw("COLZ");
0742 recoChargedJetPartPhiVsEtaHist->SetTitle("Reconstructed Jet Constituent Phi Vs Eta;Eta;Phi");
0743 gPad->SetLogz();
0744 if(PRINT) c10->Print((results_path+"/recoJetConstituentPhiVsEta.png").c_str());
0745
0746
0747 TCanvas *c11 = new TCanvas("c11","Reco Jet Constituent Pairwise Delta R",800,600);
0748 c11->Clear();
0749 c11->Divide(1,1);
0750
0751 c11->cd(1);
0752 recoChargedJetPartPairwiseDeltaRHist->Draw("COLZ");
0753 recoChargedJetPartPairwiseDeltaRHist->SetTitle("Pairwise Constituent Delta R;Delta R");
0754 recoChargedJetPartPairwiseDeltaRHist->GetXaxis()->SetRangeUser(0,0.5);
0755 gPad->SetLogy();
0756 if(PRINT) c11->Print((results_path+"/recoJetConstituentPairwiseDR.png").c_str());
0757
0758
0759 TCanvas *c12 = new TCanvas("c12","Reco Jet E Vs Eta (No Electrons)",800,600);
0760 c12->Clear();
0761 c12->Divide(1,1);
0762
0763 c12->cd(1);
0764 recoChargedJetEvsEtaNoElecHist->Draw("COLZ");
0765 recoChargedJetEvsEtaNoElecHist->SetTitle("Reconstructed Jet Energy Vs Eta (No Electrons);Eta;Energy [GeV]");
0766 gPad->SetLogz();
0767 if(PRINT) c12->Print((results_path+"/recoJetEnergyVsEtaNoElectron.png").c_str());
0768
0769
0770 TCanvas *c13 = new TCanvas("c13","Reco Jet Phi Vs Eta (No Electrons)",800,600);
0771 c13->Clear();
0772 c13->Divide(1,1);
0773
0774 c13->cd(1);
0775 recoChargedJetPhiVsEtaECutNoElecHist->Draw("COLZ");
0776 recoChargedJetPhiVsEtaECutNoElecHist->SetTitle("Reconstructed Jet Phi Vs Eta (E > 5) (No Electrons);Eta;Phi");
0777 gPad->SetLogz();
0778 if(PRINT) c13->Print((results_path+"/recoJetPhiVsEtaNoElectron.png").c_str());
0779
0780
0781 TCanvas *c14 = new TCanvas("c14","Reco Jet Constituent Momentum Vs Eta (No Electrons)",800,600);
0782 c14->Clear();
0783 c14->Divide(1,1);
0784
0785 c14->cd(1);
0786 recoChargedJetPartPvsEtaNoElecHist->Draw("COLZ");
0787 recoChargedJetPartPvsEtaNoElecHist->SetTitle("Reconstructed Jet Constituent Momentum Vs Eta (No Electrons);Eta;Momentum [GeV/c]");
0788 gPad->SetLogz();
0789 if(PRINT) c14->Print((results_path+"/recoJetConstituentMomentumVsEtaNoElectron.png").c_str());
0790
0791
0792 TCanvas *c15 = new TCanvas("c15","Reco Jet Constituent Phi Vs Eta (No Electrons)",800,600);
0793 c15->Clear();
0794 c15->Divide(1,1);
0795
0796 c15->cd(1);
0797 recoChargedJetPartPhiVsEtaNoElecHist->Draw("COLZ");
0798 recoChargedJetPartPhiVsEtaNoElecHist->SetTitle("Reconstructed Jet Constituent Phi Vs Eta (No Electrons);Eta;Phi");
0799 gPad->SetLogz();
0800 if(PRINT) c15->Print((results_path+"/recoJetConstituentPhiVsEtaNoElectron.png").c_str());
0801
0802
0803
0804
0805 TCanvas *c16 = new TCanvas("c16","Number Gen Jets",800,600);
0806 c16->Clear();
0807 c16->Divide(1,1);
0808
0809 c16->cd(1);
0810 numGenChargedJetsECutHist->Draw("HIST");
0811 numGenChargedJetsECutNoElecHist->SetLineColor(seabornRed);
0812 numGenChargedJetsECutNoElecHist->Draw("HISTSAME");
0813
0814 numGenChargedJetsECutHist->SetLineWidth(2);
0815 numGenChargedJetsECutNoElecHist->SetLineWidth(2);
0816
0817 numGenChargedJetsECutHist->SetTitle("Generator Jets per Event (|eta| < 2.5 && E > 5);Number");
0818
0819 TLegend *legend16 = new TLegend(0.7, 0.7, 0.9, 0.9);
0820 legend16->AddEntry(numGenChargedJetsECutHist, "With Electrons", "l");
0821 legend16->AddEntry(numGenChargedJetsECutNoElecHist, "No Electrons", "l");
0822 legend16->Draw();
0823
0824 gPad->SetLogy();
0825 if(PRINT) c16->Print((results_path+"/numberGenJets.png").c_str());
0826
0827
0828 TCanvas *c17 = new TCanvas("c17","Gen Jet Energy",800,600);
0829 c17->Clear();
0830 c17->Divide(1,1);
0831
0832 c17->cd(1);
0833 genChargedJetEHist->Draw("HIST");
0834 genChargedJetENoElecHist->SetLineColor(seabornRed);
0835 genChargedJetENoElecHist->Draw("HISTSAME");
0836
0837 genChargedJetEHist->SetLineWidth(2);
0838 genChargedJetENoElecHist->SetLineWidth(2);
0839
0840 genChargedJetEHist->SetTitle("Generator Jet Energy (|eta| < 2.5);Energy [GeV]");
0841 TLegend *legend17 = new TLegend(0.7, 0.7, 0.9, 0.9);
0842 legend17->AddEntry(genChargedJetEHist, "With Electrons", "l");
0843 legend17->AddEntry(genChargedJetENoElecHist, "No Electrons", "l");
0844 legend17->Draw();
0845
0846 gPad->SetLogy();
0847 if(PRINT) c17->Print((results_path+"/genJetEnergy.png").c_str());
0848
0849
0850 TCanvas *c18 = new TCanvas("c18","Gen Jet Eta",800,600);
0851 c18->Clear();
0852 c18->Divide(1,1);
0853
0854 c18->cd(1);
0855 genChargedJetEtaECutHist->Draw("HIST");
0856 genChargedJetEtaECutNoElecHist->SetLineColor(seabornRed);
0857 genChargedJetEtaECutNoElecHist->Draw("HISTSAME");
0858
0859 genChargedJetEtaECutHist->SetLineWidth(2);
0860 genChargedJetEtaECutNoElecHist->SetLineWidth(2);
0861
0862 genChargedJetEtaECutHist->SetTitle("Generator Jet Eta (E > 5);Eta");
0863
0864 TLegend *legend18 = new TLegend(0.7, 0.7, 0.9, 0.9);
0865 legend18->AddEntry(genChargedJetEtaECutHist, "With Electrons", "l");
0866 legend18->AddEntry(genChargedJetEtaECutNoElecHist, "No Electrons", "l");
0867 legend18->Draw();
0868
0869 gPad->SetLogy();
0870 if(PRINT) c18->Print((results_path+"/genJetEta.png").c_str());
0871
0872
0873 TCanvas *c19 = new TCanvas("c19","Gen Jet E Vs Eta",800,600);
0874 c19->Clear();
0875 c19->Divide(1,1);
0876
0877 c19->cd(1);
0878 genChargedJetEvsEtaHist->Draw("COLZ");
0879 genChargedJetEvsEtaHist->SetTitle("Generator Jet Energy Vs Eta;Eta;Energy [GeV]");
0880 gPad->SetLogz();
0881 if(PRINT) c19->Print((results_path+"/genJetEnergyvsEta.png").c_str());
0882
0883
0884 TCanvas *c20 = new TCanvas("c20","Gen Jet Phi Vs Eta",800,600);
0885 c20->Clear();
0886 c20->Divide(1,1);
0887
0888 c20->cd(1);
0889 genChargedJetPhiVsEtaECutHist->Draw("COLZ");
0890 genChargedJetPhiVsEtaECutHist->SetTitle("Generator Jet Phi Vs Eta (E > 5);Eta;Phi");
0891 gPad->SetLogz();
0892 if(PRINT) c20->Print((results_path+"/genJetPhiVsEta.png").c_str());
0893
0894
0895 TCanvas *c21 = new TCanvas("c21","Number Constituents Per Gen Jet",800,600);
0896 c21->Clear();
0897 c21->Divide(1,1);
0898
0899 c21->cd(1);
0900 numGenChargedJetPartsHist->Draw("HIST");
0901 numGenChargedJetPartsNoElecHist->SetLineColor(seabornRed);
0902 numGenChargedJetPartsNoElecHist->Draw("HISTSAME");
0903
0904 numGenChargedJetPartsHist->SetLineWidth(2);
0905 numGenChargedJetPartsNoElecHist->SetLineWidth(2);
0906
0907 numGenChargedJetPartsHist->SetTitle("Number of Constituents Per Gen Jet;Number of Constituents");
0908
0909 TLegend *legend21 = new TLegend(0.7, 0.7, 0.9, 0.9);
0910 legend21->AddEntry(numGenChargedJetPartsHist, "With Electrons", "l");
0911 legend21->AddEntry(numGenChargedJetPartsNoElecHist, "No Electrons", "l");
0912 legend21->Draw();
0913 gPad->SetLogy();
0914 if(PRINT) c21->Print((results_path+"/numConstituentsPerGenJet.png").c_str());
0915
0916
0917 TCanvas *c22 = new TCanvas("c22","Gen Jet Constituent Momentum",800,600);
0918 c22->Clear();
0919 c22->Divide(1,1);
0920
0921 c22->cd(1);
0922 genChargedJetPartPHist->Draw("HIST");
0923 genChargedJetPartPNoElecHist->SetLineColor(seabornRed);
0924 genChargedJetPartPNoElecHist->Draw("HISTSAME");
0925
0926 genChargedJetPartPHist->SetLineWidth(2);
0927 genChargedJetPartPNoElecHist->SetLineWidth(2);
0928
0929 genChargedJetPartPHist->SetTitle("Generator Jet Constituent Momentum;Energy [GeV/c]");
0930
0931 TLegend *legend22 = new TLegend(0.7, 0.7, 0.9, 0.9);
0932 legend22->AddEntry(genChargedJetPartPHist, "With Electrons", "l");
0933 legend22->AddEntry(genChargedJetPartPNoElecHist, "No Electrons", "l");
0934 legend22->Draw();
0935
0936 gPad->SetLogy();
0937 if(PRINT) c22->Print((results_path+"/genJetConstituentMomentum.png").c_str());
0938
0939
0940 TCanvas *c23 = new TCanvas("c23","Gen Jet Constituent Eta",800,600);
0941 c23->Clear();
0942 c23->Divide(1,1);
0943
0944 c23->cd(1);
0945 genChargedJetPartEtaHist->Draw("HIST");
0946 genChargedJetPartEtaNoElecHist->SetLineColor(seabornRed);
0947 genChargedJetPartEtaNoElecHist->Draw("HISTSAME");
0948
0949 genChargedJetPartEtaHist->SetLineWidth(2);
0950 genChargedJetPartEtaNoElecHist->SetLineWidth(2);
0951
0952 genChargedJetPartEtaHist->SetTitle("Generator Jet Constituent Eta;Eta");
0953
0954 TLegend *legend23 = new TLegend(0.7, 0.7, 0.9, 0.9);
0955 legend23->AddEntry(genChargedJetPartEtaHist, "With Electrons", "l");
0956 legend23->AddEntry(genChargedJetPartEtaNoElecHist, "No Electrons", "l");
0957 legend23->Draw();
0958
0959 gPad->SetLogy();
0960 if(PRINT) c23->Print((results_path+"/genJetConstituentEta.png").c_str());
0961
0962
0963 TCanvas *c24 = new TCanvas("c24","Gen Jet Constituent Momentum Vs Eta",800,600);
0964 c24->Clear();
0965 c24->Divide(1,1);
0966
0967 c24->cd(1);
0968 genChargedJetPartPvsEtaHist->Draw("COLZ");
0969 genChargedJetPartPvsEtaHist->SetTitle("Generator Jet Constituent Momentum Vs Eta;Eta;Momentum [GeV/c]");
0970 gPad->SetLogz();
0971 if(PRINT) c24->Print((results_path+"/genJetConstituentMomentumVsEta.png").c_str());
0972
0973
0974 TCanvas *c25 = new TCanvas("c25","Gen Jet Constituent Phi Vs Eta",800,600);
0975 c25->Clear();
0976 c25->Divide(1,1);
0977
0978 c25->cd(1);
0979 genChargedJetPartPhiVsEtaHist->Draw("COLZ");
0980 genChargedJetPartPhiVsEtaHist->SetTitle("Generator Jet Constituent Phi Vs Eta;Eta;Phi");
0981 gPad->SetLogz();
0982 if(PRINT) c25->Print((results_path+"/genJetConstituentPhiVsEta.png").c_str());
0983
0984
0985 TCanvas *c26 = new TCanvas("c26","Gen Jet Constituent Pairwise Delta R",800,600);
0986 c26->Clear();
0987 c26->Divide(1,1);
0988
0989 c26->cd(1);
0990 genChargedJetPartPairwiseDeltaRHist->Draw("COLZ");
0991 genChargedJetPartPairwiseDeltaRHist->SetTitle("Generator Jet Pairwise Constituent Delta R;Delta R");
0992 genChargedJetPartPairwiseDeltaRHist->GetXaxis()->SetRangeUser(0,0.5);
0993 gPad->SetLogy();
0994 if(PRINT) c26->Print((results_path+"/genJetConstituentPairwiseDR.png").c_str());
0995
0996
0997 TCanvas *c27 = new TCanvas("c27","Gen Jet E Vs Eta (No Electrons)",800,600);
0998 c27->Clear();
0999 c27->Divide(1,1);
1000
1001 c27->cd(1);
1002 genChargedJetEvsEtaNoElecHist->Draw("COLZ");
1003 genChargedJetEvsEtaNoElecHist->SetTitle("Generator Jet Energy Vs Eta (No Electrons);Eta;Energy [GeV]");
1004 gPad->SetLogz();
1005 if(PRINT) c27->Print((results_path+"/genJetEnergyVsEtaNoElectron.png").c_str());
1006
1007
1008 TCanvas *c28 = new TCanvas("c28","Gen Jet Phi Vs Eta (No Electrons)",800,600);
1009 c28->Clear();
1010 c28->Divide(1,1);
1011
1012 c28->cd(1);
1013 genChargedJetPhiVsEtaECutNoElecHist->Draw("COLZ");
1014 genChargedJetPhiVsEtaECutNoElecHist->SetTitle("Generator Jet Phi Vs Eta (E > 5) (No Electrons);Eta;Phi");
1015 gPad->SetLogz();
1016 if(PRINT) c28->Print((results_path+"/genJetPhiVsEtaNoElectron.png").c_str());
1017
1018
1019 TCanvas *c29 = new TCanvas("c29","Gen Jet Constituent Momentum Vs Eta (No Electrons)",800,600);
1020 c29->Clear();
1021 c29->Divide(1,1);
1022
1023 c29->cd(1);
1024 genChargedJetPartPvsEtaNoElecHist->Draw("COLZ");
1025 genChargedJetPartPvsEtaNoElecHist->SetTitle("Generator Jet Constituent Momentum Vs Eta (No Electrons);Eta;Momentum [GeV/c]");
1026 gPad->SetLogz();
1027 if(PRINT) c29->Print((results_path+"/genJetConstituentMomentumVsEtaNoElectron.png").c_str());
1028
1029
1030 TCanvas *c30 = new TCanvas("c30","Gen Jet Constituent Phi Vs Eta (No Electrons)",800,600);
1031 c30->Clear();
1032 c30->Divide(1,1);
1033
1034 c30->cd(1);
1035 genChargedJetPartPhiVsEtaNoElecHist->Draw("COLZ");
1036 genChargedJetPartPhiVsEtaNoElecHist->SetTitle("Generator Jet Constituent Phi Vs Eta (No Electrons);Eta;Phi");
1037 gPad->SetLogz();
1038
1039 if(PRINT) c30->Print((results_path+"/genJetConstituentPhiVsEtaNoElectron.png").c_str());
1040
1041
1042
1043
1044 TCanvas *c31 = new TCanvas("c31","Gen - Reco Delta R",800,600);
1045 c31->Clear();
1046 c31->Divide(1,1);
1047
1048 c31->cd(1);
1049 matchJetDeltaRHist->Draw("HIST");
1050 matchJetDeltaRBackHist->SetLineColor(seabornRed);
1051
1052 matchJetDeltaRHist->SetTitle("Matched Gen - Reco Jet Delta R;Delta R");
1053 gPad->SetLogy();
1054 if(PRINT) c31->Print((results_path+"/genRecoJetDeltaR.png").c_str());
1055
1056
1057 TCanvas *c32 = new TCanvas("c32","Reco Vs Gen Eta",800,600);
1058 c32->Clear();
1059 c32->Divide(1,1);
1060
1061 c32->cd(1);
1062 recoVsGenChargedJetEtaHist->Draw("COLZ");
1063 recoVsGenChargedJetEtaHist->SetTitle("Reconstructed Vs Generator Jet Eta;Gen Eta;Reco Eta");
1064 gPad->SetLogz();
1065 if(PRINT) c32->Print((results_path+"/matchedRecoVsGenJetEta.png").c_str());
1066
1067
1068 TCanvas *c33 = new TCanvas("c33","Reco Vs Gen Phi",800,600);
1069 c33->Clear();
1070 c33->Divide(1,1);
1071
1072 c33->cd(1);
1073 recoVsGenChargedJetPhiHist->Draw("COLZ");
1074 recoVsGenChargedJetPhiHist->SetTitle("Reconstructed Vs Generator Jet Phi;Gen Phi;Reco Phi");
1075 gPad->SetLogz();
1076 if(PRINT) c33->Print((results_path+"/matchedRecoVsGenJetPhi.png").c_str());
1077
1078
1079 TCanvas *c34 = new TCanvas("c34","Reco Vs Gen Energy",800,600);
1080 c34->Clear();
1081 c34->Divide(1,1);
1082
1083 TF1 *f1_34 = new TF1("f1_34","1.0*x + 0.0",1,100);
1084 TF1 *f2_34 = new TF1("f2_34","2.0*x + 0.0",1,100);
1085 TF1 *f3_34 = new TF1("f3_34","3.0*x + 0.0",1,100);
1086
1087 c34->cd(1);
1088 recoVsGenChargedJetEHist->Draw("COLZ");
1089 recoVsGenChargedJetEHist->SetTitle("Reconstructed Vs Generator Jet Energy;Gen E;Reco E");
1090 f1_34->Draw("SAME");
1091 f2_34->Draw("SAME");
1092 f3_34->Draw("SAME");
1093 gPad->SetLogz();
1094 if(PRINT) c34->Print((results_path+"/matchedRecoVsGenJetEnergy.png").c_str());
1095
1096
1097 TCanvas *c35 = new TCanvas("c35","Jet Res Vs Gen Eta",800,600);
1098 c35->Clear();
1099 c35->Divide(1,1);
1100
1101 c35->cd(1);
1102 jetResVsEtaHist->Draw("COLZ");
1103 jetResVsEtaHist->SetTitle("(Reco - Gen)/Gen Jet Energy Vs Gen Eta;Gen Eta;Res");
1104 gPad->SetLogz();
1105 if(PRINT) c35->Print((results_path+"/matchedJetResolutionVsEta.png").c_str());
1106
1107
1108 TCanvas *c36 = new TCanvas("c36","Jet Res Vs Gen E",800,600);
1109 c36->Clear();
1110 c36->Divide(1,1);
1111
1112 c36->cd(1);
1113 jetResVsEHist->Draw("COLZ");
1114 jetResVsEHist->SetTitle("(Reco - Gen)/Gen Jet Energy Vs Gen Energy;Gen E;Res");
1115 gPad->SetLogz();
1116 if(PRINT) c36->Print((results_path+"/matchedJetResolutionVsEnergy.png").c_str());
1117
1118
1119 TCanvas *c37 = new TCanvas("c37","Jet Res Vs Gen E (-2.5 < eta < -1.0)",800,600);
1120 c37->Clear();
1121 c37->Divide(1,1);
1122
1123 c37->cd(1);
1124 jetResVsENegEtaNoDupHist->Draw("COLZ");
1125 jetResVsENegEtaNoDupHist->SetTitle("(Reco - Gen)/Gen Jet Energy Vs Gen Energy (-2.5 < eta < -1.0) No Duplicate;Gen E;Res");
1126 gPad->SetLogz();
1127 if(PRINT) c37->Print((results_path+"/matchedJetResolutionVsEnergyNegEta.png").c_str());
1128
1129
1130 TCanvas *c38 = new TCanvas("c38","Jet Res Vs Gen E (-1.0 < eta < 1.0)",800,600);
1131 c38->Clear();
1132 c38->Divide(1,1);
1133
1134 c38->cd(1);
1135 jetResVsEMidEtaNoDupHist->Draw("COLZ");
1136 jetResVsEMidEtaNoDupHist->SetTitle("(Reco - Gen)/Gen Jet Energy Vs Gen Energy (-1.0 < eta < 1.0) No Duplicate;Gen E;Res");
1137 gPad->SetLogz();
1138 if(PRINT) c38->Print((results_path+"/matchedJetResolutionVsEnergyMidEta.png").c_str());
1139 delete c38;
1140
1141 TCanvas *c39 = new TCanvas("c39","Jet Res Vs Gen E (1.0 < eta < 2.5)",800,600);
1142 c39->Clear();
1143 c39->Divide(1,1);
1144
1145 c39->cd(1);
1146 jetResVsEPosEtaNoDupHist->Draw("COLZ");
1147 jetResVsEPosEtaNoDupHist->SetTitle("(Reco - Gen)/Gen Jet Energy Vs Gen Energy (1.0 < eta < 2.5) No Duplicate;Gen E;Res");
1148 gPad->SetLogz();
1149 if(PRINT) c39->Print((results_path+"/matchedJetResolutionVsEnergyPosEta.png").c_str());
1150 delete c39;
1151
1152
1153
1154 const int BINS = 20;
1155 double binCent[BINS];
1156 double jesVsENeg[BINS];
1157 double jesVsEMid[BINS];
1158 double jesVsEPos[BINS];
1159 double jerVsENeg[BINS];
1160 double jerVsEMid[BINS];
1161 double jerVsEPos[BINS];
1162
1163 std::fill(std::begin(binCent), std::end(binCent), -999.);
1164 std::fill(std::begin(jesVsENeg), std::end(jesVsENeg), -999.);
1165 std::fill(std::begin(jesVsEMid), std::end(jesVsEMid), -999.);
1166 std::fill(std::begin(jesVsEPos), std::end(jesVsEPos), -999.);
1167 std::fill(std::begin(jerVsENeg), std::end(jerVsENeg), -999.);
1168 std::fill(std::begin(jerVsEMid), std::end(jerVsEMid), -999.);
1169 std::fill(std::begin(jerVsEPos), std::end(jerVsEPos), -999.);
1170
1171 TH1D *pxA = jetResVsENegEtaNoDupHist->ProjectionX("pxA",1,10000);
1172 for(int i=0; i<BINS; i++)
1173 {
1174 binCent[i] = pxA->GetBinCenter(i+1);
1175 }
1176
1177 TCanvas *c40 = new TCanvas("c40","Negative Rapidity Fit Results",800,600);
1178 c40->Clear();
1179 c40->Divide(5,4);
1180
1181 TH1D *hA[20];
1182 for(int i=1; i<21; i++)
1183 {
1184 hA[i-1] = (TH1D *)jetResVsENegEtaNoDupHist->ProjectionY(Form("projYA_%d",i),i,i);
1185
1186 TF1 *myGausA = new TF1("myGausA","gaus",-0.5,0.5);
1187 myGausA->SetParameters(hA[i-1]->GetMaximum(),0.0,0.01);
1188
1189 c40->cd(i);
1190
1191 hA[i-1]->Fit("myGausA","B","",-0.5,0.5);
1192 hA[i-1]->GetXaxis()->SetRangeUser(-1,1);
1193 gPad->SetLogy();
1194
1195 if(hA[i-1]->GetEntries() > 2)
1196 {
1197 auto fA = hA[i-1]->GetFunction("myGausA");
1198
1199 if(fA->GetParError(2)/fA->GetParameter(2) < 0.5)
1200 {
1201 jesVsENeg[i-1] = fA->GetParameter(1);
1202 jerVsENeg[i-1] = fA->GetParameter(2);
1203 }
1204
1205
1206 }
1207 }
1208 if(PRINT) c40->Print((results_path+"/matchedJetResolutionVsEnergyNegEtaFitSummary.png").c_str());
1209 delete c40;
1210
1211 TCanvas *c41 = new TCanvas("c41","Mid Rapidity Fit Results",800,600);
1212 c41->Clear();
1213 c41->Divide(5,4);
1214
1215 TH1D *hB[20];
1216 for(int i=1; i<21; i++)
1217 {
1218 hB[i-1] = (TH1D *)jetResVsEMidEtaNoDupHist->ProjectionY(Form("projYB_%d",i),i,i);
1219
1220 TF1 *myGausB = new TF1("myGausB","gaus",-0.5,0.5);
1221 myGausB->SetParameters(hB[i-1]->GetMaximum(),0.0,0.01);
1222
1223 c41->cd(i);
1224
1225 hB[i-1]->Fit("myGausB","B","",-0.5,0.5);
1226 hB[i-1]->GetXaxis()->SetRangeUser(-1,1);
1227 gPad->SetLogy();
1228
1229 if(hB[i-1]->GetEntries() > 2)
1230 {
1231 auto fB = hB[i-1]->GetFunction("myGausB");
1232
1233 if(fB->GetParError(2)/fB->GetParameter(2) < 0.5)
1234 {
1235 jesVsEMid[i-1] = fB->GetParameter(1);
1236 jerVsEMid[i-1] = fB->GetParameter(2);
1237 }
1238
1239
1240 }
1241 }
1242 if(PRINT) c41->Print((results_path+"/matchedJetResolutionVsEnergyMidEtaFitSummary.png").c_str());
1243 delete c41;
1244
1245 TCanvas *c42 = new TCanvas("c42","Positive Rapidity Fit Results",800,600);
1246 c42->Clear();
1247 c42->Divide(5,4);
1248
1249 TH1D *hC[20];
1250 for(int i=1; i<21; i++)
1251 {
1252 hC[i-1] = (TH1D *)jetResVsEPosEtaNoDupHist->ProjectionY(Form("projYC_%d",i),i,i);
1253
1254 TF1 *myGausC = new TF1("myGausC","gaus",-0.5,0.5);
1255 myGausC->SetParameters(hC[i-1]->GetMaximum(),0.0,0.01);
1256
1257 c42->cd(i);
1258
1259 hC[i-1]->Fit("myGausC","B","",-0.5,0.5);
1260 hC[i-1]->GetXaxis()->SetRangeUser(-1,1);
1261 gPad->SetLogy();
1262
1263 if(hC[i-1]->GetEntries() > 2)
1264 {
1265 auto fC = hC[i-1]->GetFunction("myGausC");
1266
1267 if(fC->GetParError(2)/fC->GetParameter(2) < 0.5)
1268 {
1269 jesVsEPos[i-1] = fC->GetParameter(1);
1270 jerVsEPos[i-1] = fC->GetParameter(2);
1271 }
1272
1273
1274 }
1275 }
1276 if(PRINT) c42->Print((results_path+"/matchedJetResolutionVsEnergyPosEtaFitSummary.png").c_str());
1277 delete c42;
1278 TCanvas *c43 = new TCanvas("c43","Positive JES/JER",800,600);
1279 c43->Clear();
1280 c43->Divide(1,1);
1281
1282 TGraph *gJESvsENeg = new TGraph(BINS,binCent,jesVsENeg);
1283 TGraph *gJERvsENeg = new TGraph(BINS,binCent,jerVsENeg);
1284
1285 TGraph *gJESvsEMid = new TGraph(BINS,binCent,jesVsEMid);
1286 TGraph *gJERvsEMid = new TGraph(BINS,binCent,jerVsEMid);
1287
1288 TGraph *gJESvsEPos = new TGraph(BINS,binCent,jesVsEPos);
1289 TGraph *gJERvsEPos = new TGraph(BINS,binCent,jerVsEPos);
1290
1291 TH2D *test43 = new TH2D("test43","Jet Energy Scale / Resolution Vs Eta;True Eta;JES/JER",1,0.,100.,1,-0.2,0.2);
1292 test43->Draw();
1293
1294 c43->cd(1);
1295 gJERvsENeg->Draw("*");
1296 gJERvsENeg->SetMarkerStyle(21);
1297 gJERvsENeg->SetMarkerSize(1);
1298 gJERvsENeg->SetMarkerColor(seabornBlue);
1299
1300 gJESvsENeg->Draw("*");
1301 gJESvsENeg->SetMarkerStyle(26);
1302 gJESvsENeg->SetMarkerSize(1);
1303 gJESvsENeg->SetMarkerColor(seabornBlue);
1304
1305 gJERvsEMid->Draw("*");
1306 gJERvsEMid->SetMarkerStyle(21);
1307 gJERvsEMid->SetMarkerSize(1);
1308 gJERvsEMid->SetMarkerColor(seabornRed);
1309
1310 gJESvsEMid->Draw("*");
1311 gJESvsEMid->SetMarkerStyle(26);
1312 gJESvsEMid->SetMarkerSize(1);
1313 gJESvsEMid->SetMarkerColor(seabornRed);
1314
1315 gJERvsEPos->Draw("*");
1316 gJERvsEPos->SetMarkerStyle(21);
1317 gJERvsEPos->SetMarkerSize(1);
1318 gJERvsEPos->SetMarkerColor(seabornGreen);
1319
1320 gJESvsEPos->Draw("*");
1321 gJESvsEPos->SetMarkerStyle(26);
1322 gJESvsEPos->SetMarkerSize(1);
1323 gJESvsEPos->SetMarkerColor(seabornGreen);
1324
1325 TLegend *legend = new TLegend(0.7,0.7,0.9,0.9);
1326 legend->AddEntry(gJERvsENeg, "JER, (-2.5 < #eta < -1)", "p");
1327 legend->AddEntry(gJESvsENeg, "JES, (-2.5 < #eta < -1)","p");
1328 legend->AddEntry(gJERvsEMid, "JER, (-1 < #eta < 1)", "p");
1329 legend->AddEntry(gJESvsEMid, "JES, (-1 < #eta < 1)", "p");
1330 legend->AddEntry(gJERvsEPos, "JER, (1 < #eta < 2.5) ", "p");
1331 legend->AddEntry(gJESvsEPos, "JES, (1 < #eta < 2.5)", "p");
1332 legend->Draw();
1333
1334 if(PRINT) c43->Print((results_path+"/matchedJetScaleResolutionSummary.png").c_str());
1335 delete c43;
1336
1337 delete mychain;
1338
1339 return 0;
1340 }