18
18
#include < cassert>
19
19
#include < TLorentzVector.h>
20
20
21
- #include " cms-opendata-2011-jets/AnalysisFW/plugins/ OpenDataTreeProducerOptimized.h"
21
+ #include " OpenDataTreeProducerOptimized.h"
22
22
#include " FWCore/Framework/interface/EventSetup.h"
23
23
#include " FWCore/Framework/interface/ESHandle.h"
24
24
#include " FWCore/Framework/interface/Frameworkfwd.h"
49
49
#include " CondFormats/JetMETObjects/interface/JetCorrectorParameters.h"
50
50
#include " JetMETCorrections/Objects/interface/JetCorrectionsRecord.h"
51
51
52
- #include " DataFormats/JetReco/interface/JetTracksAssociation .h"
52
+ #include " RecoJets/JetAssociationProducers/src/JetTracksAssociatorAtVertex .h"
53
53
54
54
OpenDataTreeProducerOptimized::OpenDataTreeProducerOptimized (edm::ParameterSet const &cfg) {
55
55
mMinPFPt = cfg.getParameter <double > (" minPFPt" );
@@ -273,25 +273,17 @@ void OpenDataTreeProducerOptimized::analyze(edm::Event const &event_obj,
273
273
ngen = gen_index;
274
274
}
275
275
276
+ // Vertex Info
277
+ Handle<reco::VertexCollection> recVtxs;
278
+ event_obj.getByLabel (mOfflineVertices , recVtxs);
276
279
277
- // PF AK5 Jets
278
-
279
- // edm::Handle< std::vector< pat::Jet > > ak5_handle;
280
- // event_obj.getByLabel(mPFak5JetsName, ak5_handle);
281
280
282
- // Copy vector of jets (they are sorted wrt. pT)
283
- // std::vector< pat::Jet > patjets(ak5_handle->begin(), ak5_handle->end());
281
+ // PF AK5 Jets
284
282
285
283
edm::Handle<reco::PFJetCollection> ak5_handle;
286
284
event_obj.getByLabel (mPFak5JetsName , ak5_handle);
287
- edm::Handle <edm::View <reco::Jet> > ak5_handle2;
288
- event_obj.getByLabel (mPFak5JetsName , ak5_handle2);
289
285
const JetCorrector* corrector_ak5 = JetCorrector::getJetCorrector (mJetCorr_ak5 , iSetup);
290
286
291
- // Vertex Info
292
- Handle<reco::VertexCollection> recVtxs;
293
- event_obj.getByLabel (mOfflineVertices , recVtxs);
294
-
295
287
// Jet Track Association (JTA)
296
288
edm::Handle <reco::TrackCollection> tracks_h;
297
289
event_obj.getByLabel (" generalTracks" , tracks_h);
@@ -300,11 +292,14 @@ void OpenDataTreeProducerOptimized::analyze(edm::Event const &event_obj,
300
292
std::vector <edm::RefToBase<reco::Jet> > allJets;
301
293
allJets.reserve (ak5_handle->size ());
302
294
for (unsigned i = 0 ; i < ak5_handle->size (); ++i)
303
- allJets.push_back ((ak5_handle2->refAt (i)));
295
+ {
296
+ edm::RefToBase<reco::Jet> jetRef (edm::Ref<reco::PFJetCollection>(ak5_handle, i));
297
+ allJets.push_back (jetRef);
298
+ }
304
299
std::vector <reco::TrackRef> allTracks;
305
300
allTracks.reserve (tracks_h->size ());
306
301
for (unsigned i = 0 ; i < tracks_h->size (); ++i)
307
- allTracks.push_back (reco::TrackRef (tracks_h, i));
302
+ allTracks.push_back (reco::TrackRef (tracks_h, i));
308
303
// run JTA algorithm
309
304
JetTracksAssociationDRVertex mAssociator (0.5 ); // passed argument: 0.5 cone size
310
305
mAssociator .produce (&*tracksInJets, allJets, allTracks);
@@ -340,8 +335,7 @@ void OpenDataTreeProducerOptimized::analyze(edm::Event const &event_obj,
340
335
const PFJet* i_ak5jet = &corjet;
341
336
342
337
// Skip the current iteration if jet is not selected
343
- if (!i_ak5jet->isPFJet () ||
344
- fabs (i_ak5jet->y ()) > mMaxY ||
338
+ if (fabs (i_ak5jet->y ()) > mMaxY ||
345
339
(i_ak5jet->pt ()) < mMinPFPt ) {
346
340
continue ;
347
341
}
@@ -368,6 +362,7 @@ void OpenDataTreeProducerOptimized::analyze(edm::Event const &event_obj,
368
362
reco::Vertex vertex = (*recVtxs)[ivtx];
369
363
370
364
// Loop over tracks associated with the vertex
365
+ bool flagBreak = false ;
371
366
if (!(vertex.isFake ()) &&
372
367
vertex.ndof () >= mGoodVtxNdof &&
373
368
fabs (vertex.z ()) <= mGoodVtxZ ) {
@@ -384,9 +379,13 @@ void OpenDataTreeProducerOptimized::analyze(edm::Event const &event_obj,
384
379
}
385
380
else {
386
381
sumTrkPtBetaStar += (*i_trk)->pt ();
387
- }
382
+ }
383
+ flagBreak = true ;
384
+ break ;
388
385
}
389
386
}
387
+ if (flagBreak)
388
+ break ;
390
389
}
391
390
}
392
391
}
@@ -431,7 +430,7 @@ void OpenDataTreeProducerOptimized::analyze(edm::Event const &event_obj,
431
430
// Variables of the tuple
432
431
jet_tightID[ak5_index] = tightID;
433
432
jet_area[ak5_index] = i_ak5jet->jetArea ();
434
- jet_jes[ak5_index] = 1 /i_ak5jet-> jecFactor ( 0 ) ; // JEC factor (pfjet is already corrected !!)
433
+ jet_jes[ak5_index] = jec ; // JEC factor
435
434
436
435
// p4 is already corrected!
437
436
auto p4 = i_ak5jet->p4 ();
@@ -468,8 +467,13 @@ void OpenDataTreeProducerOptimized::analyze(edm::Event const &event_obj,
468
467
469
468
470
469
// Four leading AK7 Jets
471
- edm::Handle< std::vector< pat::Jet > > ak7_handle;
470
+
471
+ edm::Handle<reco::PFJetCollection> ak7_handle;
472
472
event_obj.getByLabel (mPFak7JetsName , ak7_handle);
473
+ const JetCorrector* corrector_ak7 = JetCorrector::getJetCorrector (mJetCorr_ak7 , iSetup);
474
+
475
+ // Index of the selected jet
476
+ int ak7_index = 0 ;
473
477
474
478
// Jets will be unsorted in pT after applying JEC,
475
479
// therefore store corrected jets in a new collection (map): key (double) is pT * -1 (key),
@@ -496,15 +500,14 @@ void OpenDataTreeProducerOptimized::analyze(edm::Event const &event_obj,
496
500
const PFJet* i_ak7jet = &corjet;
497
501
498
502
// Skip the current iteration if jet is not selected
499
- if (!i_ak7jet->isPFJet () ||
500
- fabs (i_ak7jet->y ()) > mMaxY ||
503
+ if (fabs (i_ak7jet->y ()) > mMaxY ||
501
504
(i_ak7jet->pt ()) < mMinPFPt ) {
502
505
continue ;
503
506
}
504
507
505
508
// Variables of the tuple
506
509
jet_area_ak7[ak7_index] = i_ak7jet->jetArea ();
507
- jet_jes_ak7[ak7_index] = 1 /i_ak7jet-> jecFactor ( 0 ) ; // JEC factor (pfjet is already corrected !!)
510
+ jet_jes_ak7[ak7_index] = jec ; // JEC factor
508
511
509
512
// p4 is already corrected!
510
513
auto p4 = i_ak7jet->p4 ();
0 commit comments