Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2023-03-17 11:21:10

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 
0018 private:
0019   edm::InputTag inputColl_;
0020 };
0021 
0022 DEFINE_FWK_MODULE(PFConcretePFCandidateProducer);
0023 
0024 PFConcretePFCandidateProducer::PFConcretePFCandidateProducer(const edm::ParameterSet& iConfig) {
0025   inputColl_ = iConfig.getParameter<edm::InputTag>("src");
0026   // register products
0027   produces<reco::PFCandidateCollection>();
0028 }
0029 
0030 PFConcretePFCandidateProducer::~PFConcretePFCandidateProducer() {}
0031 
0032 void PFConcretePFCandidateProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) {
0033   edm::Handle<reco::PFCandidateCollection> inputColl;
0034   bool inputOk = iEvent.getByLabel(inputColl_, inputColl);
0035 
0036   if (!inputOk) {
0037     // nothing ... I guess we prefer to send an exception in the next lines
0038   }
0039 
0040   auto outputColl = std::make_unique<reco::PFCandidateCollection>();
0041   outputColl->resize(inputColl->size());
0042 
0043   for (unsigned int iCopy = 0; iCopy != inputColl->size(); ++iCopy) {
0044     const reco::PFCandidate& pf = (*inputColl)[iCopy];
0045     (*outputColl)[iCopy] = pf;
0046     //dereferenced internally the ref and hardcopy the value
0047     (*outputColl)[iCopy].setVertex(pf.vertex());
0048     //math::XYZPoint(pf.vx(),pf.vy(),pf.vz()));
0049   }
0050 
0051   iEvent.put(std::move(outputColl));
0052 }