CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
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  pfCollectionLabel = iConfig.getParameter<edm::InputTag>("PFCollectionLabel");
12  pvCollectionLabel = iConfig.getParameter<edm::InputTag>("PVCollectionLabel");
13 
14  pfCandidatesToken = consumes<PFCandidateCollection>(pfCollectionLabel);
15  pvCollectionToken = consumes<VertexCollection>(pvCollectionLabel);
16 
17  dzCut = iConfig.getParameter<double>("dzCut");
18  neutralEtThreshold = iConfig.getParameter<double>("neutralEtThreshold");
19 
20  produces<PFCandidateCollection>();
21 }
22 
23 void ParticleFlowForChargedMETProducer::produce(Event& iEvent, const EventSetup& iSetup) {
24  //Get the PV collection
25  Handle<VertexCollection> pvCollection;
26  iEvent.getByToken(pvCollectionToken, pvCollection);
27  VertexCollection::const_iterator vertex = pvCollection->begin();
28 
29  //Get pfCandidates
31  iEvent.getByToken(pfCandidatesToken, pfCandidates);
32 
33  // the output collection
34  auto chargedPFCandidates = std::make_unique<PFCandidateCollection>();
35  if (!pvCollection->empty()) {
36  for (unsigned i = 0; i < pfCandidates->size(); i++) {
37  const PFCandidate& pfCand = (*pfCandidates)[i];
38  PFCandidatePtr pfCandPtr(pfCandidates, i);
39 
40  if (pfCandPtr->trackRef().isNonnull()) {
41  if (pfCandPtr->trackRef()->dz((*vertex).position()) < dzCut) {
42  chargedPFCandidates->push_back(pfCand);
43  chargedPFCandidates->back().setSourceCandidatePtr(pfCandPtr);
44  }
45 
46  } else if (neutralEtThreshold > 0 and pfCandPtr->pt() > neutralEtThreshold) {
47  chargedPFCandidates->push_back(pfCand);
48  chargedPFCandidates->back().setSourceCandidatePtr(pfCandPtr);
49  }
50  }
51  }
52 
54 
55  return;
56 }
57 
58 ParticleFlowForChargedMETProducer::~ParticleFlowForChargedMETProducer() {}
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:133
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:539
int iEvent
Definition: GenABIO.cc:224
def move
Definition: eostools.py:511
bool isNonnull() const
Checks for non-null.
Definition: Ptr.h:146
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
Particle reconstructed by the particle flow algorithm.
Definition: PFCandidate.h:41