Back to home page

Project CMSSW displayed by LXR

 
 

    


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 }  // namespace edm
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   // register products
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     // nothing ... I guess we prefer to send an exception in the next lines
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     //dereferenced internally the ref and hardcopy the value
0053     (*outputColl)[iCopy].setVertex(pf.vertex());
0054     //math::XYZPoint(pf.vx(),pf.vy(),pf.vz()));
0055   }
0056 
0057   iEvent.put(std::move(outputColl));
0058 }