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..28322a4e3a652 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,9 @@ 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/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..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_;