CMS 3D CMS Logo

PFPileUp.cc
Go to the documentation of this file.
2 
6 
8 
9 // #include "FWCore/MessageLogger/interface/MessageLogger.h"
12 
13 using namespace std;
14 using namespace edm;
15 using namespace reco;
16 
18  tokenPFCandidates_ = consumes<PFCollection>(iConfig.getParameter<InputTag>("PFCandidates"));
19  tokenPFCandidatesView_ = mayConsume<PFView>(iConfig.getParameter<InputTag>("PFCandidates"));
20 
21  tokenVertices_ = consumes<VertexCollection>(iConfig.getParameter<InputTag>("Vertices"));
22 
23  enable_ = iConfig.getParameter<bool>("Enable");
24 
25  verbose_ = iConfig.getUntrackedParameter<bool>("verbose", false);
26 
27  if (iConfig.exists("checkClosestZVertex")) {
28  checkClosestZVertex_ = iConfig.getParameter<bool>("checkClosestZVertex");
29  } else {
30  checkClosestZVertex_ = false;
31  }
32 
33  // Configure the algo
34  pileUpAlgo_.setVerbose(verbose_);
35  pileUpAlgo_.setCheckClosestZVertex(checkClosestZVertex_);
36 
37  //produces<reco::PFCandidateCollection>();
38  produces<PFCollection>();
39  // produces< PFCollectionByValue > ();
40 }
41 
43 
44 void PFPileUp::produce(Event& iEvent, const EventSetup& iSetup) {
45  // LogDebug("PFPileUp")<<"START event: "<<iEvent.id().event()
46  // <<" in run "<<iEvent.id().run()<<endl;
47 
48  // get PFCandidates
49 
50  unique_ptr<PFCollection> pOutput(new PFCollection);
51 
52  unique_ptr<PFCollectionByValue> pOutputByValue(new PFCollectionByValue);
53 
54  if (enable_) {
55  // get vertices
57  iEvent.getByToken(tokenVertices_, vertices);
58 
59  // get PF Candidates
61  PFCollection const* pfCandidatesRef = nullptr;
62  PFCollection usedIfNoFwdPtrs;
63  bool getFromFwdPtr = iEvent.getByToken(tokenPFCandidates_, pfCandidates);
64  if (getFromFwdPtr) {
65  pfCandidatesRef = pfCandidates.product();
66  }
67  // Maintain backwards-compatibility.
68  // If there is no vector of FwdPtr<PFCandidate> found, then
69  // make a dummy vector<FwdPtr<PFCandidate> > for the PFPileupAlgo,
70  // set the pointer "pfCandidatesRef" to point to it, and
71  // then we can pass it to the PFPileupAlgo.
72  else {
73  Handle<PFView> pfView;
74  bool getFromView = iEvent.getByToken(tokenPFCandidatesView_, pfView);
75  if (!getFromView) {
76  throw cms::Exception(
77  "PFPileUp is misconfigured. This needs to be either vector<FwdPtr<PFCandidate> >, or View<PFCandidate>");
78  }
79  for (edm::View<reco::PFCandidate>::const_iterator viewBegin = pfView->begin(),
80  viewEnd = pfView->end(),
81  iview = viewBegin;
82  iview != viewEnd;
83  ++iview) {
84  usedIfNoFwdPtrs.push_back(
85  edm::FwdPtr<reco::PFCandidate>(pfView->ptrAt(iview - viewBegin), pfView->ptrAt(iview - viewBegin)));
86  }
87  pfCandidatesRef = &usedIfNoFwdPtrs;
88  }
89 
90  if (pfCandidatesRef == nullptr) {
91  throw cms::Exception(
92  "Something went dreadfully wrong with PFPileUp. pfCandidatesRef should never be zero, so this is a logic "
93  "error.");
94  }
95 
96  pileUpAlgo_.process(*pfCandidatesRef, *vertices);
97  pOutput->insert(
98  pOutput->end(), pileUpAlgo_.getPFCandidatesFromPU().begin(), pileUpAlgo_.getPFCandidatesFromPU().end());
99 
100  // for ( PFCollection::const_iterator byValueBegin = pileUpAlgo_.getPFCandidatesFromPU().begin(),
101  // byValueEnd = pileUpAlgo_.getPFCandidatesFromPU().end(), ibyValue = byValueBegin;
102  // ibyValue != byValueEnd; ++ibyValue ) {
103  // pOutputByValue->push_back( **ibyValue );
104  // }
105 
106  } // end if enabled
107  // outsize of the loop to fill the collection anyway even when disabled
108  iEvent.put(std::move(pOutput));
109  // iEvent.put(std::move(pOutputByValue));
110 }
zmumugammaAnalyzer_cfi.pfCandidates
pfCandidates
Definition: zmumugammaAnalyzer_cfi.py:11
ESHandle.h
edm
HLT enums.
Definition: AlignableModifier.h:19
edm::ParameterSet::getUntrackedParameter
T getUntrackedParameter(std::string const &, T const &) const
reco
fixed size matrix
Definition: AlignmentAlgorithmBase.h:45
edm::Handle< VertexCollection >
PileUpPFCandidate.h
PileUpPFCandidateFwd.h
PFPileUp.h
edm::FwdPtr
Definition: FwdPtr.h:40
Vertex.h
edm::ParameterSet::exists
bool exists(std::string const &parameterName) const
checks if a parameter exists
Definition: ParameterSet.cc:681
edm::ParameterSet
Definition: ParameterSet.h:47
PFPileUp::produce
void produce(edm::Event &, const edm::EventSetup &) override
Definition: PFPileUp.cc:44
iEvent
int iEvent
Definition: GenABIO.cc:224
PFPileUp::PFPileUp
PFPileUp(const edm::ParameterSet &)
Definition: PFPileUp.cc:17
edm::EventSetup
Definition: EventSetup.h:58
eostools.move
def move(src, dest)
Definition: eostools.py:511
std
Definition: JetResolutionObject.h:76
Exception
Definition: hltDiff.cc:245
PFPileUp::PFCollection
std::vector< edm::FwdPtr< reco::PFCandidate > > PFCollection
Definition: PFPileUp.h:33
PFPileUp::PFCollectionByValue
std::vector< reco::PFCandidate > PFCollectionByValue
Definition: PFPileUp.h:35
EventSetup.h
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
Exception.h
edm::View::const_iterator
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
Definition: View.h:86
edm::Event
Definition: Event.h:73
PFPileUp::~PFPileUp
~PFPileUp() override
Definition: PFPileUp.cc:42
edm::InputTag
Definition: InputTag.h:15
pwdgSkimBPark_cfi.vertices
vertices
Definition: pwdgSkimBPark_cfi.py:7