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

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

CALO JETS


PF JETS

Definition at line 233 of file PatBasicFWLiteJetAnalyzer_Selector.cc.

References JetIDStudiesSelector::allCaloJets(), JetIDStudiesSelector::allPFJets(), pat::Jet::associatedTracks(), fwlite::ChainEvent::atEnd(), b, edm::RefVector< C, T, F >::begin(), JetIDStudiesSelector::caloDeltaPhi(), JetIDStudiesSelector::caloJet0(), JetIDStudiesSelector::caloJet1(), JetIDStudiesSelector::caloJetID(), JetIDStudiesSelector::caloKin(), pat::Jet::chargedEmEnergyFraction(), pat::Jet::chargedHadronEnergyFraction(), gather_cfg::cout, PatBasicFWLiteJetAnalyzer_Selector_cfg::doTracks, reco::GenJet::emEnergy(), pat::Jet::emEnergyFraction(), FWLiteEnabler::enable(), edm::RefVector< C, T, F >::end(), reco::LeafCandidate::energy(), reco::LeafCandidate::eta(), ev, funct::false, reco::JetID::fHPD, pat::Jet::genJet(), edm::ParameterSet::getParameter(), reco::GenJet::hadEnergy(), compare::hists, haddnano::inputs, pat::Jet::jecFactor(), metsig::jet, pat::Jet::jetID(), impactParameterTagInfos_cfi::jetTracks, TFileDirectory::make(), TFileDirectory::mkdir(), reco::JetID::n90Hits, reco::Jet::nConstituents(), pat::Jet::neutralEmEnergyFraction(), pat::Jet::neutralHadronEnergyFraction(), nullptr, PatBasicFWLiteJetAnalyzer_Selector_cfg::outputs, JetIDStudiesSelector::pfDeltaPhi(), JetIDStudiesSelector::pfJet0(), JetIDStudiesSelector::pfJet1(), JetIDStudiesSelector::pfJetID(), reco::LeafCandidate::phi(), Pi, PatBasicFWLiteJetAnalyzer_Selector_cfg::plotParameters, PyBind11ProcessDesc::processDesc(), EnergyCorrector::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, fwlite::ChainEvent::toBegin(), TwoPi, and PatBasicFWLiteJetAnalyzer_Selector_cfg::useMC.

234 {
235 
236 
237  if ( argc < 2 ) {
238  std::cout << "Usage : " << argv[0] << " [parameters.py]" << std::endl;
239  return 0;
240  }
241 
242  cout << "Hello from " << argv[0] << "!" << endl;
243 
244 
245  // load framework libraries
246  gSystem->Load( "libFWCoreFWLite" );
248 
249 
250  cout << "Getting parameters" << endl;
251  // Get the python configuration
252  ProcessDescImpl builder(argv[1]);
253  std::shared_ptr<edm::ProcessDesc> b = builder.processDesc();
254  std::shared_ptr<edm::ParameterSet> parameters = b->getProcessPSet();
255  parameters->registerIt();
256 
257  edm::ParameterSet const& jetStudiesParams = parameters->getParameter<edm::ParameterSet>("jetStudies");
258  edm::ParameterSet const& pfJetStudiesParams = parameters->getParameter<edm::ParameterSet>("pfJetStudies");
259  edm::ParameterSet const& caloJetIDParameters = parameters->getParameter<edm::ParameterSet>("jetIDSelector");
260  edm::ParameterSet const& pfJetIDParameters = parameters->getParameter<edm::ParameterSet>("pfJetIDSelector");
261  edm::ParameterSet const& plotParameters = parameters->getParameter<edm::ParameterSet>("plotParameters");
262  edm::ParameterSet const& inputs = parameters->getParameter<edm::ParameterSet>("inputs");
263  edm::ParameterSet const& outputs = parameters->getParameter<edm::ParameterSet>("outputs");
264 
265  cout << "Making RunLumiSelector" << endl;
266  RunLumiSelector runLumiSel( inputs );
267 
268  cout << "setting up TFileService" << endl;
269  // book a set of histograms
270  fwlite::TFileService fs = fwlite::TFileService( outputs.getParameter<std::string>("outputName") );
271  TFileDirectory theDir = fs.mkdir( "histos" );
272 
273  cout << "Setting up chain event" << endl;
274  // This object 'event' is used both to get all information from the
275  // event as well as to store histograms, etc.
276  fwlite::ChainEvent ev ( inputs.getParameter<std::vector<std::string> > ("fileNames") );
277 
278 
279  cout << "Booking histograms" << endl;
280  // Book histograms
281 
282  std::map<std::string, TH1*> hists;
283 
284  hists["hist_nJet" ] = theDir.make<TH1D>( "hist_nJet" ,"Number of Calo Jets", 10, 0, 10 ) ;
285  hists["hist_nPFJet" ] = theDir.make<TH1D>( "hist_nPFJet" ,"Number of PF Jets", 10, 0, 10 ) ;
286 
287  hists["hist_jetPt" ] = theDir.make<TH1D>( "hist_jetPt" , "Jet p_{T}", 400, 0, 400 ) ;
288  hists["hist_jetEtaVsPhi" ] = theDir.make<TH2D>( "hist_jetEtaVsPhi" , "Jet #phi versus #eta;#eta;#phi", 50, -5.0, 5.0, 50, -TMath::Pi(), TMath::Pi() ) ;
289  hists["hist_jetNTracks" ] = theDir.make<TH1D>( "hist_jetNTracks" , "Jet N_{TRACKS}", 20, 0, 20 ) ;
290  hists["hist_jetNTracksVsPt" ] = theDir.make<TH2D>( "hist_jetNTracksVsPt" , "Number of Tracks versus Jet p_{T};Jet p_{T}(GeV/c) ;N_{Tracks}",20, 0, 200, 20, 0, 20 ) ;
291  hists["hist_jetEMF" ] = theDir.make<TH1D>( "hist_jetEMF" , "Jet EMF", 200, 0, 1) ;
292  hists["hist_jetPdgID" ] = theDir.make<TH1D>( "hist_jetPdgID" , "PDG Id of Jet Constituents", 10000, 0, 10000 ) ;
293  hists["hist_jetGenEmE" ] = theDir.make<TH1D>( "hist_jetGenEmE" , "Gen Jet EM Energy", 200, 0, 200 ) ;
294  hists["hist_jetGenHadE" ] = theDir.make<TH1D>( "hist_jetGenHadE" , "Gen Jet HAD Energy", 200, 0, 200 ) ;
295  hists["hist_jetGenEMF" ] = theDir.make<TH1D>( "hist_jetGenEMF" , "Gen Jet EMF", 200, 0, 1) ;
296  hists["hist_jetEoverGenE" ] = theDir.make<TH1D>( "hist_jetEoverGenE" , "Energy of reco Jet / Energy of gen Jet", 200, 0, 2.0) ;
297  hists["hist_jetCorr" ] = theDir.make<TH1D>( "hist_jetCorr" , "Jet Correction Factor", 200, 0, 1.0 ) ;
298  hists["hist_n90Hits" ] = theDir.make<TH1D>( "hist_n90Hits" , "Jet n90Hits", 20, 0, 20) ;
299  hists["hist_fHPD" ] = theDir.make<TH1D>( "hist_fHPD" , "Jet fHPD", 200, 0, 1) ;
300  hists["hist_nConstituents" ] = theDir.make<TH1D>( "hist_nConstituents" , "Jet nConstituents", 20, 0, 20 ) ;
301  hists["hist_jetCHF" ] = theDir.make<TH1D>( "hist_jetCHF" , "Jet Charged Hadron Fraction", 200, 0, 1.0) ;
302 
303  hists["hist_good_jetPt" ] = theDir.make<TH1D>( "hist_good_jetPt" , "Jet p_{T}", 400, 0, 400 ) ;
304  hists["hist_good_jetEtaVsPhi" ] = theDir.make<TH2D>( "hist_good_jetEtaVsPhi" , "Jet #phi versus #eta;#eta;#phi", 50, -5.0, 5.0, 50, -TMath::Pi(), TMath::Pi() ) ;
305  hists["hist_good_jetNTracks" ] = theDir.make<TH1D>( "hist_good_jetNTracks" , "Jet N_{TRACKS}", 20, 0, 20 ) ;
306  hists["hist_good_jetNTracksVsPt" ] = theDir.make<TH2D>( "hist_good_jetNTracksVsPt" , "Number of Tracks versus Jet p_{T};Jet p_{T}(GeV/c) ;N_{Tracks}",20, 0, 200, 20, 0, 20 ) ;
307  hists["hist_good_jetEMF" ] = theDir.make<TH1D>( "hist_good_jetEMF" , "Jet EMF", 200, 0, 1) ;
308  hists["hist_good_jetPdgID" ] = theDir.make<TH1D>( "hist_good_jetPdgID" , "PDG Id of Jet Constituents", 10000, 0, 10000 ) ;
309  hists["hist_good_jetGenEmE" ] = theDir.make<TH1D>( "hist_good_jetGenEmE" , "Gen Jet EM Energy", 200, 0, 200 ) ;
310  hists["hist_good_jetGenHadE" ] = theDir.make<TH1D>( "hist_good_jetGenHadE" , "Gen Jet HAD Energy", 200, 0, 200 ) ;
311  hists["hist_good_jetGenEMF" ] = theDir.make<TH1D>( "hist_good_jetGenEMF" , "Gen Jet EMF", 200, 0, 1) ;
312  hists["hist_good_jetEoverGenE" ] = theDir.make<TH1D>( "hist_good_jetEoverGenE" , "Energy of reco Jet / Energy of gen Jet", 200, 0, 2.0) ;
313  hists["hist_good_jetCorr" ] = theDir.make<TH1D>( "hist_good_jetCorr" , "Jet Correction Factor", 200, 0, 1.0 ) ;
314  hists["hist_good_n90Hits" ] = theDir.make<TH1D>( "hist_good_n90Hits" , "Jet n90Hits", 20, 0, 20) ;
315  hists["hist_good_fHPD" ] = theDir.make<TH1D>( "hist_good_fHPD" , "Jet fHPD", 200, 0, 1) ;
316  hists["hist_good_nConstituents" ] = theDir.make<TH1D>( "hist_good_nConstituents" , "Jet nConstituents", 20, 0, 20 ) ;
317  hists["hist_good_jetCHF" ] = theDir.make<TH1D>( "hist_good_jetCHF" , "Jet Charged Hadron Fraction", 200, 0, 1.0) ;
318 
319 
320  hists["hist_pf_jetPt" ] = theDir.make<TH1D>( "hist_pf_jetPt" , "PFJet p_{T}", 400, 0, 400 ) ;
321  hists["hist_pf_jetEtaVsPhi" ] = theDir.make<TH2D>( "hist_pf_jetEtaVsPhi" , "PFJet #phi versus #eta;#eta;#phi", 50, -5.0, 5.0, 50, -TMath::Pi(), TMath::Pi() ) ;
322  hists["hist_pf_jetNTracks" ] = theDir.make<TH1D>( "hist_pf_jetNTracks" , "PFJet N_{TRACKS}", 20, 0, 20 ) ;
323  hists["hist_pf_jetNTracksVsPt" ] = theDir.make<TH2D>( "hist_pf_jetNTracksVsPt" , "Number of Tracks versus Jet p_{T};Jet p_{T}(GeV/c) ;N_{Tracks}",20, 0, 200, 20, 0, 20 ) ;
324  hists["hist_pf_jetEMF" ] = theDir.make<TH1D>( "hist_pf_jetEMF" , "PFJet EMF", 200, 0, 1) ;
325  hists["hist_pf_jetCHF" ] = theDir.make<TH1D>( "hist_pf_jetCHF" , "PFJet CHF", 200, 0, 1) ;
326  hists["hist_pf_jetNHF" ] = theDir.make<TH1D>( "hist_pf_jetNHF" , "PFJet NHF", 200, 0, 1) ;
327  hists["hist_pf_jetCEF" ] = theDir.make<TH1D>( "hist_pf_jetCEF" , "PFJet CEF", 200, 0, 1) ;
328  hists["hist_pf_jetNEF" ] = theDir.make<TH1D>( "hist_pf_jetNEF" , "PFJet NEF", 200, 0, 1) ;
329  hists["hist_pf_jetPdgID" ] = theDir.make<TH1D>( "hist_pf_jetPdgID" , "PDG Id of Jet Constituents", 10000, 0, 10000 ) ;
330  hists["hist_pf_jetGenEmE" ] = theDir.make<TH1D>( "hist_pf_jetGenEmE" , "Gen Jet EM Energy", 200, 0, 200 ) ;
331  hists["hist_pf_jetGenHadE" ] = theDir.make<TH1D>( "hist_pf_jetGenHadE" , "Gen Jet HAD Energy", 200, 0, 200 ) ;
332  hists["hist_pf_jetGenEMF" ] = theDir.make<TH1D>( "hist_pf_jetGenEMF" , "Gen Jet EMF", 200, 0, 1) ;
333  hists["hist_pf_jetEoverGenE" ] = theDir.make<TH1D>( "hist_pf_jetEoverGenE" , "Energy of reco Jet / Energy of gen Jet", 200, 0, 2.0) ;
334  hists["hist_pf_jetCorr" ] = theDir.make<TH1D>( "hist_pf_jetCorr" , "PFJet Correction Factor", 200, 0, 1.0 ) ;
335  hists["hist_pf_nConstituents" ] = theDir.make<TH1D>( "hist_pf_nConstituents" , "PFJet nConstituents", 20, 0, 20 ) ;
336 
337  hists["hist_pf_good_jetPt" ] = theDir.make<TH1D>( "hist_pf_good_jetPt" , "PFJet p_{T}", 400, 0, 400 ) ;
338  hists["hist_pf_good_jetEtaVsPhi" ] = theDir.make<TH2D>( "hist_pf_good_jetEtaVsPhi" , "PFJet #phi versus #eta;#eta;#phi", 50, -5.0, 5.0, 50, -TMath::Pi(), TMath::Pi() ) ;
339  hists["hist_pf_good_jetNTracks" ] = theDir.make<TH1D>( "hist_pf_good_jetNTracks" , "PFJet N_{TRACKS}", 20, 0, 20 ) ;
340  hists["hist_pf_good_jetNTracksVsPt" ] = theDir.make<TH2D>( "hist_pf_good_jetNTracksVsPt", "Number of Tracks versus Jet p_{T};Jet p_{T}(GeV/c) ;N_{Tracks}",20, 0, 200, 20, 0, 20 ) ;
341  hists["hist_pf_good_jetEMF" ] = theDir.make<TH1D>( "hist_pf_good_jetEMF" , "PFJet EMF", 200, 0, 1) ;
342  hists["hist_pf_good_jetCHF" ] = theDir.make<TH1D>( "hist_pf_good_jetCHF" , "PFJet CHF", 200, 0, 1) ;
343  hists["hist_pf_good_jetNHF" ] = theDir.make<TH1D>( "hist_pf_good_jetNHF" , "PFJet NHF", 200, 0, 1) ;
344  hists["hist_pf_good_jetCEF" ] = theDir.make<TH1D>( "hist_pf_good_jetCEF" , "PFJet CEF", 200, 0, 1) ;
345  hists["hist_pf_good_jetNEF" ] = theDir.make<TH1D>( "hist_pf_good_jetNEF" , "PFJet NEF", 200, 0, 1) ;
346  hists["hist_pf_good_jetPdgID" ] = theDir.make<TH1D>( "hist_pf_good_jetPdgID" , "PDG Id of Jet Constituents", 10000, 0, 10000 ) ;
347  hists["hist_pf_good_jetGenEmE" ] = theDir.make<TH1D>( "hist_pf_good_jetGenEmE" , "Gen Jet EM Energy", 200, 0, 200 ) ;
348  hists["hist_pf_good_jetGenHadE" ] = theDir.make<TH1D>( "hist_pf_good_jetGenHadE" , "Gen Jet HAD Energy", 200, 0, 200 ) ;
349  hists["hist_pf_good_jetGenEMF" ] = theDir.make<TH1D>( "hist_pf_good_jetGenEMF" , "Gen Jet EMF", 200, 0, 1) ;
350  hists["hist_pf_good_jetEoverGenE" ] = theDir.make<TH1D>( "hist_pf_good_jetEoverGenE" , "Energy of reco Jet / Energy of gen Jet", 200, 0, 2.0) ;
351  hists["hist_pf_good_jetCorr" ] = theDir.make<TH1D>( "hist_pf_good_jetCorr" , "PFJet Correction Factor", 200, 0, 1.0 ) ;
352  hists["hist_pf_good_nConstituents" ] = theDir.make<TH1D>( "hist_pf_good_nConstituents" , "PFJet nConstituents", 20, 0, 20 ) ;
353 
354  hists["hist_mjj" ] = theDir.make<TH1D>( "hist_mjj" , "Dijet mass", 300, 0, 300 ) ;
355  hists["hist_dR_jj" ] = theDir.make<TH1D>( "hist_dR_jj" , "#Delta R_{JJ}", 200, 0, TMath::TwoPi() ) ;
356  hists["hist_imbalance_jj" ] = theDir.make<TH1D>( "hist_imbalance_jj" , "Dijet imbalance", 200, -1.0, 1.0 ) ;
357 
358  hists["hist_pf_mjj" ] = theDir.make<TH1D>( "hist_pf_mjj" , "Dijet mass", 300, 0, 300 ) ;
359  hists["hist_pf_dR_jj" ] = theDir.make<TH1D>( "hist_pf_dR_jj" , "#Delta R_{JJ}", 200, 0, TMath::TwoPi() ) ;
360  hists["hist_pf_imbalance_jj" ] = theDir.make<TH1D>( "hist_pf_imbalance_jj" , "Dijet imbalance", 200, -1.0, 1.0 ) ;
361 
362 
363 
364  cout << "Making functors" << endl;
365  JetIDStudiesSelector caloSelector( caloJetIDParameters,
366  pfJetIDParameters,
367  jetStudiesParams );
368 
369  JetIDStudiesSelector pfSelector( caloJetIDParameters,
370  pfJetIDParameters,
371  pfJetStudiesParams );
372 
373  bool doTracks = plotParameters.getParameter<bool>("doTracks");
374  bool useMC = plotParameters.getParameter<bool>("useMC");
375 
376  cout << "About to begin looping" << endl;
377 
378  int nev = 0;
379  //loop through each event
380  for (ev.toBegin(); ! ev.atEnd(); ++ev, ++nev) {
381 
382 
383  edm::EventBase const & event = ev;
384 
385  if ( runLumiSel(ev) == false ) continue;
386 
387  if ( nev % 100 == 0 ) cout << "Processing run " << event.id().run() << ", lumi " << event.id().luminosityBlock() << ", event " << event.id().event() << endl;
388 
389 
390 
391 
392  pat::strbitset retCalo = caloSelector.getBitTemplate();
393  caloSelector( event, retCalo );
394 
395 
396  pat::strbitset retPF = pfSelector.getBitTemplate();
397  pfSelector( event, retPF );
398 
402  if ( retCalo.test( caloSelector.caloKin() ) ) {
403  if ( retCalo.test( caloSelector.caloDeltaPhi() ) ) {
404  vector<pat::Jet> const & allCaloJets = caloSelector.allCaloJets();
405 
406  for ( std::vector<pat::Jet>::const_iterator jetBegin = allCaloJets.begin(),
407  jetEnd = jetBegin + 2, ijet = jetBegin;
408  ijet != jetEnd; ++ijet ) {
409 
410  const pat::Jet & jet = *ijet;
411 
412  double pt = jet.pt();
413 
415 
416  hists["hist_jetPt"]->Fill( pt );
417  hists["hist_jetEtaVsPhi"]->Fill( jet.eta(), jet.phi() );
418  hists["hist_jetNTracks"]->Fill( jetTracks.size() );
419  hists["hist_jetNTracksVsPt"]->Fill( pt, jetTracks.size() );
420  hists["hist_jetEMF"]->Fill( jet.emEnergyFraction() );
421  hists["hist_jetCorr"]->Fill( jet.jecFactor("Uncorrected") );
422  hists["hist_n90Hits"]->Fill( static_cast<int>(jet.jetID().n90Hits) );
423  hists["hist_fHPD"]->Fill( jet.jetID().fHPD );
424  hists["hist_nConstituents"]->Fill( jet.nConstituents() );
425 
426  if ( useMC && jet.genJet() != nullptr ) {
427  hists["hist_jetGenEmE"]->Fill( jet.genJet()->emEnergy() );
428  hists["hist_jetGenHadE"]->Fill( jet.genJet()->hadEnergy() );
429  hists["hist_jetEoverGenE"]->Fill( jet.energy() / jet.genJet()->energy() );
430  hists["hist_jetGenEMF"]->Fill( jet.genJet()->emEnergy() / jet.genJet()->energy() );
431  }
432  if ( doTracks ) {
433  TLorentzVector p4_tracks(0,0,0,0);
434  for ( reco::TrackRefVector::const_iterator itrk = jetTracks.begin(),
435  itrkEnd = jetTracks.end();
436  itrk != itrkEnd; ++itrk ) {
437  TLorentzVector p4_trk;
438  double M_PION = 0.140;
439  p4_trk.SetPtEtaPhiM( (*itrk)->pt(), (*itrk)->eta(), (*itrk)->phi(), M_PION );
440  p4_tracks += p4_trk;
441  }
442  hists["hist_jetCHF"]->Fill( p4_tracks.Energy() / jet.energy() );
443  }
444 
445 
446  } // end loop over jets
447 
448 
449 
450  if ( retCalo.test( caloSelector.caloJetID() ) ) {
451  pat::Jet const & jet0 = caloSelector.caloJet0();
452  pat::Jet const & jet1 = caloSelector.caloJet1();
453 
454  TLorentzVector p4_j0( jet0.px(), jet0.py(), jet0.pz(), jet0.energy() );
455  TLorentzVector p4_j1( jet1.px(), jet1.py(), jet1.pz(), jet1.energy() );
456 
457  TLorentzVector p4_jj = p4_j0 + p4_j1;
458 
459  hists["hist_mjj"]->Fill( p4_jj.M() );
460  hists["hist_dR_jj"]->Fill( p4_j0.DeltaR( p4_j1 ) );
461  hists["hist_imbalance_jj"]->Fill( (p4_j0.Perp() - p4_j1.Perp() ) /
462  (p4_j0.Perp() + p4_j1.Perp() ) );
463 
464  hists["hist_good_jetPt"]->Fill( jet0.pt() );
465  hists["hist_good_jetEtaVsPhi"]->Fill( jet0.eta(), jet0.phi() );
466  hists["hist_good_jetNTracks"]->Fill( jet0.associatedTracks().size() );
467  hists["hist_good_jetNTracksVsPt"]->Fill( jet0.pt(), jet0.associatedTracks().size() );
468  hists["hist_good_jetEMF"]->Fill( jet0.emEnergyFraction() );
469  hists["hist_good_jetCorr"]->Fill( jet0.jecFactor("Uncorrected") );
470  hists["hist_good_n90Hits"]->Fill( static_cast<int>(jet0.jetID().n90Hits) );
471  hists["hist_good_fHPD"]->Fill( jet0.jetID().fHPD );
472  hists["hist_good_nConstituents"]->Fill( jet0.nConstituents() );
473 
474 
475  hists["hist_good_jetPt"]->Fill( jet1.pt() );
476  hists["hist_good_jetEtaVsPhi"]->Fill( jet1.eta(), jet1.phi() );
477  hists["hist_good_jetNTracks"]->Fill( jet1.associatedTracks().size() );
478  hists["hist_good_jetNTracksVsPt"]->Fill( jet1.pt(), jet1.associatedTracks().size() );
479  hists["hist_good_jetEMF"]->Fill( jet1.emEnergyFraction() );
480  hists["hist_good_jetCorr"]->Fill( jet1.jecFactor("Uncorrected") );
481  hists["hist_good_n90Hits"]->Fill( static_cast<int>(jet1.jetID().n90Hits) );
482  hists["hist_good_fHPD"]->Fill( jet1.jetID().fHPD );
483  hists["hist_good_nConstituents"]->Fill( jet1.nConstituents() );
484 
485  }// end if passed calo jet id
486  }// end if passed dphi cuts
487  }// end if passed kin cuts
488 
489 
493  if ( retPF.test( pfSelector.pfDeltaPhi() ) ) {
494 
495  vector<pat::Jet> const & allPFJets = pfSelector.allPFJets();
496 
497  for ( std::vector<pat::Jet>::const_iterator jetBegin = allPFJets.begin(),
498  jetEnd = jetBegin + 2, ijet = jetBegin;
499  ijet != jetEnd; ++ijet ) {
500 
501  const pat::Jet & jet = *ijet;
502 
503  double pt = jet.pt();
504 
505  hists["hist_pf_jetPt"]->Fill( pt );
506  hists["hist_pf_jetEtaVsPhi"]->Fill( jet.eta(), jet.phi() );
507  hists["hist_pf_nConstituents"]->Fill( jet.nConstituents() );
508  hists["hist_pf_jetCEF"]->Fill( jet.chargedEmEnergyFraction() );
509  hists["hist_pf_jetNEF"]->Fill( jet.neutralEmEnergyFraction() );
510  hists["hist_pf_jetCHF"]->Fill( jet.chargedHadronEnergyFraction() );
511  hists["hist_pf_jetNHF"]->Fill( jet.neutralHadronEnergyFraction() );
512 
513 
514  if ( useMC && jet.genJet() != nullptr ) {
515  hists["hist_pf_jetGenEmE"]->Fill( jet.genJet()->emEnergy() );
516  hists["hist_pf_jetGenHadE"]->Fill( jet.genJet()->hadEnergy() );
517  hists["hist_pf_jetEoverGenE"]->Fill( jet.energy() / jet.genJet()->energy() );
518 
519  hists["hist_pf_jetGenEMF"]->Fill( jet.genJet()->emEnergy() / jet.genJet()->energy() );
520  }
521 
522  } // end loop over jets
523 
524 
525 
526  if ( retPF.test( pfSelector.pfJetID() ) ) {
527  pat::Jet const & jet0 = pfSelector.pfJet0();
528  pat::Jet const & jet1 = pfSelector.pfJet1();
529 
530  TLorentzVector p4_j0( jet0.px(), jet0.py(), jet0.pz(), jet0.energy() );
531  TLorentzVector p4_j1( jet1.px(), jet1.py(), jet1.pz(), jet1.energy() );
532 
533  TLorentzVector p4_jj = p4_j0 + p4_j1;
534 
535  hists["hist_pf_mjj"]->Fill( p4_jj.M() );
536  hists["hist_pf_dR_jj"]->Fill( p4_j0.DeltaR( p4_j1 ) );
537  hists["hist_pf_imbalance_jj"]->Fill( (p4_j0.Perp() - p4_j1.Perp() ) /
538  (p4_j0.Perp() + p4_j1.Perp() ) );
539 
540  hists["hist_pf_good_jetPt"]->Fill( jet0.pt() );
541  hists["hist_pf_good_jetEtaVsPhi"]->Fill( jet0.eta(), jet0.phi() );
542  hists["hist_pf_good_nConstituents"]->Fill( jet0.nConstituents() );
543  hists["hist_pf_good_jetCEF"]->Fill( jet0.chargedEmEnergyFraction() );
544  hists["hist_pf_good_jetNEF"]->Fill( jet0.neutralEmEnergyFraction() );
545  hists["hist_pf_good_jetCHF"]->Fill( jet0.chargedHadronEnergyFraction() );
546  hists["hist_pf_good_jetNHF"]->Fill( jet0.neutralHadronEnergyFraction() );
547 
548 
549  hists["hist_pf_good_jetPt"]->Fill( jet1.pt() );
550  hists["hist_pf_good_jetEtaVsPhi"]->Fill( jet1.eta(), jet1.phi() );
551  hists["hist_pf_good_nConstituents"]->Fill( jet1.nConstituents() );
552  hists["hist_pf_good_jetCEF"]->Fill( jet1.chargedEmEnergyFraction() );
553  hists["hist_pf_good_jetNEF"]->Fill( jet1.neutralEmEnergyFraction() );
554  hists["hist_pf_good_jetCHF"]->Fill( jet1.chargedHadronEnergyFraction() );
555  hists["hist_pf_good_jetNHF"]->Fill( jet1.neutralHadronEnergyFraction() );
556 
557  } // end if 2 good PF jets
558 
559  }// end if delta phi pf cuts
560 
561  } // end loop over events
562 
563  cout << "Calo jet selection" << endl;
564  caloSelector.print(std::cout);
565  cout << "PF jet selection" << endl;
566  pfSelector.print(std::cout);
567 
568 
569 
570 
571  return 0;
572 }
const double TwoPi
const double Pi
T getParameter(std::string const &) const
float neutralHadronEnergyFraction() const
neutralHadronEnergyFraction (relative to uncorrected jet energy)
Definition: Jet.h:377
float hadEnergy() const
Definition: GenJet.h:91
double eta() const final
momentum pseudorapidity
float emEnergy() const
Definition: GenJet.h:89
float fHPD
Definition: JetID.h:45
float chargedHadronEnergyFraction() const
chargedHadronEnergyFraction (relative to uncorrected jet energy)
Definition: Jet.h:375
const reco::TrackRefVector & associatedTracks() const
method to return a vector of refs to the tracks associated to this jet
double px() const final
x coordinate of momentum vector
#define nullptr
float chargedEmEnergyFraction() const
chargedEmEnergyFraction (relative to uncorrected jet energy)
Definition: Jet.h:379
double pt() const final
transverse momentum
bool ev
const_iterator end() const
Termination of iteration.
Definition: RefVector.h:253
const_iterator begin() const
Initialize an iterator over the RefVector.
Definition: RefVector.h:248
double pz() const final
z coordinate of momentum vector
static void enable()
enable automatic library loading
double energy() const final
energy
T * make(const Args &...args) const
make new ROOT object
float emEnergyFraction() const
returns the jet electromagnetic energy fraction
Definition: Jet.h:303
reco::JetID const & jetID() const
accessing Jet ID information
Definition: Jet.h:465
TFileDirectory mkdir(const std::string &dir, const std::string &descr="")
create a new subdirectory
double b
Definition: hdecay.h:120
double py() const final
y coordinate of momentum vector
Analysis-level calorimeter jet class.
Definition: Jet.h:80
bool test(std::string s) const
test
Definition: strbitset.h:331
virtual int nConstituents() const
of constituents
Definition: Jet.h:65
const reco::GenJet * genJet() const
return the matched generated jet
size_type size() const
Size of the RefVector.
Definition: RefVector.h:107
float jecFactor(const std::string &level, const std::string &flavor="none", const std::string &set="") const
float neutralEmEnergyFraction() const
neutralEmEnergyFraction (relative to uncorrected jet energy)
Definition: Jet.h:381
double phi() const final
momentum azimuthal angle
short n90Hits
Definition: JetID.h:47
Definition: event.py:1