Skip to content

Commit deedc43

Browse files
committed
Merged from1510pre6_miniFromMiniSetup_v2 from repository nurfikri89 with cms-merge-topic
2 parents dd7156a + 1ba913b commit deedc43

14 files changed

+1001
-27
lines changed

DataFormats/PatCandidates/interface/Electron.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ namespace reco {
4747
// Class definition
4848
namespace pat {
4949
class PATElectronSlimmer;
50+
class PATElectronCandidatesRekeyer;
5051

5152
class Electron : public Lepton<reco::GsfElectron> {
5253
public:
@@ -269,6 +270,7 @@ namespace pat {
269270
}
270271

271272
friend class PATElectronSlimmer;
273+
friend class PATElectronCandidatesRekeyer;
272274

273275
protected:
274276
/// init impact parameter defaults (for use in a constructor)

DataFormats/PatCandidates/interface/Muon.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ namespace reco {
4747
namespace pat {
4848

4949
class PATMuonSlimmer;
50+
class PATMuonCandidatesRekeyer;
5051

5152
class Muon : public Lepton<reco::Muon> {
5253
public:
@@ -272,6 +273,7 @@ namespace pat {
272273
friend std::ostream& reco::operator<<(std::ostream& out, const pat::Muon& obj);
273274

274275
friend class PATMuonSlimmer;
276+
friend class PATMuonCandidatesRekeyer;
275277

276278
float pfEcalEnergy() const { return pfEcalEnergy_; }
277279
void setPfEcalEnergy(float pfEcalEnergy) { pfEcalEnergy_ = pfEcalEnergy; }

DataFormats/PatCandidates/interface/Photon.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ namespace reco {
4242
// Class definition
4343
namespace pat {
4444
class PATPhotonSlimmer;
45+
class PATPhotonCandidatesRekeyer;
4546

4647
class Photon : public PATObject<reco::Photon> {
4748
public:
@@ -328,6 +329,7 @@ namespace pat {
328329
reco::CandidatePtr sourceCandidatePtr(size_type i) const override;
329330

330331
friend class PATPhotonSlimmer;
332+
friend class PATPhotonCandidatesRekeyer;
331333

332334
protected:
333335
// ---- for content embedding ----
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
#include "FWCore/Framework/interface/stream/EDProducer.h"
2+
#include "FWCore/Framework/interface/Event.h"
3+
#include "FWCore/ParameterSet/interface/ParameterSet.h"
4+
#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
5+
#include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
6+
#include "FWCore/Utilities/interface/InputTag.h"
7+
#include "DataFormats/Common/interface/View.h"
8+
9+
#include "DataFormats/PatCandidates/interface/Electron.h"
10+
#include "DataFormats/PatCandidates/interface/PackedCandidate.h"
11+
12+
#include "DataFormats/Candidate/interface/CandidateFwd.h"
13+
14+
namespace pat {
15+
class PATElectronCandidatesRekeyer : public edm::stream::EDProducer<> {
16+
public:
17+
explicit PATElectronCandidatesRekeyer(const edm::ParameterSet &iConfig);
18+
~PATElectronCandidatesRekeyer() override;
19+
20+
void produce(edm::Event &, const edm::EventSetup &) override;
21+
22+
private:
23+
// configurables
24+
edm::EDGetTokenT<std::vector<pat::Electron>> src_;
25+
edm::EDGetTokenT<reco::CandidateView> pcNewCandViewToken_;
26+
edm::EDGetTokenT<pat::PackedCandidateCollection> pcNewToken_;
27+
};
28+
29+
} // namespace pat
30+
31+
using namespace pat;
32+
33+
PATElectronCandidatesRekeyer::PATElectronCandidatesRekeyer(const edm::ParameterSet &iConfig)
34+
:
35+
36+
src_(consumes<std::vector<pat::Electron>>(iConfig.getParameter<edm::InputTag>("src"))),
37+
pcNewCandViewToken_(consumes<reco::CandidateView>(iConfig.getParameter<edm::InputTag>("packedPFCandidatesNew"))),
38+
pcNewToken_(
39+
consumes<pat::PackedCandidateCollection>(iConfig.getParameter<edm::InputTag>("packedPFCandidatesNew"))) {
40+
produces<std::vector<pat::Electron>>();
41+
}
42+
43+
PATElectronCandidatesRekeyer::~PATElectronCandidatesRekeyer() {}
44+
45+
void PATElectronCandidatesRekeyer::produce(edm::Event &iEvent, edm::EventSetup const &) {
46+
edm::Handle<std::vector<pat::Electron>> src;
47+
iEvent.getByToken(src_, src);
48+
49+
edm::Handle<reco::CandidateView> pcNewCandViewHandle;
50+
iEvent.getByToken(pcNewCandViewToken_, pcNewCandViewHandle);
51+
52+
edm::Handle<pat::PackedCandidateCollection> pcNewHandle;
53+
iEvent.getByToken(pcNewToken_, pcNewHandle);
54+
55+
auto outPtrP = std::make_unique<std::vector<pat::Electron>>();
56+
outPtrP->reserve(src->size());
57+
58+
for (size_t i = 0; i < src->size(); ++i) {
59+
// copy original pat object and append to vector
60+
outPtrP->emplace_back((*src)[i]);
61+
62+
std::vector<unsigned int> keys;
63+
for (const edm::Ref<pat::PackedCandidateCollection> &ref : outPtrP->back().associatedPackedPFCandidates()) {
64+
keys.push_back(ref.key());
65+
};
66+
outPtrP->back().setAssociatedPackedPFCandidates(
67+
edm::RefProd<pat::PackedCandidateCollection>(pcNewHandle), keys.begin(), keys.end());
68+
if (keys.size() == 1) {
69+
outPtrP->back().refToOrig_ = outPtrP->back().sourceCandidatePtr(0);
70+
} else {
71+
outPtrP->back().refToOrig_ = reco::CandidatePtr(pcNewHandle.id());
72+
}
73+
}
74+
iEvent.put(std::move(outPtrP));
75+
}
76+
77+
#include "FWCore/Framework/interface/MakerMacros.h"
78+
DEFINE_FWK_MODULE(PATElectronCandidatesRekeyer);
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
#include "FWCore/Framework/interface/stream/EDProducer.h"
2+
#include "FWCore/Framework/interface/Event.h"
3+
#include "FWCore/ParameterSet/interface/ParameterSet.h"
4+
#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
5+
#include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
6+
#include "FWCore/Utilities/interface/InputTag.h"
7+
#include "DataFormats/Common/interface/View.h"
8+
9+
#include "DataFormats/PatCandidates/interface/Jet.h"
10+
#include "DataFormats/PatCandidates/interface/PackedCandidate.h"
11+
12+
#include "DataFormats/Candidate/interface/CandidateFwd.h"
13+
14+
namespace pat {
15+
class PATJetCandidatesRekeyer : public edm::stream::EDProducer<> {
16+
public:
17+
explicit PATJetCandidatesRekeyer(const edm::ParameterSet &iConfig);
18+
~PATJetCandidatesRekeyer() override;
19+
20+
void produce(edm::Event &, const edm::EventSetup &) override;
21+
22+
private:
23+
// configurables
24+
edm::EDGetTokenT<std::vector<pat::Jet>> src_;
25+
edm::EDGetTokenT<reco::CandidateView> pcNewCandViewToken_;
26+
edm::EDGetTokenT<pat::PackedCandidateCollection> pcNewToken_;
27+
// std::string subjetLabel_;
28+
};
29+
} // namespace pat
30+
31+
using namespace pat;
32+
33+
PATJetCandidatesRekeyer::PATJetCandidatesRekeyer(const edm::ParameterSet &iConfig)
34+
: src_(consumes<std::vector<pat::Jet>>(iConfig.getParameter<edm::InputTag>("src"))),
35+
pcNewCandViewToken_(consumes<reco::CandidateView>(iConfig.getParameter<edm::InputTag>("packedPFCandidatesNew"))),
36+
pcNewToken_(
37+
consumes<pat::PackedCandidateCollection>(iConfig.getParameter<edm::InputTag>("packedPFCandidatesNew"))) {
38+
produces<std::vector<pat::Jet>>();
39+
produces<edm::OwnVector<reco::BaseTagInfo>>("tagInfos");
40+
}
41+
42+
PATJetCandidatesRekeyer::~PATJetCandidatesRekeyer() {}
43+
44+
void PATJetCandidatesRekeyer::produce(edm::Event &iEvent, edm::EventSetup const &) {
45+
edm::Handle<std::vector<pat::Jet>> src;
46+
iEvent.getByToken(src_, src);
47+
48+
edm::Handle<reco::CandidateView> pcNewCandViewHandle;
49+
iEvent.getByToken(pcNewCandViewToken_, pcNewCandViewHandle);
50+
51+
edm::Handle<pat::PackedCandidateCollection> pcNewHandle;
52+
iEvent.getByToken(pcNewToken_, pcNewHandle);
53+
54+
edm::RefProd<edm::OwnVector<reco::BaseTagInfo>> h_tagInfosOut =
55+
iEvent.getRefBeforePut<edm::OwnVector<reco::BaseTagInfo>>("tagInfos");
56+
auto tagInfosOut = std::make_unique<edm::OwnVector<reco::BaseTagInfo>>();
57+
58+
auto outPtrP = std::make_unique<std::vector<pat::Jet>>();
59+
outPtrP->reserve(src->size());
60+
61+
//
62+
//
63+
//
64+
for (std::vector<pat::Jet>::const_iterator ibegin = (*src).begin(), iend = (*src).end(), ijet = ibegin; ijet != iend;
65+
++ijet) {
66+
for (TagInfoFwdPtrCollection::const_iterator iinfoBegin = ijet->tagInfosFwdPtr().begin(),
67+
iinfoEnd = ijet->tagInfosFwdPtr().end(),
68+
iinfo = iinfoBegin;
69+
iinfo != iinfoEnd;
70+
++iinfo) {
71+
tagInfosOut->push_back(**iinfo);
72+
}
73+
}
74+
75+
edm::OrphanHandle<edm::OwnVector<reco::BaseTagInfo>> oh_tagInfosOut = iEvent.put(std::move(tagInfosOut), "tagInfos");
76+
77+
//
78+
//
79+
//
80+
unsigned int tagInfoIndex = 0;
81+
82+
for (size_t i = 0; i < src->size(); ++i) {
83+
// copy original pat object and append to vector
84+
outPtrP->emplace_back((*src)[i]);
85+
86+
reco::CompositePtrCandidate::daughters old = outPtrP->back().daughterPtrVector();
87+
outPtrP->back().clearDaughters();
88+
for (const auto &dauItr : old) {
89+
outPtrP->back().addDaughter(edm::Ptr<reco::Candidate>(pcNewHandle, dauItr.key()));
90+
}
91+
92+
// Copy the tag infos
93+
for (TagInfoFwdPtrCollection::const_iterator iinfoBegin = outPtrP->back().tagInfosFwdPtr().begin(),
94+
iinfoEnd = outPtrP->back().tagInfosFwdPtr().end(),
95+
iinfo = iinfoBegin;
96+
iinfo != iinfoEnd;
97+
++iinfo) {
98+
// Update the "forward" bit of the FwdPtr to point at the new collection.
99+
// ptr to "this" info in the global list
100+
edm::Ptr<reco::BaseTagInfo> outPtr(oh_tagInfosOut, tagInfoIndex);
101+
outPtrP->back().updateFwdTagInfoFwdPtr(iinfo - iinfoBegin, outPtr);
102+
++tagInfoIndex;
103+
}
104+
}
105+
106+
iEvent.put(std::move(outPtrP));
107+
}
108+
109+
#include "FWCore/Framework/interface/MakerMacros.h"
110+
DEFINE_FWK_MODULE(PATJetCandidatesRekeyer);
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
#include "FWCore/Framework/interface/stream/EDProducer.h"
2+
#include "FWCore/Framework/interface/Event.h"
3+
#include "FWCore/ParameterSet/interface/ParameterSet.h"
4+
#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
5+
#include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
6+
#include "FWCore/Utilities/interface/InputTag.h"
7+
#include "DataFormats/Common/interface/View.h"
8+
9+
#include "DataFormats/PatCandidates/interface/Muon.h"
10+
#include "DataFormats/PatCandidates/interface/PackedCandidate.h"
11+
12+
#include "DataFormats/Candidate/interface/CandidateFwd.h"
13+
14+
namespace pat {
15+
class PATMuonCandidatesRekeyer : public edm::stream::EDProducer<> {
16+
public:
17+
explicit PATMuonCandidatesRekeyer(const edm::ParameterSet &iConfig);
18+
~PATMuonCandidatesRekeyer() override;
19+
20+
void produce(edm::Event &, const edm::EventSetup &) override;
21+
22+
private:
23+
// configurables
24+
edm::EDGetTokenT<std::vector<pat::Muon>> src_;
25+
edm::EDGetTokenT<reco::CandidateView> pcNewCandViewToken_;
26+
edm::EDGetTokenT<pat::PackedCandidateCollection> pcNewToken_;
27+
};
28+
29+
} // namespace pat
30+
31+
using namespace pat;
32+
33+
PATMuonCandidatesRekeyer::PATMuonCandidatesRekeyer(const edm::ParameterSet &iConfig)
34+
: src_(consumes<std::vector<pat::Muon>>(iConfig.getParameter<edm::InputTag>("src"))),
35+
pcNewCandViewToken_(consumes<reco::CandidateView>(iConfig.getParameter<edm::InputTag>("packedPFCandidatesNew"))),
36+
pcNewToken_(
37+
consumes<pat::PackedCandidateCollection>(iConfig.getParameter<edm::InputTag>("packedPFCandidatesNew"))) {
38+
produces<std::vector<pat::Muon>>();
39+
}
40+
41+
PATMuonCandidatesRekeyer::~PATMuonCandidatesRekeyer() {}
42+
43+
void PATMuonCandidatesRekeyer::produce(edm::Event &iEvent, edm::EventSetup const &) {
44+
edm::Handle<std::vector<pat::Muon>> src;
45+
iEvent.getByToken(src_, src);
46+
47+
edm::Handle<reco::CandidateView> pcNewCandViewHandle;
48+
iEvent.getByToken(pcNewCandViewToken_, pcNewCandViewHandle);
49+
50+
edm::Handle<pat::PackedCandidateCollection> pcNewHandle;
51+
iEvent.getByToken(pcNewToken_, pcNewHandle);
52+
53+
auto outPtrP = std::make_unique<std::vector<pat::Muon>>();
54+
outPtrP->reserve(src->size());
55+
56+
for (size_t i = 0; i < src->size(); ++i) {
57+
// copy original pat object and append to vector
58+
outPtrP->emplace_back((*src)[i]);
59+
60+
//
61+
std::vector<unsigned int> keys;
62+
for (size_t ic = 0; ic < outPtrP->back().numberOfSourceCandidatePtrs(); ++ic) {
63+
const reco::CandidatePtr &candPtr = outPtrP->back().sourceCandidatePtr(ic);
64+
if (candPtr.isNonnull()) {
65+
keys.push_back(candPtr.key());
66+
}
67+
}
68+
if (keys.size() == 1) {
69+
outPtrP->back().refToOrig_ = reco::CandidatePtr(pcNewCandViewHandle, keys[0]);
70+
}
71+
}
72+
73+
iEvent.put(std::move(outPtrP));
74+
}
75+
76+
#include "FWCore/Framework/interface/MakerMacros.h"
77+
DEFINE_FWK_MODULE(PATMuonCandidatesRekeyer);

0 commit comments

Comments
 (0)