CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
List of all members | Public Types | Public Member Functions | Private Attributes
PFPileUp Class Reference

Identifies pile-up candidates from a collection of PFCandidates, and produces the corresponding collection of PileUpCandidates. More...

Inheritance diagram for PFPileUp:
edm::stream::EDProducer<>

Public Types

typedef edm::Association
< reco::VertexCollection
CandToVertex
 
typedef std::vector
< edm::FwdPtr
< reco::PFCandidate > > 
PFCollection
 
typedef std::vector
< reco::PFCandidate
PFCollectionByValue
 
typedef edm::View
< reco::PFCandidate
PFView
 
- Public Types inherited from edm::stream::EDProducer<>
using CacheTypes = CacheContexts< T...>
 
using GlobalCache = typename CacheTypes::GlobalCache
 
using HasAbility = AbilityChecker< T...>
 
using InputProcessBlockCache = typename CacheTypes::InputProcessBlockCache
 
using LuminosityBlockCache = typename CacheTypes::LuminosityBlockCache
 
using LuminosityBlockContext = LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCache >
 
using LuminosityBlockSummaryCache = typename CacheTypes::LuminosityBlockSummaryCache
 
using RunCache = typename CacheTypes::RunCache
 
using RunContext = RunContextT< RunCache, GlobalCache >
 
using RunSummaryCache = typename CacheTypes::RunSummaryCache
 

Public Member Functions

 PFPileUp (const edm::ParameterSet &)
 
void produce (edm::Event &, const edm::EventSetup &) override
 
 ~PFPileUp () override
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
 EDProducer (const EDProducer &)=delete
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginProcessBlocks () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndProcessBlocks () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
const EDProduceroperator= (const EDProducer &)=delete
 

Private Attributes

bool checkClosestZVertex_
 use the closest z vertex if a track is not in a vertex More...
 
bool enable_
 enable PFPileUp selection More...
 
bool fUseVertexAssociation
 
PFPileUpAlgo pileUpAlgo_
 
edm::EDGetTokenT< PFCollectiontokenPFCandidates_
 PFCandidates to be analyzed. More...
 
edm::EDGetTokenT< PFViewtokenPFCandidatesView_
 fall-back token More...
 
edm::EDGetTokenT< CandToVertextokenVertexAssociation_
 
edm::EDGetTokenT
< edm::ValueMap< int > > 
tokenVertexAssociationQuality_
 
edm::EDGetTokenT
< reco::VertexCollection
tokenVertices_
 vertices More...
 
bool verbose_
 verbose ? More...
 
int vertexAssociationQuality_
 

Detailed Description

Identifies pile-up candidates from a collection of PFCandidates, and produces the corresponding collection of PileUpCandidates.

Author
Colin Bernet
Date
february 2008 Florian Beaudette 30/03/2012

Definition at line 42 of file PFPileUp.cc.

Member Typedef Documentation

Definition at line 47 of file PFPileUp.cc.

Definition at line 44 of file PFPileUp.cc.

Definition at line 46 of file PFPileUp.cc.

Definition at line 45 of file PFPileUp.cc.

Constructor & Destructor Documentation

PFPileUp::PFPileUp ( const edm::ParameterSet iConfig)
explicit

Definition at line 81 of file PFPileUp.cc.

References edm::ParameterSet::exists(), edm::ParameterSet::getParameter(), and edm::ParameterSet::getUntrackedParameter().

81  {
82  tokenPFCandidates_ = consumes<PFCollection>(iConfig.getParameter<InputTag>("PFCandidates"));
83  tokenPFCandidatesView_ = mayConsume<PFView>(iConfig.getParameter<InputTag>("PFCandidates"));
84 
85  tokenVertices_ = consumes<VertexCollection>(iConfig.getParameter<InputTag>("Vertices"));
86 
87  fUseVertexAssociation = iConfig.getParameter<bool>("useVertexAssociation");
88  vertexAssociationQuality_ = iConfig.getParameter<int>("vertexAssociationQuality");
90  tokenVertexAssociation_ = consumes<CandToVertex>(iConfig.getParameter<edm::InputTag>("vertexAssociation"));
92  consumes<edm::ValueMap<int>>(iConfig.getParameter<edm::InputTag>("vertexAssociation"));
93  }
94 
95  enable_ = iConfig.getParameter<bool>("Enable");
96 
97  verbose_ = iConfig.getUntrackedParameter<bool>("verbose", false);
98 
99  if (iConfig.exists("checkClosestZVertex")) {
100  checkClosestZVertex_ = iConfig.getParameter<bool>("checkClosestZVertex");
101  } else {
102  checkClosestZVertex_ = false;
103  }
104 
105  // Configure the algo
108 
109  //produces<reco::PFCandidateCollection>();
110  produces<PFCollection>();
111  // produces< PFCollectionByValue > ();
112 }
T getUntrackedParameter(std::string const &, T const &) const
int vertexAssociationQuality_
Definition: PFPileUp.cc:78
edm::EDGetTokenT< reco::VertexCollection > tokenVertices_
vertices
Definition: PFPileUp.cc:64
edm::EDGetTokenT< PFView > tokenPFCandidatesView_
fall-back token
Definition: PFPileUp.cc:61
bool exists(std::string const &parameterName) const
checks if a parameter exists
void setCheckClosestZVertex(bool val)
Definition: PFPileUpAlgo.h:30
bool verbose_
verbose ?
Definition: PFPileUp.cc:70
edm::EDGetTokenT< PFCollection > tokenPFCandidates_
PFCandidates to be analyzed.
Definition: PFPileUp.cc:59
edm::EDGetTokenT< CandToVertex > tokenVertexAssociation_
Definition: PFPileUp.cc:75
bool enable_
enable PFPileUp selection
Definition: PFPileUp.cc:67
bool fUseVertexAssociation
Definition: PFPileUp.cc:77
edm::EDGetTokenT< edm::ValueMap< int > > tokenVertexAssociationQuality_
Definition: PFPileUp.cc:76
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
PFPileUpAlgo pileUpAlgo_
Definition: PFPileUp.cc:56
bool checkClosestZVertex_
use the closest z vertex if a track is not in a vertex
Definition: PFPileUp.cc:73
void setVerbose(bool verbose)
Definition: PFPileUpAlgo.h:28
PFPileUp::~PFPileUp ( )
override

Definition at line 114 of file PFPileUp.cc.

114 {}

Member Function Documentation

void PFPileUp::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
override

Definition at line 116 of file PFPileUp.cc.

References Exception, edm::Event::get(), edm::Event::getByToken(), edm::Ref< C, T, F >::isNonnull(), edm::Ref< C, T, F >::key(), eostools::move(), AlCaHLTBitMon_ParallelJobs::p, slimmedMuons_cfi::pfCandidates, edm::Handle< T >::product(), edm::Event::put(), quality, and beam_dqm_sourceclient-live_cfg::vertices.

116  {
117  // LogDebug("PFPileUp")<<"START event: "<<iEvent.id().event()
118  // <<" in run "<<iEvent.id().run()<<endl;
119 
120  // get PFCandidates
121 
122  unique_ptr<PFCollection> pOutput(new PFCollection);
123 
124  unique_ptr<PFCollectionByValue> pOutputByValue(new PFCollectionByValue);
125 
126  if (enable_) {
127  // get vertices
129  iEvent.getByToken(tokenVertices_, vertices);
130 
131  // get PF Candidates
133  PFCollection const* pfCandidatesRef = nullptr;
134  PFCollection usedIfNoFwdPtrs;
135  bool getFromFwdPtr = iEvent.getByToken(tokenPFCandidates_, pfCandidates);
136  if (getFromFwdPtr) {
137  pfCandidatesRef = pfCandidates.product();
138  }
139  // Maintain backwards-compatibility.
140  // If there is no vector of FwdPtr<PFCandidate> found, then
141  // make a dummy vector<FwdPtr<PFCandidate> > for the PFPileupAlgo,
142  // set the pointer "pfCandidatesRef" to point to it, and
143  // then we can pass it to the PFPileupAlgo.
144  else {
145  Handle<PFView> pfView;
146  bool getFromView = iEvent.getByToken(tokenPFCandidatesView_, pfView);
147  if (!getFromView) {
148  throw cms::Exception(
149  "PFPileUp is misconfigured. This needs to be either vector<FwdPtr<PFCandidate> >, or View<PFCandidate>");
150  }
151  for (edm::View<reco::PFCandidate>::const_iterator viewBegin = pfView->begin(),
152  viewEnd = pfView->end(),
153  iview = viewBegin;
154  iview != viewEnd;
155  ++iview) {
156  usedIfNoFwdPtrs.push_back(
157  edm::FwdPtr<reco::PFCandidate>(pfView->ptrAt(iview - viewBegin), pfView->ptrAt(iview - viewBegin)));
158  }
159  pfCandidatesRef = &usedIfNoFwdPtrs;
160  }
161 
162  if (pfCandidatesRef == nullptr) {
163  throw cms::Exception(
164  "Something went dreadfully wrong with PFPileUp. pfCandidatesRef should never be zero, so this is a logic "
165  "error.");
166  }
167 
168  if (fUseVertexAssociation) {
170  const edm::ValueMap<int>& associationQuality = iEvent.get(tokenVertexAssociationQuality_);
171  PFCollection pfCandidatesFromPU;
172  for (auto& p : (*pfCandidatesRef)) {
173  const reco::VertexRef& PVOrig = associatedPV[p];
174  int quality = associationQuality[p];
175  if (PVOrig.isNonnull() && (PVOrig.key() > 0) && (quality >= vertexAssociationQuality_))
176  pfCandidatesFromPU.push_back(p);
177  }
178  pOutput->insert(pOutput->end(), pfCandidatesFromPU.begin(), pfCandidatesFromPU.end());
179  } else {
180  pileUpAlgo_.process(*pfCandidatesRef, *vertices);
181  pOutput->insert(
182  pOutput->end(), pileUpAlgo_.getPFCandidatesFromPU().begin(), pileUpAlgo_.getPFCandidatesFromPU().end());
183  }
184  // for ( PFCollection::const_iterator byValueBegin = pileUpAlgo_.getPFCandidatesFromPU().begin(),
185  // byValueEnd = pileUpAlgo_.getPFCandidatesFromPU().end(), ibyValue = byValueBegin;
186  // ibyValue != byValueEnd; ++ibyValue ) {
187  // pOutputByValue->push_back( **ibyValue );
188  // }
189 
190  } // end if enabled
191  // outsize of the loop to fill the collection anyway even when disabled
192  iEvent.put(std::move(pOutput));
193  // iEvent.put(std::move(pOutputByValue));
194 }
int vertexAssociationQuality_
Definition: PFPileUp.cc:78
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:133
bool isNonnull() const
Checks for non-null.
Definition: Ref.h:238
edm::EDGetTokenT< reco::VertexCollection > tokenVertices_
vertices
Definition: PFPileUp.cc:64
edm::EDGetTokenT< PFView > tokenPFCandidatesView_
fall-back token
Definition: PFPileUp.cc:61
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:539
uint32_t const *__restrict__ Quality * quality
key_type key() const
Accessor for product key.
Definition: Ref.h:250
std::vector< reco::PFCandidate > PFCollectionByValue
Definition: PFPileUp.cc:46
def move
Definition: eostools.py:511
bool get(ProductID const &oid, Handle< PROD > &result) const
Definition: Event.h:346
edm::EDGetTokenT< PFCollection > tokenPFCandidates_
PFCandidates to be analyzed.
Definition: PFPileUp.cc:59
std::vector< edm::FwdPtr< reco::PFCandidate > > PFCollection
Definition: PFPileUp.cc:44
edm::EDGetTokenT< CandToVertex > tokenVertexAssociation_
Definition: PFPileUp.cc:75
bool enable_
enable PFPileUp selection
Definition: PFPileUp.cc:67
bool fUseVertexAssociation
Definition: PFPileUp.cc:77
edm::EDGetTokenT< edm::ValueMap< int > > tokenVertexAssociationQuality_
Definition: PFPileUp.cc:76
T const * product() const
Definition: Handle.h:70
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
Definition: View.h:86
void process(const PFCollection &pfCandidates, const reco::VertexCollection &vertices)
Definition: PFPileUpAlgo.cc:6
PFPileUpAlgo pileUpAlgo_
Definition: PFPileUp.cc:56
const PFCollection & getPFCandidatesFromPU() const
Definition: PFPileUpAlgo.h:32

Member Data Documentation

bool PFPileUp::checkClosestZVertex_
private

use the closest z vertex if a track is not in a vertex

Definition at line 73 of file PFPileUp.cc.

bool PFPileUp::enable_
private

enable PFPileUp selection

Definition at line 67 of file PFPileUp.cc.

bool PFPileUp::fUseVertexAssociation
private

Definition at line 77 of file PFPileUp.cc.

PFPileUpAlgo PFPileUp::pileUpAlgo_
private

Definition at line 56 of file PFPileUp.cc.

edm::EDGetTokenT<PFCollection> PFPileUp::tokenPFCandidates_
private

PFCandidates to be analyzed.

Definition at line 59 of file PFPileUp.cc.

edm::EDGetTokenT<PFView> PFPileUp::tokenPFCandidatesView_
private

fall-back token

Definition at line 61 of file PFPileUp.cc.

edm::EDGetTokenT<CandToVertex> PFPileUp::tokenVertexAssociation_
private

Definition at line 75 of file PFPileUp.cc.

edm::EDGetTokenT<edm::ValueMap<int> > PFPileUp::tokenVertexAssociationQuality_
private

Definition at line 76 of file PFPileUp.cc.

edm::EDGetTokenT<reco::VertexCollection> PFPileUp::tokenVertices_
private

vertices

Definition at line 64 of file PFPileUp.cc.

bool PFPileUp::verbose_
private

verbose ?

Definition at line 70 of file PFPileUp.cc.

int PFPileUp::vertexAssociationQuality_
private

Definition at line 78 of file PFPileUp.cc.