File indexing completed on 2024-04-06 12:33:07
0001
0002
0003
0004
0005
0006 #include "JetTester.h"
0007
0008 using namespace edm;
0009 using namespace reco;
0010 using namespace std;
0011
0012 JetTester::JetTester(const edm::ParameterSet &iConfig)
0013 : mInputCollection(iConfig.getParameter<edm::InputTag>("src")),
0014
0015
0016 JetType(iConfig.getUntrackedParameter<std::string>("JetType")),
0017 mRecoJetPtThreshold(iConfig.getParameter<double>("recoJetPtThreshold")),
0018 mMatchGenPtThreshold(iConfig.getParameter<double>("matchGenPtThreshold")),
0019 mRThreshold(iConfig.getParameter<double>("RThreshold")) {
0020 std::string inputCollectionLabel(mInputCollection.label());
0021
0022 isCaloJet = (std::string("calo") == JetType);
0023 isPFJet = (std::string("pf") == JetType);
0024 isMiniAODJet = (std::string("miniaod") == JetType);
0025 if (!isMiniAODJet) {
0026 mJetCorrector = iConfig.getParameter<edm::InputTag>("JetCorrections");
0027 }
0028
0029
0030 pvToken_ = consumes<std::vector<reco::Vertex>>(iConfig.getParameter<edm::InputTag>("primVertex"));
0031 if (isCaloJet)
0032 caloJetsToken_ = consumes<reco::CaloJetCollection>(mInputCollection);
0033 if (isPFJet)
0034 pfJetsToken_ = consumes<reco::PFJetCollection>(mInputCollection);
0035 if (isMiniAODJet)
0036 patJetsToken_ = consumes<pat::JetCollection>(mInputCollection);
0037 mInputGenCollection = iConfig.getParameter<edm::InputTag>("srcGen");
0038 genJetsToken_ = consumes<reco::GenJetCollection>(edm::InputTag(mInputGenCollection));
0039 evtToken_ = consumes<GenEventInfoProduct>(edm::InputTag("generator"));
0040 if (!isMiniAODJet && !mJetCorrector.label().empty()) {
0041 jetCorrectorToken_ = consumes<reco::JetCorrector>(mJetCorrector);
0042 }
0043
0044
0045 mNvtx = nullptr;
0046
0047
0048 mEta = nullptr;
0049 mPhi = nullptr;
0050 mEnergy = nullptr;
0051 mP = nullptr;
0052 mPt = nullptr;
0053 mMass = nullptr;
0054 mConstituents = nullptr;
0055 mJetArea = nullptr;
0056
0057
0058
0059 mCorrJetPt = nullptr;
0060 mCorrJetEta = nullptr;
0061 mCorrJetPhi = nullptr;
0062 mCorrJetEta_Pt40 = nullptr;
0063 mCorrJetPhi_Pt40 = nullptr;
0064
0065
0066 mPtCorrOverReco_Pt_B = nullptr;
0067 mPtCorrOverReco_Pt_E = nullptr;
0068 mPtCorrOverReco_Pt_F = nullptr;
0069 mPtCorrOverReco_Eta_20_40 = nullptr;
0070 mPtCorrOverReco_Eta_40_200 = nullptr;
0071 mPtCorrOverReco_Eta_200_600 = nullptr;
0072 mPtCorrOverReco_Eta_600_1500 = nullptr;
0073 mPtCorrOverReco_Eta_1500_3500 = nullptr;
0074 mPtCorrOverReco_Eta_3500_5000 = nullptr;
0075 mPtCorrOverReco_Eta_5000_6500 = nullptr;
0076 mPtCorrOverReco_Eta_3500 = nullptr;
0077 mPtCorrOverGen_GenPt_B = nullptr;
0078 mPtCorrOverGen_GenPt_E = nullptr;
0079 mPtCorrOverGen_GenPt_F = nullptr;
0080 mPtCorrOverGen_GenEta_20_40 = nullptr;
0081 mPtCorrOverGen_GenEta_40_200 = nullptr;
0082 mPtCorrOverGen_GenEta_200_600 = nullptr;
0083 mPtCorrOverGen_GenEta_600_1500 = nullptr;
0084 mPtCorrOverGen_GenEta_1500_3500 = nullptr;
0085 mPtCorrOverGen_GenEta_3500_5000 = nullptr;
0086 mPtCorrOverGen_GenEta_5000_6500 = nullptr;
0087 mPtCorrOverGen_GenEta_3500 = nullptr;
0088
0089
0090 mGenEta = nullptr;
0091 mGenPhi = nullptr;
0092 mGenPt = nullptr;
0093 mGenEtaFirst = nullptr;
0094 mGenPhiFirst = nullptr;
0095 mPtHat = nullptr;
0096 mDeltaEta = nullptr;
0097 mDeltaPhi = nullptr;
0098 mDeltaPt = nullptr;
0099
0100 mPtRecoOverGen_B_20_40 = nullptr;
0101 mPtRecoOverGen_E_20_40 = nullptr;
0102 mPtRecoOverGen_F_20_40 = nullptr;
0103 mPtRecoOverGen_B_40_200 = nullptr;
0104 mPtRecoOverGen_E_40_200 = nullptr;
0105 mPtRecoOverGen_F_40_200 = nullptr;
0106 mPtRecoOverGen_B_200_600 = nullptr;
0107 mPtRecoOverGen_E_200_600 = nullptr;
0108 mPtRecoOverGen_F_200_600 = nullptr;
0109 mPtRecoOverGen_B_600_1500 = nullptr;
0110 mPtRecoOverGen_E_600_1500 = nullptr;
0111 mPtRecoOverGen_F_600_1500 = nullptr;
0112 mPtRecoOverGen_B_1500_3500 = nullptr;
0113 mPtRecoOverGen_E_1500_3500 = nullptr;
0114 mPtRecoOverGen_F_1500_3500 = nullptr;
0115 mPtRecoOverGen_B_3500_5000 = nullptr;
0116 mPtRecoOverGen_E_3500_5000 = nullptr;
0117 mPtRecoOverGen_B_5000_6500 = nullptr;
0118 mPtRecoOverGen_E_5000_6500 = nullptr;
0119 mPtRecoOverGen_B_3500 = nullptr;
0120 mPtRecoOverGen_E_3500 = nullptr;
0121 mPtRecoOverGen_F_3500 = nullptr;
0122
0123
0124 mPtRecoOverGen_GenPt_B = nullptr;
0125 mPtRecoOverGen_GenPt_E = nullptr;
0126 mPtRecoOverGen_GenPt_F = nullptr;
0127 mPtRecoOverGen_GenPhi_B = nullptr;
0128 mPtRecoOverGen_GenPhi_E = nullptr;
0129 mPtRecoOverGen_GenPhi_F = nullptr;
0130 mPtRecoOverGen_GenEta_20_40 = nullptr;
0131 mPtRecoOverGen_GenEta_40_200 = nullptr;
0132 mPtRecoOverGen_GenEta_200_600 = nullptr;
0133 mPtRecoOverGen_GenEta_600_1500 = nullptr;
0134 mPtRecoOverGen_GenEta_1500_3500 = nullptr;
0135 mPtRecoOverGen_GenEta_3500_5000 = nullptr;
0136 mPtRecoOverGen_GenEta_5000_6500 = nullptr;
0137 mPtRecoOverGen_GenEta_3500 = nullptr;
0138
0139
0140 mEtaFirst = nullptr;
0141 mPhiFirst = nullptr;
0142 mPtFirst = nullptr;
0143 mMjj = nullptr;
0144 mNJetsEta_B_20_40 = nullptr;
0145 mNJetsEta_E_20_40 = nullptr;
0146 mNJetsEta_B_40 = nullptr;
0147 mNJetsEta_E_40 = nullptr;
0148 mNJets1 = nullptr;
0149 mNJets2 = nullptr;
0150
0151
0152
0153
0154
0155
0156
0157
0158
0159
0160
0161 maxEInEmTowers = nullptr;
0162
0163 maxEInHadTowers = nullptr;
0164
0165 energyFractionHadronic = nullptr;
0166
0167 emEnergyFraction = nullptr;
0168
0169 hadEnergyInHB = nullptr;
0170
0171 hadEnergyInHO = nullptr;
0172
0173 hadEnergyInHE = nullptr;
0174
0175 hadEnergyInHF = nullptr;
0176
0177 emEnergyInEB = nullptr;
0178
0179 emEnergyInEE = nullptr;
0180
0181 emEnergyInHF = nullptr;
0182
0183 towersArea = nullptr;
0184
0185
0186 n90 = nullptr;
0187
0188
0189 n60 = nullptr;
0190
0191
0192
0193
0194
0195
0196
0197 muonMultiplicity = nullptr;
0198
0199 chargedMultiplicity = nullptr;
0200
0201 chargedEmEnergy = nullptr;
0202
0203 neutralEmEnergy = nullptr;
0204
0205 chargedHadronEnergy = nullptr;
0206
0207 neutralHadronEnergy = nullptr;
0208
0209 chargedHadronEnergyFraction = nullptr;
0210
0211 neutralHadronEnergyFraction = nullptr;
0212
0213 chargedEmEnergyFraction = nullptr;
0214
0215 neutralEmEnergyFraction = nullptr;
0216
0217
0218
0219 photonEnergy = nullptr;
0220
0221 photonEnergyFraction = nullptr;
0222
0223 electronEnergy = nullptr;
0224
0225 electronEnergyFraction = nullptr;
0226
0227 muonEnergy = nullptr;
0228
0229 muonEnergyFraction = nullptr;
0230
0231 HFHadronEnergy = nullptr;
0232
0233 HFHadronEnergyFraction = nullptr;
0234
0235 HFEMEnergy = nullptr;
0236
0237 HFEMEnergyFraction = nullptr;
0238
0239 chargedHadronMultiplicity = nullptr;
0240
0241 neutralHadronMultiplicity = nullptr;
0242
0243 photonMultiplicity = nullptr;
0244
0245 electronMultiplicity = nullptr;
0246
0247 HFHadronMultiplicity = nullptr;
0248
0249 HFEMMultiplicity = nullptr;
0250
0251 chargedMuEnergy = nullptr;
0252
0253 chargedMuEnergyFraction = nullptr;
0254
0255 neutralMultiplicity = nullptr;
0256
0257
0258 HOEnergy = nullptr;
0259
0260 HOEnergyFraction = nullptr;
0261
0262 hadronFlavor = nullptr;
0263 partonFlavor = nullptr;
0264 genPartonPDGID = nullptr;
0265 }
0266
0267 void JetTester::bookHistograms(DQMStore::IBooker &ibooker, edm::Run const &iRun, edm::EventSetup const &) {
0268 ibooker.setCurrentFolder("JetMET/JetValidation/" + mInputCollection.label());
0269
0270 double log10PtMin = 0.50;
0271 double log10PtMax = 3.75;
0272 int log10PtBins = 26;
0273
0274
0275 double etaRange[91] = {-6.0, -5.8, -5.6, -5.4, -5.2, -5.0, -4.8, -4.6, -4.4, -4.2, -4.0, -3.8, -3.6, -3.4, -3.2, -3.0,
0276 -2.9, -2.8, -2.7, -2.6, -2.5, -2.4, -2.3, -2.2, -2.1, -2.0, -1.9, -1.8, -1.7, -1.6, -1.5, -1.4,
0277 -1.3, -1.2, -1.1, -1.0, -0.9, -0.8, -0.7, -0.6, -0.5, -0.4, -0.3, -0.2, -0.1, 0.0, 0.1, 0.2,
0278 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8,
0279 1.9, 2.0, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3.0, 3.2, 3.4, 3.6, 3.8,
0280 4.0, 4.2, 4.4, 4.6, 4.8, 5.0, 5.2, 5.4, 5.6, 5.8, 6.0};
0281
0282
0283 mNvtx = ibooker.book1D("Nvtx", "number of vertices", 60, 0, 60);
0284
0285
0286 mEta = ibooker.book1D("Eta", "Eta", 120, -6, 6);
0287 mPhi = ibooker.book1D("Phi", "Phi", 70, -3.5, 3.5);
0288 mPt = ibooker.book1D("Pt", "Pt", 100, 0, 1000);
0289 mP = ibooker.book1D("P", "P", 100, 0, 1000);
0290 mEnergy = ibooker.book1D("Energy", "Energy", 100, 0, 1000);
0291 mMass = ibooker.book1D("Mass", "Mass", 100, 0, 200);
0292 mConstituents = ibooker.book1D("Constituents", "Constituents", 100, 0, 100);
0293 mJetArea = ibooker.book1D("JetArea", "JetArea", 100, 0, 4);
0294
0295 if (isMiniAODJet) {
0296 hadronFlavor = ibooker.book1D("HadronFlavor", "HadronFlavor", 44, -22, 22);
0297 partonFlavor = ibooker.book1D("PartonFlavor", "PartonFlavor", 44, -22, 22);
0298 genPartonPDGID = ibooker.book1D("genPartonPDGID", "genPartonPDGID", 44, -22, 22);
0299 }
0300
0301 if (isMiniAODJet || !mJetCorrector.label().empty()) {
0302
0303 mCorrJetPt = ibooker.book1D("CorrJetPt", "CorrJetPt", 150, 0, 1500);
0304 mCorrJetEta = ibooker.book1D("CorrJetEta", "CorrJetEta Pt>20", 60, -6, 6);
0305 mCorrJetPhi = ibooker.book1D("CorrJetPhi", "CorrJetPhi Pt>20", 70, -3.5, 3.5);
0306 mCorrJetEta_Pt40 = ibooker.book1D("CorrJetEta_Pt40", "CorrJetEta Pt>40", 60, -6, 6);
0307 mCorrJetPhi_Pt40 = ibooker.book1D("CorrJetPhi_Pt40", "CorrJetPhi Pt>40", 70, -3.5, 3.5);
0308
0309
0310 mPtCorrOverReco_Pt_B =
0311 ibooker.bookProfile("PtCorrOverReco_Pt_B", "0<|eta|<1.5", log10PtBins, log10PtMin, log10PtMax, 0, 5, " ");
0312 mPtCorrOverReco_Pt_E =
0313 ibooker.bookProfile("PtCorrOverReco_Pt_E", "1.5<|eta|<3", log10PtBins, log10PtMin, log10PtMax, 0, 5, " ");
0314 mPtCorrOverReco_Pt_F =
0315 ibooker.bookProfile("PtCorrOverReco_Pt_F", "3<|eta|<6", log10PtBins, log10PtMin, log10PtMax, 0, 5, " ");
0316
0317 mPtCorrOverReco_Eta_20_40 = ibooker.bookProfile("PtCorrOverReco_Eta_20_40", "20<genPt<40", 90, etaRange, 0, 5, " ");
0318 mPtCorrOverReco_Eta_40_200 =
0319 ibooker.bookProfile("PtCorrOverReco_Eta_40_200", "40<genPt<200", 90, etaRange, 0, 5, " ");
0320 mPtCorrOverReco_Eta_200_600 =
0321 ibooker.bookProfile("PtCorrOverReco_Eta_200_600", "200<genPt<600", 90, etaRange, 0, 5, " ");
0322 mPtCorrOverReco_Eta_600_1500 =
0323 ibooker.bookProfile("PtCorrOverReco_Eta_600_1500", "600<genPt<1500", 90, etaRange, 0, 5, " ");
0324 mPtCorrOverReco_Eta_1500_3500 =
0325 ibooker.bookProfile("PtCorrOverReco_Eta_1500_3500", "1500<genPt<3500", 90, etaRange, 0, 5, " ");
0326 mPtCorrOverReco_Eta_3500_5000 =
0327 ibooker.bookProfile("PtCorrOverReco_Eta_3500_5000", "3500<genPt<5000", 90, etaRange, 0, 5, " ");
0328 mPtCorrOverReco_Eta_5000_6500 =
0329 ibooker.bookProfile("PtCorrOverReco_Eta_5000_6500", "5000<genPt<6500", 90, etaRange, 0, 5, " ");
0330 mPtCorrOverReco_Eta_3500 = ibooker.bookProfile("PtCorrOverReco_Eta_3500", "genPt>3500", 90, etaRange, 0, 5, " ");
0331
0332 mPtCorrOverGen_GenPt_B =
0333 ibooker.bookProfile("PtCorrOverGen_GenPt_B", "0<|eta|<1.5", log10PtBins, log10PtMin, log10PtMax, 0.8, 1.2, " ");
0334 mPtCorrOverGen_GenPt_E =
0335 ibooker.bookProfile("PtCorrOverGen_GenPt_E", "1.5<|eta|<3", log10PtBins, log10PtMin, log10PtMax, 0.8, 1.2, " ");
0336 mPtCorrOverGen_GenPt_F =
0337 ibooker.bookProfile("PtCorrOverGen_GenPt_F", "3<|eta|<6", log10PtBins, log10PtMin, log10PtMax, 0.8, 1.2, " ");
0338
0339 mPtCorrOverGen_GenEta_20_40 =
0340 ibooker.bookProfile("PtCorrOverGen_GenEta_20_40", "20<genPt<40;#eta", 90, etaRange, 0.8, 1.2, " ");
0341 mPtCorrOverGen_GenEta_40_200 =
0342 ibooker.bookProfile("PtCorrOverGen_GenEta_40_200", "40<genPt<200;#eta", 90, etaRange, 0.8, 1.2, " ");
0343 mPtCorrOverGen_GenEta_200_600 =
0344 ibooker.bookProfile("PtCorrOverGen_GenEta_200_600", "200<genPt<600;#eta", 90, etaRange, 0.8, 1.2, " ");
0345 mPtCorrOverGen_GenEta_600_1500 =
0346 ibooker.bookProfile("PtCorrOverGen_GenEta_600_1500", "600<genPt<1500;#eta", 90, etaRange, 0.8, 1.2, " ");
0347 mPtCorrOverGen_GenEta_1500_3500 =
0348 ibooker.bookProfile("PtCorrOverGen_GenEta_1500_3500", "1500<genPt<3500;#eta", 90, etaRange, 0.8, 1.2, " ");
0349 mPtCorrOverGen_GenEta_3500_5000 =
0350 ibooker.bookProfile("PtCorrOverGen_GenEta_3500_5000", "3500<genPt<5000;#eta", 90, etaRange, 0.8, 1.2, " ");
0351 mPtCorrOverGen_GenEta_5000_6500 =
0352 ibooker.bookProfile("PtCorrOverGen_GenEta_5000_6500", "5000<genPt<6500;#eta", 90, etaRange, 0.8, 1.2, " ");
0353 mPtCorrOverGen_GenEta_3500 =
0354 ibooker.bookProfile("PtCorrOverGen_GenEta_3500", "genPt>3500;#eta", 90, etaRange, 0.8, 1.2, " ");
0355 }
0356
0357 mGenEta = ibooker.book1D("GenEta", "GenEta", 120, -6, 6);
0358 mGenPhi = ibooker.book1D("GenPhi", "GenPhi", 70, -3.5, 3.5);
0359 mGenPt = ibooker.book1D("GenPt", "GenPt", 100, 0, 1000);
0360 mGenEtaFirst = ibooker.book1D("GenEtaFirst", "GenEtaFirst", 120, -6, 6);
0361 mGenPhiFirst = ibooker.book1D("GenPhiFirst", "GenPhiFirst", 70, -3.5, 3.5);
0362 mPtHat = ibooker.book1D("PtHat", "PtHat", 100, 0, 1000);
0363 mDeltaEta = ibooker.book1D("DeltaEta", "DeltaEta", 100, -0.5, 0.5);
0364 mDeltaPhi = ibooker.book1D("DeltaPhi", "DeltaPhi", 100, -0.5, 0.5);
0365 mDeltaPt = ibooker.book1D("DeltaPt", "DeltaPt", 100, -1.0, 1.0);
0366
0367 mPtRecoOverGen_B_20_40 = ibooker.book1D("PtRecoOverGen_B_20_40", "20<genpt<40", 90, 0, 2);
0368 mPtRecoOverGen_E_20_40 = ibooker.book1D("PtRecoOverGen_E_20_40", "20<genpt<40", 90, 0, 2);
0369 mPtRecoOverGen_F_20_40 = ibooker.book1D("PtRecoOverGen_F_20_40", "20<genpt<40", 90, 0, 2);
0370 mPtRecoOverGen_B_40_200 = ibooker.book1D("PtRecoOverGen_B_40_200", "40<genpt<200", 90, 0, 2);
0371 mPtRecoOverGen_E_40_200 = ibooker.book1D("PtRecoOverGen_E_40_200", "40<genpt<200", 90, 0, 2);
0372 mPtRecoOverGen_F_40_200 = ibooker.book1D("PtRecoOverGen_F_40_200", "40<genpt<200", 90, 0, 2);
0373 mPtRecoOverGen_B_200_600 = ibooker.book1D("PtRecoOverGen_B_200_600", "200<genpt<600", 90, 0, 2);
0374 mPtRecoOverGen_E_200_600 = ibooker.book1D("PtRecoOverGen_E_200_600", "200<genpt<600", 90, 0, 2);
0375 mPtRecoOverGen_F_200_600 = ibooker.book1D("PtRecoOverGen_F_200_600", "200<genpt<600", 90, 0, 2);
0376 mPtRecoOverGen_B_600_1500 = ibooker.book1D("PtRecoOverGen_B_600_1500", "600<genpt<1500", 90, 0, 2);
0377 mPtRecoOverGen_E_600_1500 = ibooker.book1D("PtRecoOverGen_E_600_1500", "600<genpt<1500", 90, 0, 2);
0378 mPtRecoOverGen_F_600_1500 = ibooker.book1D("PtRecoOverGen_F_600_1500", "600<genpt<1500", 90, 0, 2);
0379 mPtRecoOverGen_B_1500_3500 = ibooker.book1D("PtRecoOverGen_B_1500_3500", "1500<genpt<3500", 90, 0, 2);
0380 mPtRecoOverGen_E_1500_3500 = ibooker.book1D("PtRecoOverGen_E_1500_3500", "1500<genpt<3500", 90, 0, 2);
0381 mPtRecoOverGen_F_1500_3500 = ibooker.book1D("PtRecoOverGen_F_1500_3500", "1500<genpt<3500", 90, 0, 2);
0382 mPtRecoOverGen_B_3500_5000 = ibooker.book1D("PtRecoOverGen_B_3500_5000", "3500<genpt<5000", 90, 0, 2);
0383 mPtRecoOverGen_E_3500_5000 = ibooker.book1D("PtRecoOverGen_E_3500_5000", "3500<genpt<5000", 90, 0, 2);
0384 mPtRecoOverGen_B_5000_6500 = ibooker.book1D("PtRecoOverGen_B_5000_6500", "5000<genpt<6500", 90, 0, 2);
0385 mPtRecoOverGen_E_5000_6500 = ibooker.book1D("PtRecoOverGen_E_5000_6500", "5000<genpt<6500", 90, 0, 2);
0386 mPtRecoOverGen_B_3500 = ibooker.book1D("PtRecoOverGen_B_3500", "genpt>3500", 90, 0, 2);
0387 mPtRecoOverGen_E_3500 = ibooker.book1D("PtRecoOverGen_E_3500", "genpt>3500", 90, 0, 2);
0388 mPtRecoOverGen_F_3500 = ibooker.book1D("PtRecoOverGen_F_3500", "genpt>3500", 90, 0, 2);
0389
0390 mMassRecoOverGen_B_20_40 = ibooker.book1D("MassRecoOverGen_B_20_40", "20<genpt<40", 90, 0, 3);
0391 mMassRecoOverGen_E_20_40 = ibooker.book1D("MassRecoOverGen_E_20_40", "20<genpt<40", 90, 0, 3);
0392 mMassRecoOverGen_F_20_40 = ibooker.book1D("MassRecoOverGen_F_20_40", "20<genpt<40", 90, 0, 3);
0393 mMassRecoOverGen_B_40_200 = ibooker.book1D("MassRecoOverGen_B_40_200", "40<genpt<200", 90, 0, 3);
0394 mMassRecoOverGen_E_40_200 = ibooker.book1D("MassRecoOverGen_E_40_200", "40<genpt<200", 90, 0, 3);
0395 mMassRecoOverGen_F_40_200 = ibooker.book1D("MassRecoOverGen_F_40_200", "40<genpt<200", 90, 0, 3);
0396 mMassRecoOverGen_B_200_500 = ibooker.book1D("MassRecoOverGen_B_200_500", "200<genpt<500", 90, 0, 3);
0397 mMassRecoOverGen_E_200_500 = ibooker.book1D("MassRecoOverGen_E_200_500", "200<genpt<500", 90, 0, 3);
0398 mMassRecoOverGen_F_200_500 = ibooker.book1D("MassRecoOverGen_F_200_500", "200<genpt<500", 90, 0, 3);
0399 mMassRecoOverGen_B_500_750 = ibooker.book1D("MassRecoOverGen_B_500_750", "500<genpt<750", 90, 0, 3);
0400 mMassRecoOverGen_E_500_750 = ibooker.book1D("MassRecoOverGen_E_500_750", "500<genpt<750", 90, 0, 3);
0401 mMassRecoOverGen_F_500_750 = ibooker.book1D("MassRecoOverGen_F_500_750", "500<genpt<750", 90, 0, 3);
0402 mMassRecoOverGen_B_750_1000 = ibooker.book1D("MassRecoOverGen_B_750_1000", "750<genpt<1000", 90, 0, 3);
0403 mMassRecoOverGen_E_750_1000 = ibooker.book1D("MassRecoOverGen_E_750_1000", "750<genpt<1000", 90, 0, 3);
0404 mMassRecoOverGen_F_750_1000 = ibooker.book1D("MassRecoOverGen_F_750_1000", "750<genpt<1000", 90, 0, 3);
0405 mMassRecoOverGen_B_1000_1500 = ibooker.book1D("MassRecoOverGen_B_1000_1500", "1000<genpt<1500", 90, 0, 3);
0406 mMassRecoOverGen_E_1000_1500 = ibooker.book1D("MassRecoOverGen_E_1000_1500", "1000<genpt<1500", 90, 0, 3);
0407 mMassRecoOverGen_F_1000_1500 = ibooker.book1D("MassRecoOverGen_F_1000_1500", "1000<genpt<1500", 90, 0, 3);
0408 mMassRecoOverGen_B_1500_3500 = ibooker.book1D("MassRecoOverGen_B_1500_3500", "1500<genpt<3500", 90, 0, 3);
0409 mMassRecoOverGen_E_1500_3500 = ibooker.book1D("MassRecoOverGen_E_1500_3500", "1500<genpt<3500", 90, 0, 3);
0410 mMassRecoOverGen_F_1500 = ibooker.book1D("MassRecoOverGen_F_1500", "genpt>1500", 90, 0, 3);
0411 mMassRecoOverGen_B_3500_5000 = ibooker.book1D("MassRecoOverGen_B_3500_5000", "3500<genpt<5000", 90, 0, 3);
0412 mMassRecoOverGen_E_3500_5000 = ibooker.book1D("MassRecoOverGen_E_3500_5000", "3500<genpt<5000", 90, 0, 3);
0413 mMassRecoOverGen_B_5000 = ibooker.book1D("MassRecoOverGen_B_5000", "genpt>5000", 90, 0, 3);
0414 mMassRecoOverGen_E_5000 = ibooker.book1D("MassRecoOverGen_E_5000", "genpt>5000", 90, 0, 3);
0415
0416
0417 mPtRecoOverGen_GenPt_B =
0418 ibooker.bookProfile("PtRecoOverGen_GenPt_B", "0<|eta|<1.5", log10PtBins, log10PtMin, log10PtMax, 0, 2, " ");
0419 mPtRecoOverGen_GenPt_E =
0420 ibooker.bookProfile("PtRecoOverGen_GenPt_E", "1.5<|eta|<3", log10PtBins, log10PtMin, log10PtMax, 0, 2, " ");
0421 mPtRecoOverGen_GenPt_F =
0422 ibooker.bookProfile("PtRecoOverGen_GenPt_F", "3<|eta|<6", log10PtBins, log10PtMin, log10PtMax, 0, 2, " ");
0423 mPtRecoOverGen_GenPhi_B = ibooker.bookProfile("PtRecoOverGen_GenPhi_B", "0<|eta|<1.5", 70, -3.5, 3.5, 0, 2, " ");
0424 mPtRecoOverGen_GenPhi_E = ibooker.bookProfile("PtRecoOverGen_GenPhi_E", "1.5<|eta|<3", 70, -3.5, 3.5, 0, 2, " ");
0425 mPtRecoOverGen_GenPhi_F = ibooker.bookProfile("PtRecoOverGen_GenPhi_F", "3<|eta|<6", 70, -3.5, 3.5, 0, 2, " ");
0426
0427 mPtRecoOverGen_GenEta_20_40 =
0428 ibooker.bookProfile("PtRecoOverGen_GenEta_20_40", "20<genpt<40", 90, etaRange, 0, 2, " ");
0429 mPtRecoOverGen_GenEta_40_200 =
0430 ibooker.bookProfile("PtRecoOverGen_GenEta_40_200", "40<genpt<200", 90, etaRange, 0, 2, " ");
0431 mPtRecoOverGen_GenEta_200_600 =
0432 ibooker.bookProfile("PtRecoOverGen_GenEta_200_600", "200<genpt<600", 90, etaRange, 0, 2, " ");
0433 mPtRecoOverGen_GenEta_600_1500 =
0434 ibooker.bookProfile("PtRecoOverGen_GenEta_600_1500", "600<genpt<1500", 90, etaRange, 0, 2, " ");
0435 mPtRecoOverGen_GenEta_1500_3500 =
0436 ibooker.bookProfile("PtRecoOverGen_GenEta_1500_3500", "1500<genpt<3500", 90, etaRange, 0, 2, " ");
0437 mPtRecoOverGen_GenEta_3500_5000 =
0438 ibooker.bookProfile("PtRecoOverGen_GenEta_3500_5000", "3500<genpt<5000", 90, etaRange, 0, 2, " ");
0439 mPtRecoOverGen_GenEta_5000_6500 =
0440 ibooker.bookProfile("PtRecoOverGen_GenEta_5000_6500", "5000<genpt<6500", 90, etaRange, 0, 2, " ");
0441 mPtRecoOverGen_GenEta_3500 = ibooker.bookProfile("PtRecoOverGen_GenEta_3500", "genpt>3500", 90, etaRange, 0, 2, " ");
0442
0443
0444
0445 mEtaFirst = ibooker.book1D("EtaFirst", "EtaFirst", 120, -6, 6);
0446 mPhiFirst = ibooker.book1D("PhiFirst", "PhiFirst", 70, -3.5, 3.5);
0447 mPtFirst = ibooker.book1D("PtFirst", "PtFirst", 50, 0, 1000);
0448 mMjj = ibooker.book1D("Mjj", "Mjj", 100, 0, 2000);
0449 mNJetsEta_B_20_40 = ibooker.book1D("NJetsEta_B_20_40", "NJetsEta_B 20<Pt<40", 15, 0, 15);
0450 mNJetsEta_E_20_40 = ibooker.book1D("NJetsEta_E_20_40", "NJetsEta_E 20<Pt<40", 15, 0, 15);
0451 mNJetsEta_B_40 = ibooker.book1D("NJetsEta_B", "NJetsEta_B 40<Pt", 15, 0, 15);
0452 mNJetsEta_E_40 = ibooker.book1D("NJetsEta_E", "NJetsEta_E 40<Pt", 15, 0, 15);
0453 mNJets_40 = ibooker.book1D("NJets", "NJets 40>Pt", 15, 0, 15);
0454 mNJets1 = ibooker.bookProfile("NJets1", "Number of jets above Pt threshold", 100, 0, 200, 100, 0, 50, "s");
0455 mNJets2 = ibooker.bookProfile("NJets2", "Number of jets above Pt threshold", 100, 0, 4000, 100, 0, 50, "s");
0456
0457 if (isCaloJet) {
0458 maxEInEmTowers = ibooker.book1D("maxEInEmTowers", "maxEInEmTowers", 50, 0, 500);
0459 maxEInHadTowers = ibooker.book1D("maxEInHadTowers", "maxEInHadTowers", 50, 0, 500);
0460 energyFractionHadronic = ibooker.book1D("energyFractionHadronic", "energyFractionHadronic", 50, 0, 1);
0461 emEnergyFraction = ibooker.book1D("emEnergyFraction", "emEnergyFraction", 50, 0, 1);
0462 hadEnergyInHB = ibooker.book1D("hadEnergyInHB", "hadEnergyInHB", 50, 0, 500);
0463 hadEnergyInHO = ibooker.book1D("hadEnergyInHO", "hadEnergyInHO", 50, 0, 500);
0464 hadEnergyInHE = ibooker.book1D("hadEnergyInHE", "hadEnergyInHE", 50, 0, 500);
0465 hadEnergyInHF = ibooker.book1D("hadEnergyInHF", "hadEnergyInHF", 50, 0, 500);
0466 emEnergyInEB = ibooker.book1D("emEnergyInEB", "emEnergyInEB", 50, 0, 500);
0467 emEnergyInEE = ibooker.book1D("emEnergyInEE", "emEnergyInEE", 50, 0, 500);
0468 emEnergyInHF = ibooker.book1D("emEnergyInHF", "emEnergyInHF", 50, 0, 500);
0469 towersArea = ibooker.book1D("towersArea", "towersArea", 50, 0, 1);
0470 n90 = ibooker.book1D("n90", "n90", 30, 0, 30);
0471 n60 = ibooker.book1D("n60", "n60", 30, 0, 30);
0472 }
0473
0474 if (isPFJet || isMiniAODJet) {
0475 muonMultiplicity = ibooker.book1D("muonMultiplicity", "muonMultiplicity", 10, 0, 10);
0476 chargedMultiplicity = ibooker.book1D("chargedMultiplicity", "chargedMultiplicity", 100, 0, 100);
0477 chargedEmEnergy = ibooker.book1D("chargedEmEnergy", "chargedEmEnergy", 100, 0, 500);
0478 neutralEmEnergy = ibooker.book1D("neutralEmEnergy", "neutralEmEnergy", 100, 0, 500);
0479 chargedHadronEnergy = ibooker.book1D("chargedHadronEnergy", "chargedHadronEnergy", 100, 0, 500);
0480 neutralHadronEnergy = ibooker.book1D("neutralHadronEnergy", "neutralHadronEnergy", 100, 0, 500);
0481 chargedHadronEnergyFraction =
0482 ibooker.book1D("chargedHadronEnergyFraction", "chargedHadronEnergyFraction", 50, 0, 1);
0483 neutralHadronEnergyFraction =
0484 ibooker.book1D("neutralHadronEnergyFraction", "neutralHadronEnergyFraction", 50, 0, 1);
0485 chargedEmEnergyFraction = ibooker.book1D("chargedEmEnergyFraction", "chargedEmEnergyFraction", 50, 0, 1);
0486 neutralEmEnergyFraction = ibooker.book1D("neutralEmEnergyFraction", "neutralEmEnergyFraction", 50, 0, 1);
0487 photonEnergy = ibooker.book1D("photonEnergy", "photonEnergy", 50, 0, 500);
0488 photonEnergyFraction = ibooker.book1D("photonEnergyFraction", "photonEnergyFraction", 50, 0, 1);
0489 electronEnergy = ibooker.book1D("electronEnergy", "electronEnergy", 50, 0, 500);
0490 electronEnergyFraction = ibooker.book1D("electronEnergyFraction", "electronEnergyFraction", 50, 0, 1);
0491 muonEnergy = ibooker.book1D("muonEnergy", "muonEnergy", 50, 0, 500);
0492 muonEnergyFraction = ibooker.book1D("muonEnergyFraction", "muonEnergyFraction", 50, 0, 1);
0493 HFHadronEnergy = ibooker.book1D("HFHadronEnergy", "HFHadronEnergy", 50, 0, 500);
0494 HFHadronEnergyFraction = ibooker.book1D("HFHadronEnergyFraction", "HFHadronEnergyFraction", 50, 0, 1);
0495 HFEMEnergy = ibooker.book1D("HFEMEnergy", "HFEMEnergy", 50, 0, 500);
0496 HFEMEnergyFraction = ibooker.book1D("HFEMEnergyFraction", "HFEMEnergyFraction", 50, 0, 1);
0497 chargedHadronMultiplicity = ibooker.book1D("chargedHadronMultiplicity", "chargedHadronMultiplicity", 50, 0, 50);
0498 neutralHadronMultiplicity = ibooker.book1D("neutralHadronMultiplicity", "neutralHadronMultiplicity", 50, 0, 50);
0499 photonMultiplicity = ibooker.book1D("photonMultiplicity", "photonMultiplicity", 10, 0, 10);
0500 electronMultiplicity = ibooker.book1D("electronMultiplicity", "electronMultiplicity", 10, 0, 10);
0501 HFHadronMultiplicity = ibooker.book1D("HFHadronMultiplicity", "HFHadronMultiplicity", 50, 0, 50);
0502 HFEMMultiplicity = ibooker.book1D("HFEMMultiplicity", "HFEMMultiplicity", 50, 0, 50);
0503 chargedMuEnergy = ibooker.book1D("chargedMuEnergy", "chargedMuEnergy", 50, 0, 500);
0504 chargedMuEnergyFraction = ibooker.book1D("chargedMuEnergyFraction", "chargedMuEnergyFraction", 50, 0, 1);
0505 neutralMultiplicity = ibooker.book1D("neutralMultiplicity", "neutralMultiplicity", 50, 0, 50);
0506 HOEnergy = ibooker.book1D("HOEnergy", "HOEnergy", 50, 0, 500);
0507 HOEnergyFraction = ibooker.book1D("HOEnergyFraction", "HOEnergyFraction", 50, 0, 1);
0508 }
0509 }
0510
0511
0512
0513
0514 JetTester::~JetTester() {}
0515
0516
0517
0518
0519 void JetTester::analyze(const edm::Event &mEvent, const edm::EventSetup &mSetup) {
0520
0521
0522 edm::Handle<vector<reco::Vertex>> pvHandle;
0523 mEvent.getByToken(pvToken_, pvHandle);
0524
0525 int nGoodVertices = 0;
0526
0527 if (pvHandle.isValid()) {
0528 for (unsigned i = 0; i < pvHandle->size(); i++) {
0529 if ((*pvHandle)[i].ndof() > 4 && (fabs((*pvHandle)[i].z()) <= 24) && (fabs((*pvHandle)[i].position().rho()) <= 2))
0530 nGoodVertices++;
0531 }
0532 }
0533
0534 mNvtx->Fill(nGoodVertices);
0535
0536
0537
0538
0539
0540
0541
0542
0543
0544
0545
0546
0547
0548
0549
0550 math::XYZTLorentzVector p4tmp[2];
0551
0552 std::vector<Jet> recoJets;
0553 recoJets.clear();
0554
0555 edm::Handle<CaloJetCollection> caloJets;
0556 edm::Handle<PFJetCollection> pfJets;
0557
0558 edm::Handle<pat::JetCollection> patJets;
0559
0560 if (isCaloJet)
0561 mEvent.getByToken(caloJetsToken_, caloJets);
0562 if (isPFJet)
0563 mEvent.getByToken(pfJetsToken_, pfJets);
0564
0565 if (isMiniAODJet)
0566 mEvent.getByToken(patJetsToken_, patJets);
0567
0568 if (isCaloJet && !caloJets.isValid())
0569 return;
0570 if (isPFJet && !pfJets.isValid())
0571 return;
0572
0573 if (isMiniAODJet && !patJets.isValid())
0574 return;
0575
0576 if (isCaloJet) {
0577 for (unsigned ijet = 0; ijet < caloJets->size(); ijet++)
0578 recoJets.push_back((*caloJets)[ijet]);
0579 }
0580
0581
0582
0583
0584
0585
0586
0587 if (isPFJet) {
0588 for (unsigned ijet = 0; ijet < pfJets->size(); ijet++)
0589 recoJets.push_back((*pfJets)[ijet]);
0590 }
0591 if (isMiniAODJet) {
0592 for (unsigned ijet = 0; ijet < patJets->size(); ijet++)
0593 recoJets.push_back((*patJets)[ijet]);
0594 }
0595
0596 int nJet = 0;
0597 int nJet_E_20_40 = 0;
0598 int nJet_B_20_40 = 0;
0599 int nJet_E_40 = 0;
0600 int nJet_B_40 = 0;
0601 int nJet_40 = 0;
0602
0603 int index_first_jet = -1;
0604 double pt_first = -1;
0605
0606 int index_second_jet = -1;
0607 double pt_second = -1;
0608
0609 for (unsigned ijet = 0; ijet < recoJets.size(); ijet++) {
0610 bool pass_lowjet = false;
0611 bool pass_mediumjet = false;
0612 if (!isMiniAODJet) {
0613 if ((recoJets[ijet].pt() > 20.) && (recoJets[ijet].pt() < mRecoJetPtThreshold)) {
0614 pass_lowjet = true;
0615 }
0616 }
0617 if (isMiniAODJet) {
0618 if ((recoJets[ijet].pt() * (*patJets)[ijet].jecFactor("Uncorrected")) > 20. &&
0619 ((recoJets[ijet].pt() * (*patJets)[ijet].jecFactor("Uncorrected")) < mRecoJetPtThreshold)) {
0620 pass_lowjet = true;
0621 }
0622 }
0623 if (pass_lowjet) {
0624 if (fabs(recoJets[ijet].eta()) > 1.5)
0625 nJet_E_20_40++;
0626 else
0627 nJet_B_20_40++;
0628 }
0629 if (!isMiniAODJet) {
0630 if (recoJets[ijet].pt() > mRecoJetPtThreshold) {
0631 pass_mediumjet = true;
0632 }
0633 }
0634 if (isMiniAODJet) {
0635 if ((recoJets[ijet].pt() * (*patJets)[ijet].jecFactor("Uncorrected")) > mRecoJetPtThreshold) {
0636 pass_mediumjet = true;
0637 }
0638 }
0639 if (pass_mediumjet) {
0640 if (isMiniAODJet) {
0641 if ((recoJets[ijet].pt() * (*patJets)[ijet].jecFactor("Uncorrected")) > pt_first) {
0642 pt_second = pt_first;
0643 pt_first = recoJets[ijet].pt() * (*patJets)[ijet].jecFactor("Uncorrected");
0644 index_second_jet = index_first_jet;
0645 index_first_jet = ijet;
0646 } else if ((recoJets[ijet].pt() * (*patJets)[ijet].jecFactor("Uncorrected")) > pt_second) {
0647 index_second_jet = ijet;
0648 pt_second = recoJets[ijet].pt() * (*patJets)[ijet].jecFactor("Uncorrected");
0649 }
0650 }
0651
0652 if (fabs(recoJets[ijet].eta()) > 1.5)
0653 nJet_E_40++;
0654 else
0655 nJet_B_40++;
0656 nJet_40++;
0657
0658 if (mEta)
0659 mEta->Fill(recoJets[ijet].eta());
0660
0661 if (mJetArea)
0662 mJetArea->Fill(recoJets[ijet].jetArea());
0663 if (mPhi)
0664 mPhi->Fill(recoJets[ijet].phi());
0665 if (!isMiniAODJet) {
0666 if (mEnergy)
0667 mEnergy->Fill(recoJets[ijet].energy());
0668 if (mP)
0669 mP->Fill(recoJets[ijet].p());
0670 if (mPt)
0671 mPt->Fill(recoJets[ijet].pt());
0672 if (mMass)
0673 mMass->Fill(recoJets[ijet].mass());
0674 } else {
0675 if (mEnergy)
0676 mEnergy->Fill(recoJets[ijet].energy() * (*patJets)[ijet].jecFactor("Uncorrected"));
0677 if (mP)
0678 mP->Fill(recoJets[ijet].p() * (*patJets)[ijet].jecFactor("Uncorrected"));
0679 if (mPt)
0680 mPt->Fill(recoJets[ijet].pt() * (*patJets)[ijet].jecFactor("Uncorrected"));
0681 if (mMass)
0682 mMass->Fill(recoJets[ijet].mass() * (*patJets)[ijet].jecFactor("Uncorrected"));
0683 }
0684 if (mConstituents)
0685 mConstituents->Fill(recoJets[ijet].nConstituents());
0686 if (!isMiniAODJet) {
0687 if (ijet == 0) {
0688 if (mEtaFirst)
0689 mEtaFirst->Fill(recoJets[ijet].eta());
0690 if (mPhiFirst)
0691 mPhiFirst->Fill(recoJets[ijet].phi());
0692 if (mPtFirst)
0693 mPtFirst->Fill(recoJets[ijet].pt());
0694 }
0695
0696 if (ijet == 0) {
0697 nJet++;
0698 p4tmp[0] = recoJets[ijet].p4();
0699 }
0700 if (ijet == 1) {
0701 nJet++;
0702 p4tmp[1] = recoJets[ijet].p4();
0703 }
0704 }
0705
0706
0707
0708
0709
0710
0711
0712
0713
0714
0715
0716
0717
0718
0719
0720 if (isCaloJet) {
0721 maxEInEmTowers->Fill((*caloJets)[ijet].maxEInEmTowers());
0722 maxEInHadTowers->Fill((*caloJets)[ijet].maxEInHadTowers());
0723 energyFractionHadronic->Fill((*caloJets)[ijet].energyFractionHadronic());
0724 emEnergyFraction->Fill((*caloJets)[ijet].emEnergyFraction());
0725 hadEnergyInHB->Fill((*caloJets)[ijet].hadEnergyInHB());
0726 hadEnergyInHO->Fill((*caloJets)[ijet].hadEnergyInHO());
0727 hadEnergyInHE->Fill((*caloJets)[ijet].hadEnergyInHE());
0728 hadEnergyInHF->Fill((*caloJets)[ijet].hadEnergyInHF());
0729 emEnergyInEB->Fill((*caloJets)[ijet].emEnergyInEB());
0730 emEnergyInEE->Fill((*caloJets)[ijet].emEnergyInEE());
0731 emEnergyInHF->Fill((*caloJets)[ijet].emEnergyInHF());
0732 towersArea->Fill((*caloJets)[ijet].towersArea());
0733 n90->Fill((*caloJets)[ijet].n90());
0734 n60->Fill((*caloJets)[ijet].n60());
0735 }
0736
0737 if (isPFJet) {
0738 muonMultiplicity->Fill((*pfJets)[ijet].muonMultiplicity());
0739 chargedMultiplicity->Fill((*pfJets)[ijet].chargedMultiplicity());
0740 chargedEmEnergy->Fill((*pfJets)[ijet].chargedEmEnergy());
0741 neutralEmEnergy->Fill((*pfJets)[ijet].neutralEmEnergy());
0742 chargedHadronEnergy->Fill((*pfJets)[ijet].chargedHadronEnergy());
0743 neutralHadronEnergy->Fill((*pfJets)[ijet].neutralHadronEnergy());
0744 chargedHadronEnergyFraction->Fill((*pfJets)[ijet].chargedHadronEnergyFraction());
0745 neutralHadronEnergyFraction->Fill((*pfJets)[ijet].neutralHadronEnergyFraction());
0746 chargedEmEnergyFraction->Fill((*pfJets)[ijet].chargedEmEnergyFraction());
0747 neutralEmEnergyFraction->Fill((*pfJets)[ijet].neutralEmEnergyFraction());
0748 photonEnergy->Fill((*pfJets)[ijet].photonEnergy());
0749 photonEnergyFraction->Fill((*pfJets)[ijet].photonEnergyFraction());
0750 electronEnergy->Fill((*pfJets)[ijet].electronEnergy());
0751 electronEnergyFraction->Fill((*pfJets)[ijet].electronEnergyFraction());
0752 muonEnergy->Fill((*pfJets)[ijet].muonEnergy());
0753 muonEnergyFraction->Fill((*pfJets)[ijet].muonEnergyFraction());
0754 HFHadronEnergy->Fill((*pfJets)[ijet].HFHadronEnergy());
0755 HFHadronEnergyFraction->Fill((*pfJets)[ijet].HFHadronEnergyFraction());
0756 HFEMEnergy->Fill((*pfJets)[ijet].HFEMEnergy());
0757 HFEMEnergyFraction->Fill((*pfJets)[ijet].HFEMEnergyFraction());
0758 chargedHadronMultiplicity->Fill((*pfJets)[ijet].chargedHadronMultiplicity());
0759 neutralHadronMultiplicity->Fill((*pfJets)[ijet].neutralHadronMultiplicity());
0760 photonMultiplicity->Fill((*pfJets)[ijet].photonMultiplicity());
0761 electronMultiplicity->Fill((*pfJets)[ijet].electronMultiplicity());
0762 HFHadronMultiplicity->Fill((*pfJets)[ijet].HFHadronMultiplicity());
0763 HFEMMultiplicity->Fill((*pfJets)[ijet].HFEMMultiplicity());
0764 chargedMuEnergy->Fill((*pfJets)[ijet].chargedMuEnergy());
0765 chargedMuEnergyFraction->Fill((*pfJets)[ijet].chargedMuEnergyFraction());
0766 neutralMultiplicity->Fill((*pfJets)[ijet].neutralMultiplicity());
0767 HOEnergy->Fill((*pfJets)[ijet].hoEnergy());
0768 HOEnergyFraction->Fill((*pfJets)[ijet].hoEnergyFraction());
0769 }
0770 if (isMiniAODJet && (*patJets)[ijet].isPFJet()) {
0771 muonMultiplicity->Fill((*patJets)[ijet].muonMultiplicity());
0772 chargedMultiplicity->Fill((*patJets)[ijet].chargedMultiplicity());
0773 chargedEmEnergy->Fill((*patJets)[ijet].chargedEmEnergy());
0774 neutralEmEnergy->Fill((*patJets)[ijet].neutralEmEnergy());
0775 chargedHadronEnergy->Fill((*patJets)[ijet].chargedHadronEnergy());
0776 neutralHadronEnergy->Fill((*patJets)[ijet].neutralHadronEnergy());
0777 chargedHadronEnergyFraction->Fill((*patJets)[ijet].chargedHadronEnergyFraction());
0778 neutralHadronEnergyFraction->Fill((*patJets)[ijet].neutralHadronEnergyFraction());
0779 chargedEmEnergyFraction->Fill((*patJets)[ijet].chargedEmEnergyFraction());
0780 neutralEmEnergyFraction->Fill((*patJets)[ijet].neutralEmEnergyFraction());
0781 photonEnergy->Fill((*patJets)[ijet].photonEnergy());
0782 photonEnergyFraction->Fill((*patJets)[ijet].photonEnergyFraction());
0783 electronEnergy->Fill((*patJets)[ijet].electronEnergy());
0784 electronEnergyFraction->Fill((*patJets)[ijet].electronEnergyFraction());
0785 muonEnergy->Fill((*patJets)[ijet].muonEnergy());
0786 muonEnergyFraction->Fill((*patJets)[ijet].muonEnergyFraction());
0787 HFHadronEnergy->Fill((*patJets)[ijet].HFHadronEnergy());
0788 HFHadronEnergyFraction->Fill((*patJets)[ijet].HFHadronEnergyFraction());
0789 HFEMEnergy->Fill((*patJets)[ijet].HFEMEnergy());
0790 HFEMEnergyFraction->Fill((*patJets)[ijet].HFEMEnergyFraction());
0791 chargedHadronMultiplicity->Fill((*patJets)[ijet].chargedHadronMultiplicity());
0792 neutralHadronMultiplicity->Fill((*patJets)[ijet].neutralHadronMultiplicity());
0793 photonMultiplicity->Fill((*patJets)[ijet].photonMultiplicity());
0794 electronMultiplicity->Fill((*patJets)[ijet].electronMultiplicity());
0795 HFHadronMultiplicity->Fill((*patJets)[ijet].HFHadronMultiplicity());
0796 HFEMMultiplicity->Fill((*patJets)[ijet].HFEMMultiplicity());
0797 chargedMuEnergy->Fill((*patJets)[ijet].chargedMuEnergy());
0798 chargedMuEnergyFraction->Fill((*patJets)[ijet].chargedMuEnergyFraction());
0799 neutralMultiplicity->Fill((*patJets)[ijet].neutralMultiplicity());
0800 HOEnergy->Fill((*patJets)[ijet].hoEnergy());
0801 HOEnergyFraction->Fill((*patJets)[ijet].hoEnergyFraction());
0802 }
0803 }
0804 }
0805
0806 if (mNJetsEta_B_20_40)
0807 mNJetsEta_B_20_40->Fill(nJet_B_20_40);
0808 if (mNJetsEta_E_20_40)
0809 mNJetsEta_E_20_40->Fill(nJet_E_20_40);
0810 if (mNJetsEta_B_40)
0811 mNJetsEta_B_40->Fill(nJet_B_40);
0812 if (mNJetsEta_E_40)
0813 mNJetsEta_E_40->Fill(nJet_E_40);
0814 if (mNJets_40)
0815 mNJets_40->Fill(nJet_40);
0816 if (!isMiniAODJet) {
0817 if (nJet >= 2) {
0818 if (mMjj)
0819 mMjj->Fill((p4tmp[0] + p4tmp[1]).mass());
0820 }
0821 } else {
0822 if (index_first_jet > -1) {
0823 if (mEtaFirst)
0824 mEtaFirst->Fill(recoJets[index_first_jet].eta());
0825 if (mPhiFirst)
0826 mPhiFirst->Fill(recoJets[index_first_jet].phi());
0827 if (mPtFirst)
0828 mPtFirst->Fill(recoJets[index_first_jet].pt() * (*patJets)[index_first_jet].jecFactor("Uncorrected"));
0829 nJet++;
0830 p4tmp[0] = recoJets[index_first_jet].p4() * (*patJets)[index_first_jet].jecFactor("Uncorrected");
0831 }
0832 if (index_second_jet > -1) {
0833 nJet++;
0834 p4tmp[1] = recoJets[index_second_jet].p4() * (*patJets)[index_second_jet].jecFactor("Uncorrected");
0835 }
0836 if (nJet >= 2) {
0837 if (mMjj)
0838 mMjj->Fill((p4tmp[0] + p4tmp[1]).mass());
0839 }
0840 }
0841
0842
0843
0844 for (int istep = 0; istep < 100; ++istep) {
0845 int njets1 = 0;
0846 int njets2 = 0;
0847
0848 float ptStep1 = (istep * (200. / 100.));
0849 float ptStep2 = (istep * (4000. / 100.));
0850
0851 for (unsigned ijet = 0; ijet < recoJets.size(); ijet++) {
0852 if (!isMiniAODJet) {
0853 if (recoJets[ijet].pt() > ptStep1)
0854 njets1++;
0855 if (recoJets[ijet].pt() > ptStep2)
0856 njets2++;
0857 } else {
0858 if ((recoJets[ijet].pt() * (*patJets)[ijet].jecFactor("Uncorrected")) > ptStep1)
0859 njets1++;
0860 if ((recoJets[ijet].pt() * (*patJets)[ijet].jecFactor("Uncorrected")) > ptStep2)
0861 njets2++;
0862 }
0863 mNJets1->Fill(ptStep1, njets1);
0864 mNJets2->Fill(ptStep2, njets2);
0865 }
0866 }
0867
0868
0869
0870 double scale = -999;
0871 edm::Handle<reco::JetCorrector> jetCorr;
0872 bool pass_correction_flag = false;
0873 if (!isMiniAODJet && !mJetCorrector.label().empty()) {
0874 mEvent.getByToken(jetCorrectorToken_, jetCorr);
0875 if (jetCorr.isValid()) {
0876 pass_correction_flag = true;
0877 }
0878 }
0879 if (isMiniAODJet) {
0880 pass_correction_flag = true;
0881 }
0882 for (unsigned ijet = 0; ijet < recoJets.size(); ijet++) {
0883 Jet correctedJet = recoJets[ijet];
0884 if (pass_correction_flag) {
0885 if (isCaloJet)
0886 scale = jetCorr->correction((*caloJets)[ijet]);
0887 if (isPFJet)
0888 scale = jetCorr->correction((*pfJets)[ijet]);
0889
0890 if (!isMiniAODJet) {
0891 correctedJet.scaleEnergy(scale);
0892 }
0893
0894 if (correctedJet.pt() < 20)
0895 continue;
0896
0897 if (isMiniAODJet) {
0898 if (hadronFlavor)
0899 hadronFlavor->Fill((*patJets)[ijet].hadronFlavour());
0900 if (partonFlavor)
0901 partonFlavor->Fill((*patJets)[ijet].partonFlavour());
0902 if (genPartonPDGID && (*patJets)[ijet].genParton() != nullptr)
0903 genPartonPDGID->Fill((*patJets)[ijet].genParton()->pdgId());
0904 }
0905
0906 mCorrJetEta->Fill(correctedJet.eta());
0907 mCorrJetPhi->Fill(correctedJet.phi());
0908 mCorrJetPt->Fill(correctedJet.pt());
0909 if (correctedJet.pt() >= 40) {
0910 mCorrJetEta_Pt40->Fill(correctedJet.eta());
0911 mCorrJetPhi_Pt40->Fill(correctedJet.phi());
0912 }
0913
0914 double ijetEta = recoJets[ijet].eta();
0915 double ijetPt = recoJets[ijet].pt();
0916 if (isMiniAODJet) {
0917 ijetPt = recoJets[ijet].pt() * (*patJets)[ijet].jecFactor("Uncorrected");
0918 }
0919 double ratio = correctedJet.pt() / ijetPt;
0920 if (isMiniAODJet) {
0921 ratio = 1. / (*patJets)[ijet].jecFactor("Uncorrected");
0922 }
0923
0924 if (fabs(ijetEta) < 1.5)
0925 mPtCorrOverReco_Pt_B->Fill(log10(ijetPt), ratio);
0926 else if (fabs(ijetEta) < 3.0)
0927 mPtCorrOverReco_Pt_E->Fill(log10(ijetPt), ratio);
0928 else if (fabs(ijetEta) < 6.0)
0929 mPtCorrOverReco_Pt_F->Fill(log10(ijetPt), ratio);
0930
0931 if (ijetPt < 40)
0932 mPtCorrOverReco_Eta_20_40->Fill(ijetEta, ratio);
0933 else if (ijetPt < 200)
0934 mPtCorrOverReco_Eta_40_200->Fill(ijetEta, ratio);
0935 else if (ijetPt < 600)
0936 mPtCorrOverReco_Eta_200_600->Fill(ijetEta, ratio);
0937 else if (ijetPt < 1500)
0938 mPtCorrOverReco_Eta_600_1500->Fill(ijetEta, ratio);
0939 else if (ijetPt < 3500)
0940 mPtCorrOverReco_Eta_1500_3500->Fill(ijetEta, ratio);
0941 else if (ijetPt < 5000)
0942 mPtCorrOverReco_Eta_3500_5000->Fill(ijetEta, ratio);
0943 else if (ijetPt < 6500)
0944 mPtCorrOverReco_Eta_5000_6500->Fill(ijetEta, ratio);
0945 if (ijetPt > 3500)
0946 mPtCorrOverReco_Eta_3500->Fill(ijetEta, ratio);
0947 }
0948 }
0949
0950
0951
0952
0953
0954
0955 if (!mEvent.isRealData()) {
0956
0957
0958 edm::Handle<GenEventInfoProduct> myGenEvt;
0959 mEvent.getByToken(evtToken_, myGenEvt);
0960
0961 if (myGenEvt.isValid()) {
0962 if (myGenEvt->hasBinningValues()) {
0963 double ptHat = myGenEvt->binningValues()[0];
0964 if (mPtHat)
0965 mPtHat->Fill(ptHat);
0966 }
0967 }
0968
0969
0970 edm::Handle<GenJetCollection> genJets;
0971 mEvent.getByToken(genJetsToken_, genJets);
0972
0973 if (!genJets.isValid())
0974 return;
0975
0976 for (GenJetCollection::const_iterator gjet = genJets->begin(); gjet != genJets->end(); gjet++) {
0977
0978
0979 if (gjet->pt() > mMatchGenPtThreshold) {
0980 if (mGenEta)
0981 mGenEta->Fill(gjet->eta());
0982 if (mGenPhi)
0983 mGenPhi->Fill(gjet->phi());
0984 if (mGenPt)
0985 mGenPt->Fill(gjet->pt());
0986 if (gjet == genJets->begin()) {
0987 if (mGenEtaFirst)
0988 mGenEtaFirst->Fill(gjet->eta());
0989 if (mGenPhiFirst)
0990 mGenPhiFirst->Fill(gjet->phi());
0991 }
0992 }
0993 }
0994
0995 if (!(mInputGenCollection.label().empty())) {
0996 for (GenJetCollection::const_iterator gjet = genJets->begin(); gjet != genJets->end(); gjet++) {
0997 if (fabs(gjet->eta()) > 6.)
0998 continue;
0999 if (gjet->pt() < mMatchGenPtThreshold)
1000 continue;
1001 if (recoJets.empty())
1002 continue;
1003
1004
1005 int iMatch = -1;
1006 double CorrdeltaRBest = 999;
1007 double CorrJetPtBest = 0;
1008 double CorrJetMassBest = 0;
1009 for (unsigned ijet = 0; ijet < recoJets.size(); ++ijet) {
1010 Jet correctedJet = recoJets[ijet];
1011 if (pass_correction_flag && !isMiniAODJet) {
1012 if (isCaloJet)
1013 scale = jetCorr->correction((*caloJets)[ijet]);
1014 if (isPFJet)
1015 scale = jetCorr->correction((*pfJets)[ijet]);
1016 correctedJet.scaleEnergy(scale);
1017 }
1018 double CorrJetPt = correctedJet.pt();
1019 if (CorrJetPt > 10) {
1020 double CorrdR = deltaR(gjet->eta(), gjet->phi(), correctedJet.eta(), correctedJet.phi());
1021 if (CorrdR < CorrdeltaRBest) {
1022 CorrJetMassBest = correctedJet.mass();
1023 CorrdeltaRBest = CorrdR;
1024 CorrJetPtBest = CorrJetPt;
1025 iMatch = ijet;
1026 }
1027 }
1028 }
1029 if (iMatch < 0)
1030 continue;
1031
1032
1033 if (!isMiniAODJet) {
1034 fillMatchHists(gjet->eta(),
1035 gjet->phi(),
1036 gjet->pt(),
1037 gjet->mass(),
1038 recoJets[iMatch].eta(),
1039 recoJets[iMatch].phi(),
1040 recoJets[iMatch].pt(),
1041 CorrJetMassBest);
1042 } else {
1043 fillMatchHists(gjet->eta(),
1044 gjet->phi(),
1045 gjet->pt(),
1046 gjet->mass(),
1047 (*patJets)[iMatch].eta(),
1048 (*patJets)[iMatch].phi(),
1049 (*patJets)[iMatch].pt() * (*patJets)[iMatch].jecFactor("Uncorrected"),
1050 recoJets[iMatch].mass());
1051 }
1052 if (pass_correction_flag) {
1053 if (CorrdeltaRBest < mRThreshold) {
1054 double response = CorrJetPtBest / gjet->pt();
1055
1056 if (fabs(gjet->eta()) < 1.5)
1057 mPtCorrOverGen_GenPt_B->Fill(log10(gjet->pt()), response);
1058 else if (fabs(gjet->eta()) < 3.0)
1059 mPtCorrOverGen_GenPt_E->Fill(log10(gjet->pt()), response);
1060 else if (fabs(gjet->eta()) < 6.0)
1061 mPtCorrOverGen_GenPt_F->Fill(log10(gjet->pt()), response);
1062
1063 if (gjet->pt() > 20) {
1064 if (gjet->pt() < 40)
1065 mPtCorrOverGen_GenEta_20_40->Fill(gjet->eta(), response);
1066 else if (gjet->pt() < 200)
1067 mPtCorrOverGen_GenEta_40_200->Fill(gjet->eta(), response);
1068 else if (gjet->pt() < 600)
1069 mPtCorrOverGen_GenEta_200_600->Fill(gjet->eta(), response);
1070 else if (gjet->pt() < 1500)
1071 mPtCorrOverGen_GenEta_600_1500->Fill(gjet->eta(), response);
1072 else if (gjet->pt() < 3500)
1073 mPtCorrOverGen_GenEta_1500_3500->Fill(gjet->eta(), response);
1074 else if (gjet->pt() < 5000)
1075 mPtCorrOverGen_GenEta_3500_5000->Fill(gjet->eta(), response);
1076 else if (gjet->pt() < 6500)
1077 mPtCorrOverGen_GenEta_5000_6500->Fill(gjet->eta(), response);
1078 if (gjet->pt() > 3500)
1079 mPtCorrOverGen_GenEta_3500->Fill(gjet->eta(), response);
1080 }
1081 }
1082 }
1083 }
1084 }
1085 }
1086 }
1087
1088
1089
1090
1091 void JetTester::fillMatchHists(const double GenEta,
1092 const double GenPhi,
1093 const double GenPt,
1094 const double GenMass,
1095 const double RecoEta,
1096 const double RecoPhi,
1097 const double RecoPt,
1098 const double RecoMass) {
1099 if (GenPt > mMatchGenPtThreshold) {
1100 mDeltaEta->Fill(GenEta - RecoEta);
1101 mDeltaPhi->Fill(GenPhi - RecoPhi);
1102 mDeltaPt->Fill((GenPt - RecoPt) / GenPt);
1103 }
1104
1105 if (fabs(GenEta) < 1.5) {
1106 mPtRecoOverGen_GenPt_B->Fill(log10(GenPt), RecoPt / GenPt);
1107 mPtRecoOverGen_GenPhi_B->Fill(GenPhi, RecoPt / GenPt);
1108
1109 if (GenPt > 20 && GenPt < 40)
1110 mMassRecoOverGen_B_20_40->Fill(RecoMass / GenMass);
1111 else if (GenPt < 200)
1112 mMassRecoOverGen_B_40_200->Fill(RecoMass / GenMass);
1113 else if (GenPt < 500)
1114 mMassRecoOverGen_B_200_500->Fill(RecoMass / GenMass);
1115 else if (GenPt < 750)
1116 mMassRecoOverGen_B_500_750->Fill(RecoMass / GenMass);
1117 else if (GenPt < 1000)
1118 mMassRecoOverGen_B_750_1000->Fill(RecoMass / GenMass);
1119 else if (GenPt < 1500)
1120 mMassRecoOverGen_B_1000_1500->Fill(RecoMass / GenMass);
1121 else if (GenPt < 3500)
1122 mMassRecoOverGen_B_1500_3500->Fill(RecoMass / GenMass);
1123 else if (GenPt < 5000)
1124 mMassRecoOverGen_B_3500_5000->Fill(RecoMass / GenMass);
1125 else if (GenPt >= 5000)
1126 mMassRecoOverGen_B_5000->Fill(RecoMass / GenMass);
1127
1128 if (GenPt > 20 && GenPt < 40)
1129 mPtRecoOverGen_B_20_40->Fill(RecoPt / GenPt);
1130 else if (GenPt < 200)
1131 mPtRecoOverGen_B_40_200->Fill(RecoPt / GenPt);
1132 else if (GenPt < 600)
1133 mPtRecoOverGen_B_200_600->Fill(RecoPt / GenPt);
1134 else if (GenPt < 1500)
1135 mPtRecoOverGen_B_600_1500->Fill(RecoPt / GenPt);
1136 else if (GenPt < 3500)
1137 mPtRecoOverGen_B_1500_3500->Fill(RecoPt / GenPt);
1138 else if (GenPt < 5000)
1139 mPtRecoOverGen_B_3500_5000->Fill(RecoPt / GenPt);
1140 else if (GenPt < 6500)
1141 mPtRecoOverGen_B_5000_6500->Fill(RecoPt / GenPt);
1142 if (GenPt > 3500)
1143 mPtRecoOverGen_B_3500->Fill(RecoPt / GenPt);
1144 } else if (fabs(GenEta) < 3.0) {
1145 mPtRecoOverGen_GenPt_E->Fill(log10(GenPt), RecoPt / GenPt);
1146 mPtRecoOverGen_GenPhi_E->Fill(GenPhi, RecoPt / GenPt);
1147
1148 if (GenPt > 20 && GenPt < 40)
1149 mPtRecoOverGen_E_20_40->Fill(RecoPt / GenPt);
1150 else if (GenPt < 200)
1151 mPtRecoOverGen_E_40_200->Fill(RecoPt / GenPt);
1152 else if (GenPt < 600)
1153 mPtRecoOverGen_E_200_600->Fill(RecoPt / GenPt);
1154 else if (GenPt < 1500)
1155 mPtRecoOverGen_E_600_1500->Fill(RecoPt / GenPt);
1156 else if (GenPt < 3500)
1157 mPtRecoOverGen_E_1500_3500->Fill(RecoPt / GenPt);
1158 else if (GenPt < 5000)
1159 mPtRecoOverGen_E_3500_5000->Fill(RecoPt / GenPt);
1160 else if (GenPt < 6500)
1161 mPtRecoOverGen_E_5000_6500->Fill(RecoPt / GenPt);
1162 if (GenPt > 3500)
1163 mPtRecoOverGen_E_3500->Fill(RecoPt / GenPt);
1164
1165 if (GenPt > 20 && GenPt < 40)
1166 mMassRecoOverGen_E_20_40->Fill(RecoMass / GenMass);
1167 else if (GenPt < 200)
1168 mMassRecoOverGen_E_40_200->Fill(RecoMass / GenMass);
1169 else if (GenPt < 500)
1170 mMassRecoOverGen_E_200_500->Fill(RecoMass / GenMass);
1171 else if (GenPt < 750)
1172 mMassRecoOverGen_E_500_750->Fill(RecoMass / GenMass);
1173 else if (GenPt < 1000)
1174 mMassRecoOverGen_E_750_1000->Fill(RecoMass / GenMass);
1175 else if (GenPt < 1500)
1176 mMassRecoOverGen_E_1000_1500->Fill(RecoMass / GenMass);
1177 else if (GenPt < 3500)
1178 mMassRecoOverGen_E_1500_3500->Fill(RecoMass / GenMass);
1179 else if (GenPt < 5000)
1180 mMassRecoOverGen_E_3500_5000->Fill(RecoMass / GenMass);
1181 else if (GenPt >= 5000)
1182 mMassRecoOverGen_E_5000->Fill(RecoMass / GenMass);
1183
1184 } else if (fabs(GenEta) < 6.0) {
1185 mPtRecoOverGen_GenPt_F->Fill(log10(GenPt), RecoPt / GenPt);
1186 mPtRecoOverGen_GenPhi_F->Fill(GenPhi, RecoPt / GenPt);
1187
1188 if (GenPt > 20 && GenPt < 40)
1189 mPtRecoOverGen_F_20_40->Fill(RecoPt / GenPt);
1190 else if (GenPt < 200)
1191 mPtRecoOverGen_F_40_200->Fill(RecoPt / GenPt);
1192 else if (GenPt < 600)
1193 mPtRecoOverGen_F_200_600->Fill(RecoPt / GenPt);
1194 else if (GenPt < 1500)
1195 mPtRecoOverGen_F_600_1500->Fill(RecoPt / GenPt);
1196 else if (GenPt < 3500)
1197 mPtRecoOverGen_F_1500_3500->Fill(RecoPt / GenPt);
1198 if (GenPt > 3500)
1199 mPtRecoOverGen_F_3500->Fill(RecoPt / GenPt);
1200
1201 if (GenPt > 20 && GenPt < 40)
1202 mMassRecoOverGen_F_20_40->Fill(RecoMass / GenMass);
1203 else if (GenPt < 200)
1204 mMassRecoOverGen_F_40_200->Fill(RecoMass / GenMass);
1205 else if (GenPt < 500)
1206 mMassRecoOverGen_F_200_500->Fill(RecoMass / GenMass);
1207 else if (GenPt < 750)
1208 mMassRecoOverGen_F_500_750->Fill(RecoMass / GenMass);
1209 else if (GenPt < 1000)
1210 mMassRecoOverGen_F_750_1000->Fill(RecoMass / GenMass);
1211 else if (GenPt < 1500)
1212 mMassRecoOverGen_F_1000_1500->Fill(RecoMass / GenMass);
1213 else if (GenPt >= 1500)
1214 mMassRecoOverGen_F_1500->Fill(RecoMass / GenMass);
1215 }
1216
1217 if (GenPt > 20 && GenPt < 40)
1218 mPtRecoOverGen_GenEta_20_40->Fill(GenEta, RecoPt / GenPt);
1219 else if (GenPt < 200)
1220 mPtRecoOverGen_GenEta_40_200->Fill(GenEta, RecoPt / GenPt);
1221 else if (GenPt < 600)
1222 mPtRecoOverGen_GenEta_200_600->Fill(GenEta, RecoPt / GenPt);
1223 else if (GenPt < 1500)
1224 mPtRecoOverGen_GenEta_600_1500->Fill(GenEta, RecoPt / GenPt);
1225 else if (GenPt < 3500)
1226 mPtRecoOverGen_GenEta_1500_3500->Fill(GenEta, RecoPt / GenPt);
1227 else if (GenPt < 5000)
1228 mPtRecoOverGen_GenEta_3500_5000->Fill(GenEta, RecoPt / GenPt);
1229 else if (GenPt < 6500)
1230 mPtRecoOverGen_GenEta_5000_6500->Fill(GenEta, RecoPt / GenPt);
1231 if (GenPt > 3500)
1232 mPtRecoOverGen_GenEta_3500->Fill(GenEta, RecoPt / GenPt);
1233 }