From 814307ad815bac3f14b71be8ddb1c3044d304436 Mon Sep 17 00:00:00 2001 From: Salvatore Rappoccio Date: Thu, 29 Jan 2015 20:57:06 -0600 Subject: [PATCH 1/3] Adding a bunch of changes necessary to run jet reco properly on miniAOD --- CommonTools/RecoAlgos/plugins/BuildFile.xml | 1 + .../plugins/JetConstituentSelector.cc | 10 ++++-- .../PatCandidates/src/classes_def_objects.xml | 6 ++++ .../PatCandidates/src/classes_objects.h | 6 ++++ DataFormats/PatCandidates/src/classes_user.h | 1 + .../plugins/VirtualJetProducer.cc | 33 ++++++++++++++----- .../JetProducers/plugins/VirtualJetProducer.h | 2 +- 7 files changed, 46 insertions(+), 13 deletions(-) diff --git a/CommonTools/RecoAlgos/plugins/BuildFile.xml b/CommonTools/RecoAlgos/plugins/BuildFile.xml index 649d4d1bb7269..97a4503b75537 100644 --- a/CommonTools/RecoAlgos/plugins/BuildFile.xml +++ b/CommonTools/RecoAlgos/plugins/BuildFile.xml @@ -10,6 +10,7 @@ + diff --git a/CommonTools/RecoAlgos/plugins/JetConstituentSelector.cc b/CommonTools/RecoAlgos/plugins/JetConstituentSelector.cc index 9de2801f866e1..4a4662fd04187 100644 --- a/CommonTools/RecoAlgos/plugins/JetConstituentSelector.cc +++ b/CommonTools/RecoAlgos/plugins/JetConstituentSelector.cc @@ -20,19 +20,21 @@ #include "DataFormats/JetReco/interface/Jet.h" #include "DataFormats/JetReco/interface/PFJet.h" +#include "DataFormats/PatCandidates/interface/Jet.h" +#include "DataFormats/PatCandidates/interface/PackedCandidate.h" #include "DataFormats/JetReco/interface/CaloJet.h" #include "FWCore/Framework/interface/MakerMacros.h" #include "CommonTools/UtilAlgos/interface/StringCutObjectSelector.h" #include "FWCore/Framework/interface/Event.h" -template < class T > +template < class T, typename C = std::vector > class JetConstituentSelector : public edm::EDFilter { public: typedef std::vector JetsOutput; - typedef std::vector ConstituentsOutput; + typedef C ConstituentsOutput; JetConstituentSelector ( edm::ParameterSet const & params ) : srcToken_( consumes< typename edm::View >( params.getParameter("src") ) ), @@ -67,7 +69,7 @@ class JetConstituentSelector : public edm::EDFilter { // Add the jets that pass to the output collection jets->push_back( *ijet ); for ( unsigned int ida = 0; ida < ijet->numberOfDaughters(); ++ida ) { - candsOut->push_back( typename ConstituentsOutput::value_type( ijet->getPFConstituent(ida), ijet->getPFConstituent(ida) ) ); + candsOut->push_back( typename ConstituentsOutput::value_type( ijet->daughterPtr(ida), ijet->daughterPtr(ida) ) ); } } } @@ -93,5 +95,7 @@ class JetConstituentSelector : public edm::EDFilter { }; typedef JetConstituentSelector PFJetConstituentSelector; +typedef JetConstituentSelector > > PatJetConstituentSelector; DEFINE_FWK_MODULE( PFJetConstituentSelector ); +DEFINE_FWK_MODULE( PatJetConstituentSelector ); diff --git a/DataFormats/PatCandidates/src/classes_def_objects.xml b/DataFormats/PatCandidates/src/classes_def_objects.xml index 787de4a6db6f7..42dca437779ef 100644 --- a/DataFormats/PatCandidates/src/classes_def_objects.xml +++ b/DataFormats/PatCandidates/src/classes_def_objects.xml @@ -223,6 +223,12 @@ + + + + + + diff --git a/DataFormats/PatCandidates/src/classes_objects.h b/DataFormats/PatCandidates/src/classes_objects.h index 084c78f44e021..f43ffe4c23bc5 100644 --- a/DataFormats/PatCandidates/src/classes_objects.h +++ b/DataFormats/PatCandidates/src/classes_objects.h @@ -2,6 +2,7 @@ #include "DataFormats/Common/interface/Association.h" #include "DataFormats/Common/interface/Wrapper.h" #include "DataFormats/Common/interface/PtrVector.h" +#include "DataFormats/Common/interface/FwdPtr.h" #include "DataFormats/PatCandidates/interface/Electron.h" #include "DataFormats/PatCandidates/interface/Muon.h" @@ -165,6 +166,11 @@ namespace DataFormats_PatCandidates { edm::Ptr ptr_Muon; edm::Ptr ptr_Tau; + edm::FwdPtr fwdptr_pc; + edm::Wrapper< edm::FwdPtr > w_fwdptr_pc; + std::vector< edm::FwdPtr > v_fwdptr_pc; + edm::Wrapper< std::vector< edm::FwdPtr > > wv_fwdptr_pc; + edm::Wrapper > w_asso_pc; edm::Wrapper > w_asso_pfc; edm::Wrapper > > asso_pgp; diff --git a/DataFormats/PatCandidates/src/classes_user.h b/DataFormats/PatCandidates/src/classes_user.h index 5c286c084f560..d441234c045e8 100644 --- a/DataFormats/PatCandidates/src/classes_user.h +++ b/DataFormats/PatCandidates/src/classes_user.h @@ -34,6 +34,7 @@ namespace DataFormats_PatCandidates { pat::UserHolder p_udh_vec_5; pat::UserHolder p_udh_tk; pat::UserHolder p_udh_vtx; + pat::UserHolder > p_udh_vunit; }; diff --git a/RecoJets/JetProducers/plugins/VirtualJetProducer.cc b/RecoJets/JetProducers/plugins/VirtualJetProducer.cc index ff35fdf890f83..64b1775a4961e 100644 --- a/RecoJets/JetProducers/plugins/VirtualJetProducer.cc +++ b/RecoJets/JetProducers/plugins/VirtualJetProducer.cc @@ -33,6 +33,7 @@ #include "DataFormats/Candidate/interface/LeafCandidate.h" #include "DataFormats/Math/interface/deltaR.h" #include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h" +#include "DataFormats/PatCandidates/interface/PackedCandidate.h" #include "fastjet/SISConePlugin.hh" #include "fastjet/CMSIterativeConePlugin.hh" @@ -281,7 +282,7 @@ VirtualJetProducer::VirtualJetProducer(const edm::ParameterSet& iConfig) if (!srcPVs_.label().empty()) input_vertex_token_ = consumes(srcPVs_); input_candidateview_token_ = consumes(src_); - input_candidatefwdptr_token_ = consumes > >(src_); + input_candidatefwdptr_token_ = consumes > >(src_); } @@ -339,7 +340,8 @@ void VirtualJetProducer::produce(edm::Event& iEvent,const edm::EventSetup& iSetu // get inputs and convert them to the fastjet format (fastjet::PeudoJet) edm::Handle inputsHandle; - edm::Handle< std::vector > > pfinputsHandleAsFwdPtr; + edm::Handle< std::vector > > pfinputsHandleAsFwdPtr; + // edm::Handle< std::vector > > patinputsHandleAsFwdPtr; bool isView = iEvent.getByToken(input_candidateview_token_, inputsHandle); if ( isView ) { @@ -347,15 +349,28 @@ void VirtualJetProducer::produce(edm::Event& iEvent,const edm::EventSetup& iSetu inputs_.push_back(inputsHandle->ptrAt(i)); } } else { - iEvent.getByToken(input_candidatefwdptr_token_, pfinputsHandleAsFwdPtr); - for (size_t i = 0; i < pfinputsHandleAsFwdPtr->size(); ++i) { - if ( (*pfinputsHandleAsFwdPtr)[i].ptr().isAvailable() ) { - inputs_.push_back( (*pfinputsHandleAsFwdPtr)[i].ptr() ); - } - else if ( (*pfinputsHandleAsFwdPtr)[i].backPtr().isAvailable() ) { - inputs_.push_back( (*pfinputsHandleAsFwdPtr)[i].backPtr() ); + bool isPF = iEvent.getByToken(input_candidatefwdptr_token_, pfinputsHandleAsFwdPtr); + if ( isPF ) { + for (size_t i = 0; i < pfinputsHandleAsFwdPtr->size(); ++i) { + if ( (*pfinputsHandleAsFwdPtr)[i].ptr().isAvailable() ) { + inputs_.push_back( (*pfinputsHandleAsFwdPtr)[i].ptr() ); + } + else if ( (*pfinputsHandleAsFwdPtr)[i].backPtr().isAvailable() ) { + inputs_.push_back( (*pfinputsHandleAsFwdPtr)[i].backPtr() ); + } } } + // else { + // iEvent.getByToken(input_candidatefwdptr_token_, patinputsHandleAsFwdPtr); + // for (size_t i = 0; i < patinputsHandleAsFwdPtr->size(); ++i) { + // if ( (*patinputsHandleAsFwdPtr)[i].ptr().isAvailable() ) { + // inputs_.push_back( (*patinputsHandleAsFwdPtr)[i].ptr() ); + // } + // else if ( (*patinputsHandleAsFwdPtr)[i].backPtr().isAvailable() ) { + // inputs_.push_back( (*patinputsHandleAsFwdPtr)[i].backPtr() ); + // } + // } + // } } LogDebug("VirtualJetProducer") << "Got inputs\n"; diff --git a/RecoJets/JetProducers/plugins/VirtualJetProducer.h b/RecoJets/JetProducers/plugins/VirtualJetProducer.h index 8838f38e728d3..b8ca4ffdb3001 100644 --- a/RecoJets/JetProducers/plugins/VirtualJetProducer.h +++ b/RecoJets/JetProducers/plugins/VirtualJetProducer.h @@ -207,7 +207,7 @@ class dso_hidden VirtualJetProducer : public edm::stream::EDProducer<> // tokens for the data access edm::EDGetTokenT input_candidateview_token_; - edm::EDGetTokenT > > input_candidatefwdptr_token_; + edm::EDGetTokenT > > input_candidatefwdptr_token_; protected: edm::EDGetTokenT input_vertex_token_; From 94950a517a14701a2e1b8344b14af5b54e45be68 Mon Sep 17 00:00:00 2001 From: Salvatore Rappoccio Date: Tue, 3 Feb 2015 09:41:08 -0600 Subject: [PATCH 2/3] Reverting changes, it seems the FwdPtr logic is not correctly choosing PFCandidates when appropriate --- .../plugins/VirtualJetProducer.cc | 33 +++++-------------- .../JetProducers/plugins/VirtualJetProducer.h | 2 +- 2 files changed, 10 insertions(+), 25 deletions(-) diff --git a/RecoJets/JetProducers/plugins/VirtualJetProducer.cc b/RecoJets/JetProducers/plugins/VirtualJetProducer.cc index 64b1775a4961e..ff35fdf890f83 100644 --- a/RecoJets/JetProducers/plugins/VirtualJetProducer.cc +++ b/RecoJets/JetProducers/plugins/VirtualJetProducer.cc @@ -33,7 +33,6 @@ #include "DataFormats/Candidate/interface/LeafCandidate.h" #include "DataFormats/Math/interface/deltaR.h" #include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h" -#include "DataFormats/PatCandidates/interface/PackedCandidate.h" #include "fastjet/SISConePlugin.hh" #include "fastjet/CMSIterativeConePlugin.hh" @@ -282,7 +281,7 @@ VirtualJetProducer::VirtualJetProducer(const edm::ParameterSet& iConfig) if (!srcPVs_.label().empty()) input_vertex_token_ = consumes(srcPVs_); input_candidateview_token_ = consumes(src_); - input_candidatefwdptr_token_ = consumes > >(src_); + input_candidatefwdptr_token_ = consumes > >(src_); } @@ -340,8 +339,7 @@ void VirtualJetProducer::produce(edm::Event& iEvent,const edm::EventSetup& iSetu // get inputs and convert them to the fastjet format (fastjet::PeudoJet) edm::Handle inputsHandle; - edm::Handle< std::vector > > pfinputsHandleAsFwdPtr; - // edm::Handle< std::vector > > patinputsHandleAsFwdPtr; + edm::Handle< std::vector > > pfinputsHandleAsFwdPtr; bool isView = iEvent.getByToken(input_candidateview_token_, inputsHandle); if ( isView ) { @@ -349,28 +347,15 @@ void VirtualJetProducer::produce(edm::Event& iEvent,const edm::EventSetup& iSetu inputs_.push_back(inputsHandle->ptrAt(i)); } } else { - bool isPF = iEvent.getByToken(input_candidatefwdptr_token_, pfinputsHandleAsFwdPtr); - if ( isPF ) { - for (size_t i = 0; i < pfinputsHandleAsFwdPtr->size(); ++i) { - if ( (*pfinputsHandleAsFwdPtr)[i].ptr().isAvailable() ) { - inputs_.push_back( (*pfinputsHandleAsFwdPtr)[i].ptr() ); - } - else if ( (*pfinputsHandleAsFwdPtr)[i].backPtr().isAvailable() ) { - inputs_.push_back( (*pfinputsHandleAsFwdPtr)[i].backPtr() ); - } + iEvent.getByToken(input_candidatefwdptr_token_, pfinputsHandleAsFwdPtr); + for (size_t i = 0; i < pfinputsHandleAsFwdPtr->size(); ++i) { + if ( (*pfinputsHandleAsFwdPtr)[i].ptr().isAvailable() ) { + inputs_.push_back( (*pfinputsHandleAsFwdPtr)[i].ptr() ); + } + else if ( (*pfinputsHandleAsFwdPtr)[i].backPtr().isAvailable() ) { + inputs_.push_back( (*pfinputsHandleAsFwdPtr)[i].backPtr() ); } } - // else { - // iEvent.getByToken(input_candidatefwdptr_token_, patinputsHandleAsFwdPtr); - // for (size_t i = 0; i < patinputsHandleAsFwdPtr->size(); ++i) { - // if ( (*patinputsHandleAsFwdPtr)[i].ptr().isAvailable() ) { - // inputs_.push_back( (*patinputsHandleAsFwdPtr)[i].ptr() ); - // } - // else if ( (*patinputsHandleAsFwdPtr)[i].backPtr().isAvailable() ) { - // inputs_.push_back( (*patinputsHandleAsFwdPtr)[i].backPtr() ); - // } - // } - // } } LogDebug("VirtualJetProducer") << "Got inputs\n"; diff --git a/RecoJets/JetProducers/plugins/VirtualJetProducer.h b/RecoJets/JetProducers/plugins/VirtualJetProducer.h index b8ca4ffdb3001..8838f38e728d3 100644 --- a/RecoJets/JetProducers/plugins/VirtualJetProducer.h +++ b/RecoJets/JetProducers/plugins/VirtualJetProducer.h @@ -207,7 +207,7 @@ class dso_hidden VirtualJetProducer : public edm::stream::EDProducer<> // tokens for the data access edm::EDGetTokenT input_candidateview_token_; - edm::EDGetTokenT > > input_candidatefwdptr_token_; + edm::EDGetTokenT > > input_candidatefwdptr_token_; protected: edm::EDGetTokenT input_vertex_token_; From f5ef097ec2e7fbafd1845297708ef74e42b4628d Mon Sep 17 00:00:00 2001 From: Salvatore Rappoccio Date: Tue, 3 Feb 2015 13:44:47 -0600 Subject: [PATCH 3/3] Explicitly separating PFCandidate and packedCandidate in VirtualJetProducer, I think the framework had trouble figuring out which was which. --- .../plugins/JetConstituentSelector.cc | 2 ++ .../plugins/VirtualJetProducer.cc | 26 ++++++++++++++----- .../JetProducers/plugins/VirtualJetProducer.h | 2 ++ 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/CommonTools/RecoAlgos/plugins/JetConstituentSelector.cc b/CommonTools/RecoAlgos/plugins/JetConstituentSelector.cc index 4a4662fd04187..28322a4e3a652 100644 --- a/CommonTools/RecoAlgos/plugins/JetConstituentSelector.cc +++ b/CommonTools/RecoAlgos/plugins/JetConstituentSelector.cc @@ -96,6 +96,8 @@ class JetConstituentSelector : public edm::EDFilter { typedef JetConstituentSelector PFJetConstituentSelector; typedef JetConstituentSelector > > PatJetConstituentSelector; +typedef JetConstituentSelector > > MiniAODJetConstituentSelector; DEFINE_FWK_MODULE( PFJetConstituentSelector ); DEFINE_FWK_MODULE( PatJetConstituentSelector ); +DEFINE_FWK_MODULE( MiniAODJetConstituentSelector ); diff --git a/RecoJets/JetProducers/plugins/VirtualJetProducer.cc b/RecoJets/JetProducers/plugins/VirtualJetProducer.cc index ff35fdf890f83..c7d1c576b8253 100644 --- a/RecoJets/JetProducers/plugins/VirtualJetProducer.cc +++ b/RecoJets/JetProducers/plugins/VirtualJetProducer.cc @@ -282,6 +282,7 @@ VirtualJetProducer::VirtualJetProducer(const edm::ParameterSet& iConfig) if (!srcPVs_.label().empty()) input_vertex_token_ = consumes(srcPVs_); input_candidateview_token_ = consumes(src_); input_candidatefwdptr_token_ = consumes > >(src_); + input_packedcandidatefwdptr_token_ = consumes > >(src_); } @@ -340,6 +341,7 @@ void VirtualJetProducer::produce(edm::Event& iEvent,const edm::EventSetup& iSetu edm::Handle inputsHandle; edm::Handle< std::vector > > pfinputsHandleAsFwdPtr; + edm::Handle< std::vector > > packedinputsHandleAsFwdPtr; bool isView = iEvent.getByToken(input_candidateview_token_, inputsHandle); if ( isView ) { @@ -347,13 +349,25 @@ void VirtualJetProducer::produce(edm::Event& iEvent,const edm::EventSetup& iSetu inputs_.push_back(inputsHandle->ptrAt(i)); } } else { - iEvent.getByToken(input_candidatefwdptr_token_, pfinputsHandleAsFwdPtr); - for (size_t i = 0; i < pfinputsHandleAsFwdPtr->size(); ++i) { - if ( (*pfinputsHandleAsFwdPtr)[i].ptr().isAvailable() ) { - inputs_.push_back( (*pfinputsHandleAsFwdPtr)[i].ptr() ); + bool isPF = iEvent.getByToken(input_candidatefwdptr_token_, pfinputsHandleAsFwdPtr); + if ( isPF ) { + for (size_t i = 0; i < pfinputsHandleAsFwdPtr->size(); ++i) { + if ( (*pfinputsHandleAsFwdPtr)[i].ptr().isAvailable() ) { + inputs_.push_back( (*pfinputsHandleAsFwdPtr)[i].ptr() ); + } + else if ( (*pfinputsHandleAsFwdPtr)[i].backPtr().isAvailable() ) { + inputs_.push_back( (*pfinputsHandleAsFwdPtr)[i].backPtr() ); + } } - else if ( (*pfinputsHandleAsFwdPtr)[i].backPtr().isAvailable() ) { - inputs_.push_back( (*pfinputsHandleAsFwdPtr)[i].backPtr() ); + } else { + iEvent.getByToken(input_packedcandidatefwdptr_token_, packedinputsHandleAsFwdPtr); + for (size_t i = 0; i < packedinputsHandleAsFwdPtr->size(); ++i) { + if ( (*packedinputsHandleAsFwdPtr)[i].ptr().isAvailable() ) { + inputs_.push_back( (*packedinputsHandleAsFwdPtr)[i].ptr() ); + } + else if ( (*packedinputsHandleAsFwdPtr)[i].backPtr().isAvailable() ) { + inputs_.push_back( (*packedinputsHandleAsFwdPtr)[i].backPtr() ); + } } } } diff --git a/RecoJets/JetProducers/plugins/VirtualJetProducer.h b/RecoJets/JetProducers/plugins/VirtualJetProducer.h index 8838f38e728d3..ab05be24ebca7 100644 --- a/RecoJets/JetProducers/plugins/VirtualJetProducer.h +++ b/RecoJets/JetProducers/plugins/VirtualJetProducer.h @@ -12,6 +12,7 @@ #include "DataFormats/JetReco/interface/PFJet.h" #include "DataFormats/JetReco/interface/BasicJet.h" #include "DataFormats/JetReco/interface/GenJet.h" +#include "DataFormats/PatCandidates/interface/PackedCandidate.h" #include "RecoJets/JetProducers/interface/PileUpSubtractor.h" #include "RecoJets/JetProducers/interface/AnomalousTower.h" @@ -208,6 +209,7 @@ class dso_hidden VirtualJetProducer : public edm::stream::EDProducer<> // tokens for the data access edm::EDGetTokenT input_candidateview_token_; edm::EDGetTokenT > > input_candidatefwdptr_token_; + edm::EDGetTokenT > > input_packedcandidatefwdptr_token_; protected: edm::EDGetTokenT input_vertex_token_;