CMS 3D CMS Logo

Classes | Functions
PatBasicFWLiteJetAnalyzer_Selector.cc File Reference
#include "TFile.h"
#include "TH1.h"
#include "TH2.h"
#include "TCanvas.h"
#include "TLegend.h"
#include "TSystem.h"
#include "TLorentzVector.h"
#include "PhysicsTools/SelectorUtils/interface/strbitset.h"
#include "DataFormats/PatCandidates/interface/Jet.h"
#include "DataFormats/PatCandidates/interface/MET.h"
#include "DataFormats/PatCandidates/interface/Photon.h"
#include "DataFormats/PatCandidates/interface/Muon.h"
#include "DataFormats/PatCandidates/interface/Electron.h"
#include "DataFormats/PatCandidates/interface/Tau.h"
#include "PhysicsTools/SelectorUtils/interface/Selector.h"
#include "PhysicsTools/SelectorUtils/interface/JetIDSelectionFunctor.h"
#include "PhysicsTools/SelectorUtils/interface/PFJetIDSelectionFunctor.h"
#include "PhysicsTools/SelectorUtils/interface/RunLumiSelector.h"
#include "FWCore/FWLite/interface/FWLiteEnabler.h"
#include "PhysicsTools/FWLite/interface/TFileService.h"
#include "DataFormats/FWLite/interface/ChainEvent.h"
#include "FWCore/ParameterSetReader/interface/ProcessDescImpl.h"
#include "FWCore/ParameterSet/interface/ProcessDesc.h"
#include <iostream>
#include <memory>
#include <cmath>
#include "FWCore/Utilities/interface/InputTag.h"
#include "DataFormats/Common/interface/Handle.h"
#include "DataFormats/Common/interface/Ptr.h"
#include "PhysicsTools/SelectorUtils/interface/EventSelector.h"
#include "TROOT.h"

Go to the source code of this file.

Classes

class  JetIDStudiesSelector
 

Functions

int main (int argc, char *argv[])
 

Function Documentation

◆ main()

int main ( int  argc,
char *  argv[] 
)

CALO JETS


PF JETS

Definition at line 216 of file PatBasicFWLiteJetAnalyzer_Selector.cc.

References JetIDStudiesSelector::allCaloJets(), JetIDStudiesSelector::allPFJets(), dir2webdir::argc, cmsBatch::argv, pat::Jet::associatedTracks(), b, JetIDStudiesSelector::caloDeltaPhi(), JetIDStudiesSelector::caloJet0(), JetIDStudiesSelector::caloJet1(), JetIDStudiesSelector::caloJetID(), JetIDStudiesSelector::caloKin(), pat::Jet::chargedEmEnergyFraction(), pat::Jet::chargedHadronEnergyFraction(), gather_cfg::cout, PatBasicFWLiteJetAnalyzer_Selector_cfg::doTracks, pat::Jet::emEnergyFraction(), FWLiteEnabler::enable(), reco::LeafCandidate::energy(), reco::LeafCandidate::eta(), makeMEIFBenchmarkPlots::ev, reco::JetID::fHPD, compareTotals::fs, compare::hists, PixelMapPlotter::inputs, pat::Jet::jecFactor(), metsig::jet, pat::Jet::jetID(), HLT_2022v12_cff::jetTracks, TFileDirectory::make(), reco::JetID::n90Hits, reco::Jet::nConstituents(), pat::Jet::neutralEmEnergyFraction(), pat::Jet::neutralHadronEnergyFraction(), makeMEIFBenchmarkPlots::nev, PatBasicFWLiteJetAnalyzer_Selector_cfg::outputs, JetIDStudiesSelector::pfDeltaPhi(), JetIDStudiesSelector::pfJet0(), JetIDStudiesSelector::pfJet1(), JetIDStudiesSelector::pfJetID(), reco::LeafCandidate::phi(), Pi, PatBasicFWLiteJetAnalyzer_Selector_cfg::plotParameters, PyBind11ProcessDesc::processDesc(), DiDispStaMuonMonitor_cfi::pt, reco::LeafCandidate::pt(), reco::LeafCandidate::px(), reco::LeafCandidate::py(), reco::LeafCandidate::pz(), edm::RefVector< C, T, F >::size(), AlCaHLTBitMon_QueryRunRegistry::string, pat::strbitset::test(), align_cfg::TFileService, TwoPi, and PatBasicFWLiteJetAnalyzer_Selector_cfg::useMC.

216  {
217  if (argc < 2) {
218  std::cout << "Usage : " << argv[0] << " [parameters.py]" << std::endl;
219  return 0;
220  }
221 
222  cout << "Hello from " << argv[0] << "!" << endl;
223 
224  // load framework libraries
225  gSystem->Load("libFWCoreFWLite");
227 
228  cout << "Getting parameters" << endl;
229  // Get the python configuration
230  ProcessDescImpl builder(argv[1]);
231  std::shared_ptr<edm::ProcessDesc> b = builder.processDesc();
232  std::shared_ptr<edm::ParameterSet> parameters = b->getProcessPSet();
233  parameters->registerIt();
234 
235  edm::ParameterSet const& jetStudiesParams = parameters->getParameter<edm::ParameterSet>("jetStudies");
236  edm::ParameterSet const& pfJetStudiesParams = parameters->getParameter<edm::ParameterSet>("pfJetStudies");
237  edm::ParameterSet const& caloJetIDParameters = parameters->getParameter<edm::ParameterSet>("jetIDSelector");
238  edm::ParameterSet const& pfJetIDParameters = parameters->getParameter<edm::ParameterSet>("pfJetIDSelector");
239  edm::ParameterSet const& plotParameters = parameters->getParameter<edm::ParameterSet>("plotParameters");
240  edm::ParameterSet const& inputs = parameters->getParameter<edm::ParameterSet>("inputs");
241  edm::ParameterSet const& outputs = parameters->getParameter<edm::ParameterSet>("outputs");
242 
243  cout << "Making RunLumiSelector" << endl;
244  RunLumiSelector runLumiSel(inputs);
245 
246  cout << "setting up TFileService" << endl;
247  // book a set of histograms
248  fwlite::TFileService fs = fwlite::TFileService(outputs.getParameter<std::string>("outputName"));
249  TFileDirectory theDir = fs.mkdir("histos");
250 
251  cout << "Setting up chain event" << endl;
252  // This object 'event' is used both to get all information from the
253  // event as well as to store histograms, etc.
254  fwlite::ChainEvent ev(inputs.getParameter<std::vector<std::string> >("fileNames"));
255 
256  cout << "Booking histograms" << endl;
257  // Book histograms
258 
259  std::map<std::string, TH1*> hists;
260 
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);
263 
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);
282 
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}",
290  20,
291  0,
292  200,
293  20,
294  0,
295  20);
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);
308 
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);
328 
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}",
336  20,
337  0,
338  200,
339  20,
340  0,
341  20);
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);
357 
358  hists["hist_mjj"] = theDir.make<TH1D>("hist_mjj", "Dijet mass", 300, 0, 300);
359  hists["hist_dR_jj"] = theDir.make<TH1D>("hist_dR_jj", "#Delta R_{JJ}", 200, 0, TMath::TwoPi());
360  hists["hist_imbalance_jj"] = theDir.make<TH1D>("hist_imbalance_jj", "Dijet imbalance", 200, -1.0, 1.0);
361 
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);
365 
366  cout << "Making functors" << endl;
367  JetIDStudiesSelector caloSelector(caloJetIDParameters, pfJetIDParameters, jetStudiesParams);
368 
369  JetIDStudiesSelector pfSelector(caloJetIDParameters, pfJetIDParameters, pfJetStudiesParams);
370 
371  bool doTracks = plotParameters.getParameter<bool>("doTracks");
372  bool useMC = plotParameters.getParameter<bool>("useMC");
373 
374  cout << "About to begin looping" << endl;
375 
376  int nev = 0;
377  //loop through each event
378  for (ev.toBegin(); !ev.atEnd(); ++ev, ++nev) {
379  edm::EventBase const& event = ev;
380 
381  if (runLumiSel(ev) == false)
382  continue;
383 
384  if (nev % 100 == 0)
385  cout << "Processing run " << event.id().run() << ", lumi " << event.id().luminosityBlock() << ", event "
386  << event.id().event() << endl;
387 
388  pat::strbitset retCalo = caloSelector.getBitTemplate();
389  caloSelector(event, retCalo);
390 
391  pat::strbitset retPF = pfSelector.getBitTemplate();
392  pfSelector(event, retPF);
393 
397  if (retCalo.test(caloSelector.caloKin())) {
398  if (retCalo.test(caloSelector.caloDeltaPhi())) {
399  vector<pat::Jet> const& allCaloJets = caloSelector.allCaloJets();
400 
401  for (std::vector<pat::Jet>::const_iterator jetBegin = allCaloJets.begin(),
402  jetEnd = jetBegin + 2,
403  ijet = jetBegin;
404  ijet != jetEnd;
405  ++ijet) {
406  const pat::Jet& jet = *ijet;
407 
408  double pt = jet.pt();
409 
410  const reco::TrackRefVector& jetTracks = jet.associatedTracks();
411 
412  hists["hist_jetPt"]->Fill(pt);
413  hists["hist_jetEtaVsPhi"]->Fill(jet.eta(), jet.phi());
414  hists["hist_jetNTracks"]->Fill(jetTracks.size());
415  hists["hist_jetNTracksVsPt"]->Fill(pt, jetTracks.size());
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());
421 
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());
427  }
428  if (doTracks) {
429  TLorentzVector p4_tracks(0, 0, 0, 0);
430  for (reco::TrackRefVector::const_iterator itrk = jetTracks.begin(), itrkEnd = jetTracks.end();
431  itrk != itrkEnd;
432  ++itrk) {
433  TLorentzVector p4_trk;
434  double M_PION = 0.140;
435  p4_trk.SetPtEtaPhiM((*itrk)->pt(), (*itrk)->eta(), (*itrk)->phi(), M_PION);
436  p4_tracks += p4_trk;
437  }
438  hists["hist_jetCHF"]->Fill(p4_tracks.Energy() / jet.energy());
439  }
440 
441  } // end loop over jets
442 
443  if (retCalo.test(caloSelector.caloJetID())) {
444  pat::Jet const& jet0 = caloSelector.caloJet0();
445  pat::Jet const& jet1 = caloSelector.caloJet1();
446 
447  TLorentzVector p4_j0(jet0.px(), jet0.py(), jet0.pz(), jet0.energy());
448  TLorentzVector p4_j1(jet1.px(), jet1.py(), jet1.pz(), jet1.energy());
449 
450  TLorentzVector p4_jj = p4_j0 + p4_j1;
451 
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()));
455 
456  hists["hist_good_jetPt"]->Fill(jet0.pt());
457  hists["hist_good_jetEtaVsPhi"]->Fill(jet0.eta(), jet0.phi());
458  hists["hist_good_jetNTracks"]->Fill(jet0.associatedTracks().size());
459  hists["hist_good_jetNTracksVsPt"]->Fill(jet0.pt(), jet0.associatedTracks().size());
460  hists["hist_good_jetEMF"]->Fill(jet0.emEnergyFraction());
461  hists["hist_good_jetCorr"]->Fill(jet0.jecFactor("Uncorrected"));
462  hists["hist_good_n90Hits"]->Fill(static_cast<int>(jet0.jetID().n90Hits));
463  hists["hist_good_fHPD"]->Fill(jet0.jetID().fHPD);
464  hists["hist_good_nConstituents"]->Fill(jet0.nConstituents());
465 
466  hists["hist_good_jetPt"]->Fill(jet1.pt());
467  hists["hist_good_jetEtaVsPhi"]->Fill(jet1.eta(), jet1.phi());
468  hists["hist_good_jetNTracks"]->Fill(jet1.associatedTracks().size());
469  hists["hist_good_jetNTracksVsPt"]->Fill(jet1.pt(), jet1.associatedTracks().size());
470  hists["hist_good_jetEMF"]->Fill(jet1.emEnergyFraction());
471  hists["hist_good_jetCorr"]->Fill(jet1.jecFactor("Uncorrected"));
472  hists["hist_good_n90Hits"]->Fill(static_cast<int>(jet1.jetID().n90Hits));
473  hists["hist_good_fHPD"]->Fill(jet1.jetID().fHPD);
474  hists["hist_good_nConstituents"]->Fill(jet1.nConstituents());
475 
476  } // end if passed calo jet id
477  } // end if passed dphi cuts
478  } // end if passed kin cuts
479 
483  if (retPF.test(pfSelector.pfDeltaPhi())) {
484  vector<pat::Jet> const& allPFJets = pfSelector.allPFJets();
485 
486  for (std::vector<pat::Jet>::const_iterator jetBegin = allPFJets.begin(), jetEnd = jetBegin + 2, ijet = jetBegin;
487  ijet != jetEnd;
488  ++ijet) {
489  const pat::Jet& jet = *ijet;
490 
491  double pt = jet.pt();
492 
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());
500 
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());
505 
506  hists["hist_pf_jetGenEMF"]->Fill(jet.genJet()->emEnergy() / jet.genJet()->energy());
507  }
508 
509  } // end loop over jets
510 
511  if (retPF.test(pfSelector.pfJetID())) {
512  pat::Jet const& jet0 = pfSelector.pfJet0();
513  pat::Jet const& jet1 = pfSelector.pfJet1();
514 
515  TLorentzVector p4_j0(jet0.px(), jet0.py(), jet0.pz(), jet0.energy());
516  TLorentzVector p4_j1(jet1.px(), jet1.py(), jet1.pz(), jet1.energy());
517 
518  TLorentzVector p4_jj = p4_j0 + p4_j1;
519 
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()));
523 
524  hists["hist_pf_good_jetPt"]->Fill(jet0.pt());
525  hists["hist_pf_good_jetEtaVsPhi"]->Fill(jet0.eta(), jet0.phi());
526  hists["hist_pf_good_nConstituents"]->Fill(jet0.nConstituents());
527  hists["hist_pf_good_jetCEF"]->Fill(jet0.chargedEmEnergyFraction());
528  hists["hist_pf_good_jetNEF"]->Fill(jet0.neutralEmEnergyFraction());
529  hists["hist_pf_good_jetCHF"]->Fill(jet0.chargedHadronEnergyFraction());
530  hists["hist_pf_good_jetNHF"]->Fill(jet0.neutralHadronEnergyFraction());
531 
532  hists["hist_pf_good_jetPt"]->Fill(jet1.pt());
533  hists["hist_pf_good_jetEtaVsPhi"]->Fill(jet1.eta(), jet1.phi());
534  hists["hist_pf_good_nConstituents"]->Fill(jet1.nConstituents());
535  hists["hist_pf_good_jetCEF"]->Fill(jet1.chargedEmEnergyFraction());
536  hists["hist_pf_good_jetNEF"]->Fill(jet1.neutralEmEnergyFraction());
537  hists["hist_pf_good_jetCHF"]->Fill(jet1.chargedHadronEnergyFraction());
538  hists["hist_pf_good_jetNHF"]->Fill(jet1.neutralHadronEnergyFraction());
539 
540  } // end if 2 good PF jets
541 
542  } // end if delta phi pf cuts
543 
544  } // end loop over events
545 
546  cout << "Calo jet selection" << endl;
547  caloSelector.print(std::cout);
548  cout << "PF jet selection" << endl;
549  pfSelector.print(std::cout);
550 
551  return 0;
552 }
const double TwoPi
const double Pi
bool test(std::string s) const
test
Definition: strbitset.h:287
float emEnergyFraction() const
returns the jet electromagnetic energy fraction
Definition: Jet.h:326
double pz() const final
z coordinate of momentum vector
float jecFactor(const std::string &level, const std::string &flavor="none", const std::string &set="") const
double pt() const final
transverse momentum
float fHPD
Definition: JetID.h:41
float neutralHadronEnergyFraction() const
neutralHadronEnergyFraction (relative to uncorrected jet energy)
Definition: Jet.h:404
T * make(const Args &...args) const
make new ROOT object
double px() const final
x coordinate of momentum vector
virtual int nConstituents() const
of constituents
Definition: Jet.h:65
const reco::TrackRefVector & associatedTracks() const
method to return a vector of refs to the tracks associated to this jet
static void enable()
enable automatic library loading
reco::JetID const & jetID() const
accessing Jet ID information
Definition: Jet.h:506
double py() const final
y coordinate of momentum vector
float chargedHadronEnergyFraction() const
chargedHadronEnergyFraction (relative to uncorrected jet energy)
Definition: Jet.h:400
size_type size() const
Size of the RefVector.
Definition: RefVector.h:102
double b
Definition: hdecay.h:118
Analysis-level calorimeter jet class.
Definition: Jet.h:77
float chargedEmEnergyFraction() const
chargedEmEnergyFraction (relative to uncorrected jet energy)
Definition: Jet.h:408
float neutralEmEnergyFraction() const
neutralEmEnergyFraction (relative to uncorrected jet energy)
Definition: Jet.h:412
double phi() const final
momentum azimuthal angle
short n90Hits
Definition: JetID.h:43
Definition: event.py:1
double energy() const final
energy
double eta() const final
momentum pseudorapidity