CMS 3D CMS Logo

ParticleFlowForChargedMETProducer.cc
Go to the documentation of this file.
2 
5 
6 using namespace edm;
7 using namespace std;
8 using namespace reco;
9 
10 ParticleFlowForChargedMETProducer::ParticleFlowForChargedMETProducer(const edm::ParameterSet& iConfig)
11 {
12  pfCollectionLabel = iConfig.getParameter<edm::InputTag>("PFCollectionLabel");
13  pvCollectionLabel = iConfig.getParameter<edm::InputTag>("PVCollectionLabel");
14 
15  pfCandidatesToken = consumes<PFCandidateCollection>(pfCollectionLabel);
16  pvCollectionToken = consumes<VertexCollection>(pvCollectionLabel);
17 
18  dzCut = iConfig.getParameter<double>("dzCut");
19  neutralEtThreshold = iConfig.getParameter<double>("neutralEtThreshold");
20 
21  produces<PFCandidateCollection>();
22 }
23 
24 void ParticleFlowForChargedMETProducer::produce(Event& iEvent, const EventSetup& iSetup)
25 {
26 
27  //Get the PV collection
29  iEvent.getByToken(pvCollectionToken, pvCollection);
30  VertexCollection::const_iterator vertex = pvCollection->begin();
31 
32  //Get pfCandidates
34  iEvent.getByToken(pfCandidatesToken, pfCandidates);
35 
36  // the output collection
37  auto chargedPFCandidates = std::make_unique<PFCandidateCollection>();
38  if (!pvCollection->empty()) {
39  for( unsigned i=0; i<pfCandidates->size(); i++ ) {
40  const PFCandidate& pfCand = (*pfCandidates)[i];
41  PFCandidatePtr pfCandPtr(pfCandidates, i);
42 
43  if (pfCandPtr->trackRef().isNonnull()) {
44  if (pfCandPtr->trackRef()->dz((*vertex).position()) < dzCut) {
45  chargedPFCandidates->push_back( pfCand );
46  chargedPFCandidates->back().setSourceCandidatePtr( pfCandPtr );
47  }
48 
49  }
50  else if (neutralEtThreshold>0 and
51  pfCandPtr->pt()>neutralEtThreshold) {
52  chargedPFCandidates->push_back( pfCand );
53  chargedPFCandidates->back().setSourceCandidatePtr( pfCandPtr );
54  }
55 
56 
57  }
58  }
59 
60 
62 
63  return;
64 }
65 
66 ParticleFlowForChargedMETProducer::~ParticleFlowForChargedMETProducer(){}
T getParameter(std::string const &) const
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:125
bool isNonnull() const
Checks for non-null.
Definition: Ref.h:251
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:517
double pt() const final
transverse momentum
reco::TrackRef trackRef() const
Definition: PFCandidate.cc:442
int iEvent
Definition: GenABIO.cc:224
Particle reconstructed by the particle flow algorithm.
Definition: PFCandidate.h:40
fixed size matrix
HLT enums.
def move(src, dest)
Definition: eostools.py:511