File indexing completed on 2024-06-22 02:24:05
0001 #include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h"
0002 #include "FWCore/Framework/interface/stream/EDProducer.h"
0003 #include "FWCore/Framework/interface/Event.h"
0004 #include "FWCore/Framework/interface/MakerMacros.h"
0005 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0006
0007 namespace edm {
0008 class EventSetup;
0009 }
0010
0011 class PFConcretePFCandidateProducer : public edm::stream::EDProducer<> {
0012 public:
0013 explicit PFConcretePFCandidateProducer(const edm::ParameterSet&);
0014 ~PFConcretePFCandidateProducer() override;
0015
0016 void produce(edm::Event&, const edm::EventSetup&) override;
0017 static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0018
0019 private:
0020 const edm::EDGetTokenT<reco::PFCandidateCollection> inputColl_;
0021 };
0022
0023 DEFINE_FWK_MODULE(PFConcretePFCandidateProducer);
0024
0025 void PFConcretePFCandidateProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0026 edm::ParameterSetDescription desc;
0027 desc.add<edm::InputTag>("src", {"particleFlow"});
0028 descriptions.addWithDefaultLabel(desc);
0029 }
0030
0031 PFConcretePFCandidateProducer::PFConcretePFCandidateProducer(const edm::ParameterSet& iConfig)
0032 : inputColl_(consumes<reco::PFCandidateCollection>(iConfig.getParameter<edm::InputTag>("src"))) {
0033
0034 produces<reco::PFCandidateCollection>();
0035 }
0036
0037 PFConcretePFCandidateProducer::~PFConcretePFCandidateProducer() {}
0038
0039 void PFConcretePFCandidateProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) {
0040 const auto& inputColl = iEvent.getHandle(inputColl_);
0041
0042 if (!inputColl.isValid()) {
0043
0044 }
0045
0046 auto outputColl = std::make_unique<reco::PFCandidateCollection>();
0047 outputColl->resize(inputColl->size());
0048
0049 for (unsigned int iCopy = 0; iCopy != inputColl->size(); ++iCopy) {
0050 const reco::PFCandidate& pf = (*inputColl)[iCopy];
0051 (*outputColl)[iCopy] = pf;
0052
0053 (*outputColl)[iCopy].setVertex(pf.vertex());
0054
0055 }
0056
0057 iEvent.put(std::move(outputColl));
0058 }