237 std::cout <<
"Usage : " <<
argv[0] <<
" [parameters.py]" << std::endl;
241 cout <<
"Hello from " <<
argv[0] <<
"!" << endl;
245 gSystem->Load(
"libFWCoreFWLite" );
249 cout <<
"Getting parameters" << endl;
252 boost::shared_ptr<edm::ProcessDesc>
b = builder.processDesc();
253 boost::shared_ptr<edm::ParameterSet>
parameters = b->getProcessPSet();
254 parameters->registerIt();
264 cout <<
"Making RunLumiSelector" << endl;
267 cout <<
"setting up TFileService" << endl;
272 cout <<
"Setting up chain event" << endl;
278 cout <<
"Booking histograms" << endl;
281 std::map<std::string, TH1*> hists;
283 hists[
"hist_nJet" ] = theDir.
make<TH1D>(
"hist_nJet" ,
"Number of Calo Jets", 10, 0, 10 ) ;
284 hists[
"hist_nPFJet" ] = theDir.
make<TH1D>(
"hist_nPFJet" ,
"Number of PF Jets", 10, 0, 10 ) ;
286 hists[
"hist_jetPt" ] = theDir.
make<TH1D>(
"hist_jetPt" ,
"Jet p_{T}", 400, 0, 400 ) ;
287 hists[
"hist_jetEtaVsPhi" ] = theDir.
make<TH2D>(
"hist_jetEtaVsPhi" ,
"Jet #phi versus #eta;#eta;#phi", 50, -5.0, 5.0, 50, -
TMath::Pi(),
TMath::Pi() ) ;
288 hists[
"hist_jetNTracks" ] = theDir.
make<TH1D>(
"hist_jetNTracks" ,
"Jet N_{TRACKS}", 20, 0, 20 ) ;
289 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 ) ;
290 hists[
"hist_jetEMF" ] = theDir.
make<TH1D>(
"hist_jetEMF" ,
"Jet EMF", 200, 0, 1) ;
291 hists[
"hist_jetPdgID" ] = theDir.
make<TH1D>(
"hist_jetPdgID" ,
"PDG Id of Jet Constituents", 10000, 0, 10000 ) ;
292 hists[
"hist_jetGenEmE" ] = theDir.
make<TH1D>(
"hist_jetGenEmE" ,
"Gen Jet EM Energy", 200, 0, 200 ) ;
293 hists[
"hist_jetGenHadE" ] = theDir.
make<TH1D>(
"hist_jetGenHadE" ,
"Gen Jet HAD Energy", 200, 0, 200 ) ;
294 hists[
"hist_jetGenEMF" ] = theDir.
make<TH1D>(
"hist_jetGenEMF" ,
"Gen Jet EMF", 200, 0, 1) ;
295 hists[
"hist_jetEoverGenE" ] = theDir.
make<TH1D>(
"hist_jetEoverGenE" ,
"Energy of reco Jet / Energy of gen Jet", 200, 0, 2.0) ;
296 hists[
"hist_jetCorr" ] = theDir.
make<TH1D>(
"hist_jetCorr" ,
"Jet Correction Factor", 200, 0, 1.0 ) ;
297 hists[
"hist_n90Hits" ] = theDir.
make<TH1D>(
"hist_n90Hits" ,
"Jet n90Hits", 20, 0, 20) ;
298 hists[
"hist_fHPD" ] = theDir.
make<TH1D>(
"hist_fHPD" ,
"Jet fHPD", 200, 0, 1) ;
299 hists[
"hist_nConstituents" ] = theDir.
make<TH1D>(
"hist_nConstituents" ,
"Jet nConstituents", 20, 0, 20 ) ;
300 hists[
"hist_jetCHF" ] = theDir.
make<TH1D>(
"hist_jetCHF" ,
"Jet Charged Hadron Fraction", 200, 0, 1.0) ;
302 hists[
"hist_good_jetPt" ] = theDir.make<TH1D>(
"hist_good_jetPt" ,
"Jet p_{T}", 400, 0, 400 ) ;
303 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() ) ;
304 hists[
"hist_good_jetNTracks" ] = theDir.make<TH1D>(
"hist_good_jetNTracks" ,
"Jet N_{TRACKS}", 20, 0, 20 ) ;
305 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 ) ;
306 hists[
"hist_good_jetEMF" ] = theDir.make<TH1D>(
"hist_good_jetEMF" ,
"Jet EMF", 200, 0, 1) ;
307 hists[
"hist_good_jetPdgID" ] = theDir.make<TH1D>(
"hist_good_jetPdgID" ,
"PDG Id of Jet Constituents", 10000, 0, 10000 ) ;
308 hists[
"hist_good_jetGenEmE" ] = theDir.make<TH1D>(
"hist_good_jetGenEmE" ,
"Gen Jet EM Energy", 200, 0, 200 ) ;
309 hists[
"hist_good_jetGenHadE" ] = theDir.make<TH1D>(
"hist_good_jetGenHadE" ,
"Gen Jet HAD Energy", 200, 0, 200 ) ;
310 hists[
"hist_good_jetGenEMF" ] = theDir.make<TH1D>(
"hist_good_jetGenEMF" ,
"Gen Jet EMF", 200, 0, 1) ;
311 hists[
"hist_good_jetEoverGenE" ] = theDir.make<TH1D>(
"hist_good_jetEoverGenE" ,
"Energy of reco Jet / Energy of gen Jet", 200, 0, 2.0) ;
312 hists[
"hist_good_jetCorr" ] = theDir.make<TH1D>(
"hist_good_jetCorr" ,
"Jet Correction Factor", 200, 0, 1.0 ) ;
313 hists[
"hist_good_n90Hits" ] = theDir.make<TH1D>(
"hist_good_n90Hits" ,
"Jet n90Hits", 20, 0, 20) ;
314 hists[
"hist_good_fHPD" ] = theDir.make<TH1D>(
"hist_good_fHPD" ,
"Jet fHPD", 200, 0, 1) ;
315 hists[
"hist_good_nConstituents" ] = theDir.make<TH1D>(
"hist_good_nConstituents" ,
"Jet nConstituents", 20, 0, 20 ) ;
316 hists[
"hist_good_jetCHF" ] = theDir.make<TH1D>(
"hist_good_jetCHF" ,
"Jet Charged Hadron Fraction", 200, 0, 1.0) ;
319 hists[
"hist_pf_jetPt" ] = theDir.make<TH1D>(
"hist_pf_jetPt" ,
"PFJet p_{T}", 400, 0, 400 ) ;
320 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() ) ;
321 hists[
"hist_pf_jetNTracks" ] = theDir.make<TH1D>(
"hist_pf_jetNTracks" ,
"PFJet N_{TRACKS}", 20, 0, 20 ) ;
322 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 ) ;
323 hists[
"hist_pf_jetEMF" ] = theDir.make<TH1D>(
"hist_pf_jetEMF" ,
"PFJet EMF", 200, 0, 1) ;
324 hists[
"hist_pf_jetCHF" ] = theDir.make<TH1D>(
"hist_pf_jetCHF" ,
"PFJet CHF", 200, 0, 1) ;
325 hists[
"hist_pf_jetNHF" ] = theDir.make<TH1D>(
"hist_pf_jetNHF" ,
"PFJet NHF", 200, 0, 1) ;
326 hists[
"hist_pf_jetCEF" ] = theDir.make<TH1D>(
"hist_pf_jetCEF" ,
"PFJet CEF", 200, 0, 1) ;
327 hists[
"hist_pf_jetNEF" ] = theDir.make<TH1D>(
"hist_pf_jetNEF" ,
"PFJet NEF", 200, 0, 1) ;
328 hists[
"hist_pf_jetPdgID" ] = theDir.make<TH1D>(
"hist_pf_jetPdgID" ,
"PDG Id of Jet Constituents", 10000, 0, 10000 ) ;
329 hists[
"hist_pf_jetGenEmE" ] = theDir.make<TH1D>(
"hist_pf_jetGenEmE" ,
"Gen Jet EM Energy", 200, 0, 200 ) ;
330 hists[
"hist_pf_jetGenHadE" ] = theDir.make<TH1D>(
"hist_pf_jetGenHadE" ,
"Gen Jet HAD Energy", 200, 0, 200 ) ;
331 hists[
"hist_pf_jetGenEMF" ] = theDir.make<TH1D>(
"hist_pf_jetGenEMF" ,
"Gen Jet EMF", 200, 0, 1) ;
332 hists[
"hist_pf_jetEoverGenE" ] = theDir.make<TH1D>(
"hist_pf_jetEoverGenE" ,
"Energy of reco Jet / Energy of gen Jet", 200, 0, 2.0) ;
333 hists[
"hist_pf_jetCorr" ] = theDir.make<TH1D>(
"hist_pf_jetCorr" ,
"PFJet Correction Factor", 200, 0, 1.0 ) ;
334 hists[
"hist_pf_nConstituents" ] = theDir.make<TH1D>(
"hist_pf_nConstituents" ,
"PFJet nConstituents", 20, 0, 20 ) ;
336 hists[
"hist_pf_good_jetPt" ] = theDir.make<TH1D>(
"hist_pf_good_jetPt" ,
"PFJet p_{T}", 400, 0, 400 ) ;
337 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() ) ;
338 hists[
"hist_pf_good_jetNTracks" ] = theDir.make<TH1D>(
"hist_pf_good_jetNTracks" ,
"PFJet N_{TRACKS}", 20, 0, 20 ) ;
339 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 ) ;
340 hists[
"hist_pf_good_jetEMF" ] = theDir.make<TH1D>(
"hist_pf_good_jetEMF" ,
"PFJet EMF", 200, 0, 1) ;
341 hists[
"hist_pf_good_jetCHF" ] = theDir.make<TH1D>(
"hist_pf_good_jetCHF" ,
"PFJet CHF", 200, 0, 1) ;
342 hists[
"hist_pf_good_jetNHF" ] = theDir.make<TH1D>(
"hist_pf_good_jetNHF" ,
"PFJet NHF", 200, 0, 1) ;
343 hists[
"hist_pf_good_jetCEF" ] = theDir.make<TH1D>(
"hist_pf_good_jetCEF" ,
"PFJet CEF", 200, 0, 1) ;
344 hists[
"hist_pf_good_jetNEF" ] = theDir.make<TH1D>(
"hist_pf_good_jetNEF" ,
"PFJet NEF", 200, 0, 1) ;
345 hists[
"hist_pf_good_jetPdgID" ] = theDir.make<TH1D>(
"hist_pf_good_jetPdgID" ,
"PDG Id of Jet Constituents", 10000, 0, 10000 ) ;
346 hists[
"hist_pf_good_jetGenEmE" ] = theDir.make<TH1D>(
"hist_pf_good_jetGenEmE" ,
"Gen Jet EM Energy", 200, 0, 200 ) ;
347 hists[
"hist_pf_good_jetGenHadE" ] = theDir.make<TH1D>(
"hist_pf_good_jetGenHadE" ,
"Gen Jet HAD Energy", 200, 0, 200 ) ;
348 hists[
"hist_pf_good_jetGenEMF" ] = theDir.make<TH1D>(
"hist_pf_good_jetGenEMF" ,
"Gen Jet EMF", 200, 0, 1) ;
349 hists[
"hist_pf_good_jetEoverGenE" ] = theDir.make<TH1D>(
"hist_pf_good_jetEoverGenE" ,
"Energy of reco Jet / Energy of gen Jet", 200, 0, 2.0) ;
350 hists[
"hist_pf_good_jetCorr" ] = theDir.make<TH1D>(
"hist_pf_good_jetCorr" ,
"PFJet Correction Factor", 200, 0, 1.0 ) ;
351 hists[
"hist_pf_good_nConstituents" ] = theDir.make<TH1D>(
"hist_pf_good_nConstituents" ,
"PFJet nConstituents", 20, 0, 20 ) ;
353 hists[
"hist_mjj" ] = theDir.make<TH1D>(
"hist_mjj" ,
"Dijet mass", 300, 0, 300 ) ;
354 hists[
"hist_dR_jj" ] = theDir.make<TH1D>(
"hist_dR_jj" ,
"#Delta R_{JJ}", 200, 0,
TMath::TwoPi() ) ;
355 hists[
"hist_imbalance_jj" ] = theDir.make<TH1D>(
"hist_imbalance_jj" ,
"Dijet imbalance", 200, -1.0, 1.0 ) ;
357 hists[
"hist_pf_mjj" ] = theDir.make<TH1D>(
"hist_pf_mjj" ,
"Dijet mass", 300, 0, 300 ) ;
358 hists[
"hist_pf_dR_jj" ] = theDir.make<TH1D>(
"hist_pf_dR_jj" ,
"#Delta R_{JJ}", 200, 0,
TMath::TwoPi() ) ;
359 hists[
"hist_pf_imbalance_jj" ] = theDir.make<TH1D>(
"hist_pf_imbalance_jj" ,
"Dijet imbalance", 200, -1.0, 1.0 ) ;
363 cout <<
"Making functors" << endl;
370 pfJetStudiesParams );
372 bool doTracks = plotParameters.getParameter<
bool>(
"doTracks");
373 bool useMC = plotParameters.getParameter<
bool>(
"useMC");
375 cout <<
"About to begin looping" << endl;
379 for (
ev.toBegin(); !
ev.atEnd(); ++
ev, ++nev) {
384 if ( runLumiSel(
ev) ==
false )
continue;
386 if ( nev % 100 == 0 )
cout <<
"Processing run " <<
event.id().run() <<
", lumi " <<
event.id().luminosityBlock() <<
", event " <<
event.id().event() << endl;
392 caloSelector(
event, retCalo );
396 pfSelector(
event, retPF );
401 if ( retCalo.
test( caloSelector.caloKin() ) ) {
402 if ( retCalo.
test( caloSelector.caloDeltaPhi() ) ) {
403 vector<pat::Jet>
const & allCaloJets = caloSelector.allCaloJets();
405 for ( std::vector<pat::Jet>::const_iterator jetBegin = allCaloJets.begin(),
406 jetEnd = jetBegin + 2, ijet = jetBegin;
407 ijet != jetEnd; ++ijet ) {
411 double pt = jet.
pt();
415 hists[
"hist_jetPt"]->Fill( pt );
416 hists[
"hist_jetEtaVsPhi"]->Fill( jet.
eta(), jet.
phi() );
417 hists[
"hist_jetNTracks"]->Fill( jetTracks.
size() );
418 hists[
"hist_jetNTracksVsPt"]->Fill( pt, jetTracks.
size() );
420 hists[
"hist_jetCorr"]->Fill( jet.
jecFactor(
"Uncorrected") );
421 hists[
"hist_n90Hits"]->Fill( static_cast<int>(jet.
jetID().
n90Hits) );
422 hists[
"hist_fHPD"]->Fill( jet.
jetID().
fHPD );
425 if ( useMC && jet.
genJet() != 0 ) {
432 TLorentzVector p4_tracks(0,0,0,0);
434 itrkEnd = jetTracks.
end();
435 itrk != itrkEnd; ++itrk ) {
436 TLorentzVector p4_trk;
437 double M_PION = 0.140;
438 p4_trk.SetPtEtaPhiM( (*itrk)->pt(), (*itrk)->eta(), (*itrk)->phi(), M_PION );
441 hists[
"hist_jetCHF"]->Fill( p4_tracks.Energy() / jet.
energy() );
449 if ( retCalo.
test( caloSelector.caloJetID() ) ) {
450 pat::Jet const & jet0 = caloSelector.caloJet0();
451 pat::Jet const & jet1 = caloSelector.caloJet1();
453 TLorentzVector p4_j0( jet0.
px(), jet0.
py(), jet0.
pz(), jet0.
energy() );
454 TLorentzVector p4_j1( jet1.
px(), jet1.
py(), jet1.
pz(), jet1.
energy() );
456 TLorentzVector p4_jj = p4_j0 + p4_j1;
458 hists[
"hist_mjj"]->Fill( p4_jj.M() );
459 hists[
"hist_dR_jj"]->Fill( p4_j0.DeltaR( p4_j1 ) );
460 hists[
"hist_imbalance_jj"]->Fill( (p4_j0.Perp() - p4_j1.Perp() ) /
461 (p4_j0.Perp() + p4_j1.Perp() ) );
463 hists[
"hist_good_jetPt"]->Fill( jet0.
pt() );
464 hists[
"hist_good_jetEtaVsPhi"]->Fill( jet0.
eta(), jet0.
phi() );
468 hists[
"hist_good_jetCorr"]->Fill( jet0.
jecFactor(
"Uncorrected") );
469 hists[
"hist_good_n90Hits"]->Fill( static_cast<int>(jet0.
jetID().
n90Hits) );
470 hists[
"hist_good_fHPD"]->Fill( jet0.
jetID().
fHPD );
471 hists[
"hist_good_nConstituents"]->Fill( jet0.
nConstituents() );
474 hists[
"hist_good_jetPt"]->Fill( jet1.
pt() );
475 hists[
"hist_good_jetEtaVsPhi"]->Fill( jet1.
eta(), jet1.
phi() );
479 hists[
"hist_good_jetCorr"]->Fill( jet1.
jecFactor(
"Uncorrected") );
480 hists[
"hist_good_n90Hits"]->Fill( static_cast<int>(jet1.
jetID().
n90Hits) );
481 hists[
"hist_good_fHPD"]->Fill( jet1.
jetID().
fHPD );
482 hists[
"hist_good_nConstituents"]->Fill( jet1.
nConstituents() );
492 if ( retPF.
test( pfSelector.pfDeltaPhi() ) ) {
494 vector<pat::Jet>
const & allPFJets = pfSelector.allPFJets();
496 for ( std::vector<pat::Jet>::const_iterator jetBegin = allPFJets.begin(),
497 jetEnd = jetBegin + 2, ijet = jetBegin;
498 ijet != jetEnd; ++ijet ) {
502 double pt = jet.
pt();
504 hists[
"hist_pf_jetPt"]->Fill( pt );
505 hists[
"hist_pf_jetEtaVsPhi"]->Fill( jet.
eta(), jet.
phi() );
513 if ( useMC && jet.
genJet() != 0 ) {
525 if ( retPF.
test( pfSelector.pfJetID() ) ) {
526 pat::Jet const & jet0 = pfSelector.pfJet0();
527 pat::Jet const & jet1 = pfSelector.pfJet1();
529 TLorentzVector p4_j0( jet0.
px(), jet0.
py(), jet0.
pz(), jet0.
energy() );
530 TLorentzVector p4_j1( jet1.
px(), jet1.
py(), jet1.
pz(), jet1.
energy() );
532 TLorentzVector p4_jj = p4_j0 + p4_j1;
534 hists[
"hist_pf_mjj"]->Fill( p4_jj.M() );
535 hists[
"hist_pf_dR_jj"]->Fill( p4_j0.DeltaR( p4_j1 ) );
536 hists[
"hist_pf_imbalance_jj"]->Fill( (p4_j0.Perp() - p4_j1.Perp() ) /
537 (p4_j0.Perp() + p4_j1.Perp() ) );
539 hists[
"hist_pf_good_jetPt"]->Fill( jet0.
pt() );
540 hists[
"hist_pf_good_jetEtaVsPhi"]->Fill( jet0.
eta(), jet0.
phi() );
541 hists[
"hist_pf_good_nConstituents"]->Fill( jet0.
nConstituents() );
548 hists[
"hist_pf_good_jetPt"]->Fill( jet1.
pt() );
549 hists[
"hist_pf_good_jetEtaVsPhi"]->Fill( jet1.
eta(), jet1.
phi() );
550 hists[
"hist_pf_good_nConstituents"]->Fill( jet1.
nConstituents() );
562 cout <<
"Calo jet selection" << endl;
564 cout <<
"PF jet selection" << endl;
T getParameter(std::string const &) const
float jecFactor(const std::string &level, const std::string &flavor="none", const std::string &set="") const
float neutralHadronEnergyFraction() const
neutralHadronEnergyFraction (relative to uncorrected jet energy)
virtual float pt() const
transverse momentum
const reco::GenJet * genJet() const
return the matched generated jet
float chargedHadronEnergyFraction() const
chargedHadronEnergyFraction (relative to uncorrected jet energy)
virtual float phi() const
momentum azimuthal angle
float chargedEmEnergyFraction() const
chargedEmEnergyFraction (relative to uncorrected jet energy)
const reco::TrackRefVector & associatedTracks() const
method to return a vector of refs to the tracks associated to this jet
const_iterator end() const
Termination of iteration.
const_iterator begin() const
Initialize an iterator over the RefVector.
virtual double energy() const
energy
virtual float eta() const
momentum pseudorapidity
T * make(const Args &...args) const
make new ROOT object
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
float emEnergyFraction() const
returns the jet electromagnetic energy fraction
reco::JetID const & jetID() const
accessing Jet ID information
virtual double px() const
x coordinate of momentum vector
TFileDirectory mkdir(const std::string &dir, const std::string &descr="")
create a new subdirectory
Analysis-level calorimeter jet class.
virtual double pz() const
z coordinate of momentum vector
bool test(std::string s) const
test
virtual int nConstituents() const
of constituents
size_type size() const
Size of the RefVector.
static void enable()
enable automatic library loading
float neutralEmEnergyFraction() const
neutralEmEnergyFraction (relative to uncorrected jet energy)
volatile std::atomic< bool > shutdown_flag false
virtual double py() const
y coordinate of momentum vector