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_;