12 #include "TLorentzVector.h"
66 push_back(
"Calo Cuts");
67 push_back(
"Calo Kin Cuts");
68 push_back(
"Calo Delta Phi");
69 push_back(
"Calo Jet ID");
71 push_back(
"PF Kin Cuts");
72 push_back(
"PF Delta Phi");
73 push_back(
"PF Jet ID");
85 caloCuts_ = index_type(&bits_,
std::string(
"Calo Cuts"));
86 caloKin_ = index_type(&bits_,
std::string(
"Calo Kin Cuts"));
87 caloDeltaPhi_ = index_type(&bits_,
std::string(
"Calo Delta Phi"));
88 caloJetID_ = index_type(&bits_,
std::string(
"Calo Jet ID"));
89 pfCuts_ = index_type(&bits_,
std::string(
"PF Cuts"));
90 pfKin_ = index_type(&bits_,
std::string(
"PF Kin Cuts"));
91 pfDeltaPhi_ = index_type(&bits_,
std::string(
"PF Delta Phi"));
92 pfJetID_ = index_type(&bits_,
std::string(
"PF Jet ID"));
101 if (considerCut(caloCuts_)) {
102 passCut(
ret, caloCuts_);
103 event.getByLabel(jetSrc_, h_jets_);
105 if (h_jets_->size() >= 2 || ignoreCut(caloKin_)) {
106 passCut(
ret, caloKin_);
107 pat::Jet const& jet0 = h_jets_->at(0);
108 pat::Jet const& jet1 = h_jets_->at(1);
109 double dphi = fabs(deltaPhi<double>(jet0.
phi(), jet1.
phi()));
111 if (fabs(dphi -
TMath::Pi()) < 1.0 || ignoreCut(caloDeltaPhi_)) {
112 passCut(
ret, caloDeltaPhi_);
114 retCaloJet.
set(
false);
115 bool pass0 = (*jetSel_)(jet0, retCaloJet);
116 retCaloJet.
set(
false);
117 bool pass1 = (*jetSel_)(jet1, retCaloJet);
118 if ((pass0 && pass1) || ignoreCut(caloJetID_)) {
119 passCut(
ret, caloJetID_);
129 if (considerCut(pfCuts_)) {
130 passCut(
ret, pfCuts_);
131 event.getByLabel(pfJetSrc_, h_pfjets_);
133 if (h_pfjets_->size() >= 2 || ignoreCut(pfKin_)) {
134 passCut(
ret, pfKin_);
135 pat::Jet const& jet0 = h_pfjets_->at(0);
136 pat::Jet const& jet1 = h_pfjets_->at(1);
137 double dphi = fabs(deltaPhi<double>(jet0.
phi(), jet1.
phi()));
139 if (fabs(dphi -
TMath::Pi()) < 1.0 || ignoreCut(pfDeltaPhi_)) {
140 passCut(
ret, pfDeltaPhi_);
143 bool pass0 = (*pfJetSel_)(jet0, retPFJet);
145 bool pass1 = (*pfJetSel_)(jet1, retPFJet);
146 if ((pass0 && pass1) || ignoreCut(pfJetID_)) {
147 passCut(
ret, pfJetID_);
162 std::shared_ptr<JetIDSelectionFunctor>
const&
jetSel()
const {
return jetSel_; }
163 std::shared_ptr<PFJetIDSelectionFunctor>
const&
pfJetSel()
const {
return pfJetSel_; }
166 vector<pat::Jet>
const&
allPFJets()
const {
return *h_pfjets_; }
175 index_type
const&
caloCuts()
const {
return caloCuts_; }
176 index_type
const&
caloKin()
const {
return caloKin_; }
178 index_type
const&
caloJetID()
const {
return caloJetID_; }
179 index_type
const&
pfCuts()
const {
return pfCuts_; }
180 index_type
const&
pfKin()
const {
return pfKin_; }
182 index_type
const&
pfJetID()
const {
return pfJetID_; }
185 std::shared_ptr<JetIDSelectionFunctor>
jetSel_;
218 std::cout <<
"Usage : " <<
argv[0] <<
" [parameters.py]" << std::endl;
222 cout <<
"Hello from " <<
argv[0] <<
"!" << endl;
225 gSystem->Load(
"libFWCoreFWLite");
228 cout <<
"Getting parameters" << endl;
231 std::shared_ptr<edm::ProcessDesc>
b = builder.
processDesc();
232 std::shared_ptr<edm::ParameterSet>
parameters =
b->getProcessPSet();
243 cout <<
"Making RunLumiSelector" << endl;
246 cout <<
"setting up TFileService" << endl;
251 cout <<
"Setting up chain event" << endl;
256 cout <<
"Booking histograms" << endl;
259 std::map<std::string, TH1*>
hists;
261 hists[
"hist_nJet"] = theDir.
make<TH1D>(
"hist_nJet",
"Number of Calo Jets", 10, 0, 10);
262 hists[
"hist_nPFJet"] = theDir.
make<TH1D>(
"hist_nPFJet",
"Number of PF Jets", 10, 0, 10);
264 hists[
"hist_jetPt"] = theDir.
make<TH1D>(
"hist_jetPt",
"Jet p_{T}", 400, 0, 400);
265 hists[
"hist_jetEtaVsPhi"] = theDir.
make<TH2D>(
266 "hist_jetEtaVsPhi",
"Jet #phi versus #eta;#eta;#phi", 50, -5.0, 5.0, 50, -
TMath::Pi(),
TMath::Pi());
267 hists[
"hist_jetNTracks"] = theDir.
make<TH1D>(
"hist_jetNTracks",
"Jet N_{TRACKS}", 20, 0, 20);
268 hists[
"hist_jetNTracksVsPt"] = theDir.
make<TH2D>(
269 "hist_jetNTracksVsPt",
"Number of Tracks versus Jet p_{T};Jet p_{T}(GeV/c) ;N_{Tracks}", 20, 0, 200, 20, 0, 20);
270 hists[
"hist_jetEMF"] = theDir.
make<TH1D>(
"hist_jetEMF",
"Jet EMF", 200, 0, 1);
271 hists[
"hist_jetPdgID"] = theDir.
make<TH1D>(
"hist_jetPdgID",
"PDG Id of Jet Constituents", 10000, 0, 10000);
272 hists[
"hist_jetGenEmE"] = theDir.
make<TH1D>(
"hist_jetGenEmE",
"Gen Jet EM Energy", 200, 0, 200);
273 hists[
"hist_jetGenHadE"] = theDir.
make<TH1D>(
"hist_jetGenHadE",
"Gen Jet HAD Energy", 200, 0, 200);
274 hists[
"hist_jetGenEMF"] = theDir.
make<TH1D>(
"hist_jetGenEMF",
"Gen Jet EMF", 200, 0, 1);
275 hists[
"hist_jetEoverGenE"] =
276 theDir.
make<TH1D>(
"hist_jetEoverGenE",
"Energy of reco Jet / Energy of gen Jet", 200, 0, 2.0);
277 hists[
"hist_jetCorr"] = theDir.
make<TH1D>(
"hist_jetCorr",
"Jet Correction Factor", 200, 0, 1.0);
278 hists[
"hist_n90Hits"] = theDir.
make<TH1D>(
"hist_n90Hits",
"Jet n90Hits", 20, 0, 20);
279 hists[
"hist_fHPD"] = theDir.
make<TH1D>(
"hist_fHPD",
"Jet fHPD", 200, 0, 1);
280 hists[
"hist_nConstituents"] = theDir.
make<TH1D>(
"hist_nConstituents",
"Jet nConstituents", 20, 0, 20);
281 hists[
"hist_jetCHF"] = theDir.
make<TH1D>(
"hist_jetCHF",
"Jet Charged Hadron Fraction", 200, 0, 1.0);
283 hists[
"hist_good_jetPt"] = theDir.
make<TH1D>(
"hist_good_jetPt",
"Jet p_{T}", 400, 0, 400);
284 hists[
"hist_good_jetEtaVsPhi"] = theDir.
make<TH2D>(
285 "hist_good_jetEtaVsPhi",
"Jet #phi versus #eta;#eta;#phi", 50, -5.0, 5.0, 50, -
TMath::Pi(),
TMath::Pi());
286 hists[
"hist_good_jetNTracks"] = theDir.
make<TH1D>(
"hist_good_jetNTracks",
"Jet N_{TRACKS}", 20, 0, 20);
287 hists[
"hist_good_jetNTracksVsPt"] =
288 theDir.
make<TH2D>(
"hist_good_jetNTracksVsPt",
289 "Number of Tracks versus Jet p_{T};Jet p_{T}(GeV/c) ;N_{Tracks}",
296 hists[
"hist_good_jetEMF"] = theDir.
make<TH1D>(
"hist_good_jetEMF",
"Jet EMF", 200, 0, 1);
297 hists[
"hist_good_jetPdgID"] = theDir.
make<TH1D>(
"hist_good_jetPdgID",
"PDG Id of Jet Constituents", 10000, 0, 10000);
298 hists[
"hist_good_jetGenEmE"] = theDir.
make<TH1D>(
"hist_good_jetGenEmE",
"Gen Jet EM Energy", 200, 0, 200);
299 hists[
"hist_good_jetGenHadE"] = theDir.
make<TH1D>(
"hist_good_jetGenHadE",
"Gen Jet HAD Energy", 200, 0, 200);
300 hists[
"hist_good_jetGenEMF"] = theDir.
make<TH1D>(
"hist_good_jetGenEMF",
"Gen Jet EMF", 200, 0, 1);
301 hists[
"hist_good_jetEoverGenE"] =
302 theDir.
make<TH1D>(
"hist_good_jetEoverGenE",
"Energy of reco Jet / Energy of gen Jet", 200, 0, 2.0);
303 hists[
"hist_good_jetCorr"] = theDir.
make<TH1D>(
"hist_good_jetCorr",
"Jet Correction Factor", 200, 0, 1.0);
304 hists[
"hist_good_n90Hits"] = theDir.
make<TH1D>(
"hist_good_n90Hits",
"Jet n90Hits", 20, 0, 20);
305 hists[
"hist_good_fHPD"] = theDir.
make<TH1D>(
"hist_good_fHPD",
"Jet fHPD", 200, 0, 1);
306 hists[
"hist_good_nConstituents"] = theDir.
make<TH1D>(
"hist_good_nConstituents",
"Jet nConstituents", 20, 0, 20);
307 hists[
"hist_good_jetCHF"] = theDir.
make<TH1D>(
"hist_good_jetCHF",
"Jet Charged Hadron Fraction", 200, 0, 1.0);
309 hists[
"hist_pf_jetPt"] = theDir.
make<TH1D>(
"hist_pf_jetPt",
"PFJet p_{T}", 400, 0, 400);
310 hists[
"hist_pf_jetEtaVsPhi"] = theDir.
make<TH2D>(
311 "hist_pf_jetEtaVsPhi",
"PFJet #phi versus #eta;#eta;#phi", 50, -5.0, 5.0, 50, -
TMath::Pi(),
TMath::Pi());
312 hists[
"hist_pf_jetNTracks"] = theDir.
make<TH1D>(
"hist_pf_jetNTracks",
"PFJet N_{TRACKS}", 20, 0, 20);
313 hists[
"hist_pf_jetNTracksVsPt"] = theDir.
make<TH2D>(
314 "hist_pf_jetNTracksVsPt",
"Number of Tracks versus Jet p_{T};Jet p_{T}(GeV/c) ;N_{Tracks}", 20, 0, 200, 20, 0, 20);
315 hists[
"hist_pf_jetEMF"] = theDir.
make<TH1D>(
"hist_pf_jetEMF",
"PFJet EMF", 200, 0, 1);
316 hists[
"hist_pf_jetCHF"] = theDir.
make<TH1D>(
"hist_pf_jetCHF",
"PFJet CHF", 200, 0, 1);
317 hists[
"hist_pf_jetNHF"] = theDir.
make<TH1D>(
"hist_pf_jetNHF",
"PFJet NHF", 200, 0, 1);
318 hists[
"hist_pf_jetCEF"] = theDir.
make<TH1D>(
"hist_pf_jetCEF",
"PFJet CEF", 200, 0, 1);
319 hists[
"hist_pf_jetNEF"] = theDir.
make<TH1D>(
"hist_pf_jetNEF",
"PFJet NEF", 200, 0, 1);
320 hists[
"hist_pf_jetPdgID"] = theDir.
make<TH1D>(
"hist_pf_jetPdgID",
"PDG Id of Jet Constituents", 10000, 0, 10000);
321 hists[
"hist_pf_jetGenEmE"] = theDir.
make<TH1D>(
"hist_pf_jetGenEmE",
"Gen Jet EM Energy", 200, 0, 200);
322 hists[
"hist_pf_jetGenHadE"] = theDir.
make<TH1D>(
"hist_pf_jetGenHadE",
"Gen Jet HAD Energy", 200, 0, 200);
323 hists[
"hist_pf_jetGenEMF"] = theDir.
make<TH1D>(
"hist_pf_jetGenEMF",
"Gen Jet EMF", 200, 0, 1);
324 hists[
"hist_pf_jetEoverGenE"] =
325 theDir.
make<TH1D>(
"hist_pf_jetEoverGenE",
"Energy of reco Jet / Energy of gen Jet", 200, 0, 2.0);
326 hists[
"hist_pf_jetCorr"] = theDir.
make<TH1D>(
"hist_pf_jetCorr",
"PFJet Correction Factor", 200, 0, 1.0);
327 hists[
"hist_pf_nConstituents"] = theDir.
make<TH1D>(
"hist_pf_nConstituents",
"PFJet nConstituents", 20, 0, 20);
329 hists[
"hist_pf_good_jetPt"] = theDir.
make<TH1D>(
"hist_pf_good_jetPt",
"PFJet p_{T}", 400, 0, 400);
330 hists[
"hist_pf_good_jetEtaVsPhi"] = theDir.
make<TH2D>(
331 "hist_pf_good_jetEtaVsPhi",
"PFJet #phi versus #eta;#eta;#phi", 50, -5.0, 5.0, 50, -
TMath::Pi(),
TMath::Pi());
332 hists[
"hist_pf_good_jetNTracks"] = theDir.
make<TH1D>(
"hist_pf_good_jetNTracks",
"PFJet N_{TRACKS}", 20, 0, 20);
333 hists[
"hist_pf_good_jetNTracksVsPt"] =
334 theDir.
make<TH2D>(
"hist_pf_good_jetNTracksVsPt",
335 "Number of Tracks versus Jet p_{T};Jet p_{T}(GeV/c) ;N_{Tracks}",
342 hists[
"hist_pf_good_jetEMF"] = theDir.
make<TH1D>(
"hist_pf_good_jetEMF",
"PFJet EMF", 200, 0, 1);
343 hists[
"hist_pf_good_jetCHF"] = theDir.
make<TH1D>(
"hist_pf_good_jetCHF",
"PFJet CHF", 200, 0, 1);
344 hists[
"hist_pf_good_jetNHF"] = theDir.
make<TH1D>(
"hist_pf_good_jetNHF",
"PFJet NHF", 200, 0, 1);
345 hists[
"hist_pf_good_jetCEF"] = theDir.
make<TH1D>(
"hist_pf_good_jetCEF",
"PFJet CEF", 200, 0, 1);
346 hists[
"hist_pf_good_jetNEF"] = theDir.
make<TH1D>(
"hist_pf_good_jetNEF",
"PFJet NEF", 200, 0, 1);
347 hists[
"hist_pf_good_jetPdgID"] =
348 theDir.
make<TH1D>(
"hist_pf_good_jetPdgID",
"PDG Id of Jet Constituents", 10000, 0, 10000);
349 hists[
"hist_pf_good_jetGenEmE"] = theDir.
make<TH1D>(
"hist_pf_good_jetGenEmE",
"Gen Jet EM Energy", 200, 0, 200);
350 hists[
"hist_pf_good_jetGenHadE"] = theDir.
make<TH1D>(
"hist_pf_good_jetGenHadE",
"Gen Jet HAD Energy", 200, 0, 200);
351 hists[
"hist_pf_good_jetGenEMF"] = theDir.
make<TH1D>(
"hist_pf_good_jetGenEMF",
"Gen Jet EMF", 200, 0, 1);
352 hists[
"hist_pf_good_jetEoverGenE"] =
353 theDir.
make<TH1D>(
"hist_pf_good_jetEoverGenE",
"Energy of reco Jet / Energy of gen Jet", 200, 0, 2.0);
354 hists[
"hist_pf_good_jetCorr"] = theDir.
make<TH1D>(
"hist_pf_good_jetCorr",
"PFJet Correction Factor", 200, 0, 1.0);
355 hists[
"hist_pf_good_nConstituents"] =
356 theDir.
make<TH1D>(
"hist_pf_good_nConstituents",
"PFJet nConstituents", 20, 0, 20);
358 hists[
"hist_mjj"] = theDir.
make<TH1D>(
"hist_mjj",
"Dijet mass", 300, 0, 300);
360 hists[
"hist_imbalance_jj"] = theDir.
make<TH1D>(
"hist_imbalance_jj",
"Dijet imbalance", 200, -1.0, 1.0);
362 hists[
"hist_pf_mjj"] = theDir.
make<TH1D>(
"hist_pf_mjj",
"Dijet mass", 300, 0, 300);
363 hists[
"hist_pf_dR_jj"] = theDir.
make<TH1D>(
"hist_pf_dR_jj",
"#Delta R_{JJ}", 200, 0,
TMath::TwoPi());
364 hists[
"hist_pf_imbalance_jj"] = theDir.
make<TH1D>(
"hist_pf_imbalance_jj",
"Dijet imbalance", 200, -1.0, 1.0);
366 cout <<
"Making functors" << endl;
374 cout <<
"About to begin looping" << endl;
378 for (
ev.toBegin(); !
ev.atEnd(); ++
ev, ++nev) {
381 if (runLumiSel(
ev) ==
false)
385 cout <<
"Processing run " <<
event.id().run() <<
", lumi " <<
event.id().luminosityBlock() <<
", event "
386 <<
event.id().event() << endl;
389 caloSelector(
event, retCalo);
392 pfSelector(
event, retPF);
399 vector<pat::Jet>
const& allCaloJets = caloSelector.
allCaloJets();
401 for (std::vector<pat::Jet>::const_iterator jetBegin = allCaloJets.begin(),
402 jetEnd = jetBegin + 2,
408 double pt =
jet.pt();
413 hists[
"hist_jetEtaVsPhi"]->Fill(
jet.eta(),
jet.phi());
416 hists[
"hist_jetEMF"]->Fill(
jet.emEnergyFraction());
417 hists[
"hist_jetCorr"]->Fill(
jet.jecFactor(
"Uncorrected"));
418 hists[
"hist_n90Hits"]->Fill(static_cast<int>(
jet.jetID().n90Hits));
419 hists[
"hist_fHPD"]->Fill(
jet.jetID().fHPD);
420 hists[
"hist_nConstituents"]->Fill(
jet.nConstituents());
422 if (
useMC &&
jet.genJet() !=
nullptr) {
423 hists[
"hist_jetGenEmE"]->Fill(
jet.genJet()->emEnergy());
424 hists[
"hist_jetGenHadE"]->Fill(
jet.genJet()->hadEnergy());
425 hists[
"hist_jetEoverGenE"]->Fill(
jet.energy() /
jet.genJet()->energy());
426 hists[
"hist_jetGenEMF"]->Fill(
jet.genJet()->emEnergy() /
jet.genJet()->energy());
429 TLorentzVector p4_tracks(0, 0, 0, 0);
433 TLorentzVector p4_trk;
434 double M_PION = 0.140;
435 p4_trk.SetPtEtaPhiM((*itrk)->pt(), (*itrk)->eta(), (*itrk)->phi(), M_PION);
438 hists[
"hist_jetCHF"]->Fill(p4_tracks.Energy() /
jet.energy());
447 TLorentzVector p4_j0(jet0.
px(), jet0.
py(), jet0.
pz(), jet0.
energy());
448 TLorentzVector p4_j1(jet1.
px(), jet1.
py(), jet1.
pz(), jet1.
energy());
450 TLorentzVector p4_jj = p4_j0 + p4_j1;
452 hists[
"hist_mjj"]->Fill(p4_jj.M());
453 hists[
"hist_dR_jj"]->Fill(p4_j0.DeltaR(p4_j1));
454 hists[
"hist_imbalance_jj"]->Fill((p4_j0.Perp() - p4_j1.Perp()) / (p4_j0.Perp() + p4_j1.Perp()));
456 hists[
"hist_good_jetPt"]->Fill(jet0.
pt());
457 hists[
"hist_good_jetEtaVsPhi"]->Fill(jet0.
eta(), jet0.
phi());
466 hists[
"hist_good_jetPt"]->Fill(jet1.
pt());
467 hists[
"hist_good_jetEtaVsPhi"]->Fill(jet1.
eta(), jet1.
phi());
484 vector<pat::Jet>
const& allPFJets = pfSelector.
allPFJets();
486 for (std::vector<pat::Jet>::const_iterator jetBegin = allPFJets.begin(), jetEnd = jetBegin + 2, ijet = jetBegin;
491 double pt =
jet.pt();
493 hists[
"hist_pf_jetPt"]->Fill(
pt);
494 hists[
"hist_pf_jetEtaVsPhi"]->Fill(
jet.eta(),
jet.phi());
495 hists[
"hist_pf_nConstituents"]->Fill(
jet.nConstituents());
496 hists[
"hist_pf_jetCEF"]->Fill(
jet.chargedEmEnergyFraction());
497 hists[
"hist_pf_jetNEF"]->Fill(
jet.neutralEmEnergyFraction());
498 hists[
"hist_pf_jetCHF"]->Fill(
jet.chargedHadronEnergyFraction());
499 hists[
"hist_pf_jetNHF"]->Fill(
jet.neutralHadronEnergyFraction());
501 if (
useMC &&
jet.genJet() !=
nullptr) {
502 hists[
"hist_pf_jetGenEmE"]->Fill(
jet.genJet()->emEnergy());
503 hists[
"hist_pf_jetGenHadE"]->Fill(
jet.genJet()->hadEnergy());
504 hists[
"hist_pf_jetEoverGenE"]->Fill(
jet.energy() /
jet.genJet()->energy());
506 hists[
"hist_pf_jetGenEMF"]->Fill(
jet.genJet()->emEnergy() /
jet.genJet()->energy());
515 TLorentzVector p4_j0(jet0.
px(), jet0.
py(), jet0.
pz(), jet0.
energy());
516 TLorentzVector p4_j1(jet1.
px(), jet1.
py(), jet1.
pz(), jet1.
energy());
518 TLorentzVector p4_jj = p4_j0 + p4_j1;
520 hists[
"hist_pf_mjj"]->Fill(p4_jj.M());
521 hists[
"hist_pf_dR_jj"]->Fill(p4_j0.DeltaR(p4_j1));
522 hists[
"hist_pf_imbalance_jj"]->Fill((p4_j0.Perp() - p4_j1.Perp()) / (p4_j0.Perp() + p4_j1.Perp()));
524 hists[
"hist_pf_good_jetPt"]->Fill(jet0.
pt());
525 hists[
"hist_pf_good_jetEtaVsPhi"]->Fill(jet0.
eta(), jet0.
phi());
532 hists[
"hist_pf_good_jetPt"]->Fill(jet1.
pt());
533 hists[
"hist_pf_good_jetEtaVsPhi"]->Fill(jet1.
eta(), jet1.
phi());
546 cout <<
"Calo jet selection" << endl;
548 cout <<
"PF jet selection" << endl;