CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Private Attributes
PFPileUpAlgo Class Reference

#include <PFPileUpAlgo.h>

Public Types

typedef std::vector< edm::FwdPtr< reco::PFCandidate > > PFCollection
 

Public Member Functions

int chargedHadronVertex (const reco::VertexCollection &vertices, const reco::PFCandidate &pfcand) const
 
const PFCollectiongetPFCandidatesFromPU () const
 
const PFCollectiongetPFCandidatesFromVtx () const
 
 PFPileUpAlgo ()
 
 PFPileUpAlgo (bool checkClosestZVertex, bool verbose=false)
 
void process (const PFCollection &pfCandidates, const reco::VertexCollection &vertices)
 
void setCheckClosestZVertex (bool val)
 
void setVerbose (bool verbose)
 
 ~PFPileUpAlgo ()
 

Private Attributes

bool checkClosestZVertex_
 use the closest z vertex if a track is not in a vertex More...
 
PFCollection pfCandidatesFromPU_
 
PFCollection pfCandidatesFromVtx_
 
bool verbose_
 verbose ? More...
 

Detailed Description

Definition at line 12 of file PFPileUpAlgo.h.

Member Typedef Documentation

Definition at line 14 of file PFPileUpAlgo.h.

Constructor & Destructor Documentation

PFPileUpAlgo::PFPileUpAlgo ( )
inline

Definition at line 16 of file PFPileUpAlgo.h.

16 : checkClosestZVertex_(true), verbose_(false) { ; }
bool verbose_
verbose ?
Definition: PFPileUpAlgo.h:43
bool checkClosestZVertex_
use the closest z vertex if a track is not in a vertex
Definition: PFPileUpAlgo.h:40
PFPileUpAlgo::PFPileUpAlgo ( bool  checkClosestZVertex,
bool  verbose = false 
)
inline

Definition at line 18 of file PFPileUpAlgo.h.

20  ;
21  }
bool verbose_
verbose ?
Definition: PFPileUpAlgo.h:43
bool checkClosestZVertex_
use the closest z vertex if a track is not in a vertex
Definition: PFPileUpAlgo.h:40
PFPileUpAlgo::~PFPileUpAlgo ( )
inline

Definition at line 23 of file PFPileUpAlgo.h.

References zmumugammaAnalyzer_cfi::pfCandidates, process(), and pwdgSkimBPark_cfi::vertices.

23 { ; }

Member Function Documentation

int PFPileUpAlgo::chargedHadronVertex ( const reco::VertexCollection vertices,
const reco::PFCandidate pfcand 
) const

Definition at line 37 of file PFPileUpAlgo.cc.

References checkClosestZVertex_, PVValHelper::dz, HLT_2018_cff::track, reco::PFCandidate::trackRef(), reco::PFCandidate::vertex(), badGlobalMuonTaggersAOD_cff::vtx, and w.

Referenced by getPFCandidatesFromVtx(), and process().

37  {
38  auto const& track = pfcand.trackRef();
39  size_t iVertex = 0;
40  unsigned int index = 0;
41  unsigned int nFoundVertex = 0;
42  float bestweight = 0;
43  for (auto const& vtx : vertices) {
44  float w = vtx.trackWeight(track);
45  //select the vertex for which the track has the highest weight
46  if (w > bestweight) {
47  bestweight = w;
48  iVertex = index;
49  nFoundVertex++;
50  }
51  ++index;
52  }
53 
54  if (nFoundVertex > 0) {
55  if (nFoundVertex != 1)
56  edm::LogWarning("TrackOnTwoVertex") << "a track is shared by at least two verteces. Used to be an assert";
57  return iVertex;
58  }
59  // no vertex found with this track.
60 
61  // optional: as a secondary solution, associate the closest vertex in z
63  double dzmin = 10000;
64  double ztrack = pfcand.vertex().z();
65  bool foundVertex = false;
66  index = 0;
67  for (auto iv = vertices.begin(); iv != vertices.end(); ++iv, ++index) {
68  double dz = fabs(ztrack - iv->z());
69  if (dz < dzmin) {
70  dzmin = dz;
71  iVertex = index;
72  foundVertex = true;
73  }
74  }
75 
76  if (foundVertex)
77  return iVertex;
78  }
79 
80  return -1;
81 }
const double w
Definition: UKUtility.cc:23
reco::TrackRef trackRef() const
Definition: PFCandidate.cc:408
const Point & vertex() const override
vertex position (overwritten by PF...)
Definition: PFCandidate.cc:602
bool checkClosestZVertex_
use the closest z vertex if a track is not in a vertex
Definition: PFPileUpAlgo.h:40
const PFCollection& PFPileUpAlgo::getPFCandidatesFromPU ( ) const
inline

Definition at line 32 of file PFPileUpAlgo.h.

References pfCandidatesFromPU_.

32 { return pfCandidatesFromPU_; }
PFCollection pfCandidatesFromPU_
Definition: PFPileUpAlgo.h:46
const PFCollection& PFPileUpAlgo::getPFCandidatesFromVtx ( ) const
inline
void PFPileUpAlgo::process ( const PFCollection pfCandidates,
const reco::VertexCollection vertices 
)

Definition at line 5 of file PFPileUpAlgo.cc.

References chargedHadronVertex(), gather_cfg::cout, reco::PFCandidate::h, mps_fire::i, reco::PFCandidate::particleId(), pfCandidatesFromPU_, pfCandidatesFromVtx_, and verbose_.

Referenced by Vispa.Plugins.ConfigEditor.ConfigDataAccessor.ConfigDataAccessor::dumpPython(), Vispa.Plugins.ConfigEditor.ConfigDataAccessor.ConfigDataAccessor::open(), Vispa.Plugins.ConfigEditor.ConfigDataAccessor.ConfigDataAccessor::outputEventContent(), Vispa.Plugins.ConfigEditor.ConfigDataAccessor.ConfigDataAccessor::setProcess(), Vispa.Plugins.ConfigEditor.ConfigDataAccessor.ConfigDataAccessor::setProperty(), and ~PFPileUpAlgo().

5  {
6  pfCandidatesFromVtx_.clear();
7  pfCandidatesFromPU_.clear();
8 
9  for (unsigned i = 0; i < pfCandidates.size(); i++) {
10  const reco::PFCandidate& cand = *(pfCandidates[i]);
11 
12  int ivertex;
13 
14  switch (cand.particleId()) {
16  ivertex = chargedHadronVertex(vertices, cand);
17  break;
18  default:
19  continue;
20  }
21 
22  // no associated vertex, or primary vertex
23  // not pile-up
24  if (ivertex == -1 || ivertex == 0) {
25  if (verbose_)
26  std::cout << "VTX " << i << " " << *(pfCandidates[i]) << std::endl;
28  } else {
29  if (verbose_)
30  std::cout << "PU " << i << " " << *(pfCandidates[i]) << std::endl;
31  // associated to a vertex
33  }
34  }
35 }
PFCollection pfCandidatesFromVtx_
Definition: PFPileUpAlgo.h:45
bool verbose_
verbose ?
Definition: PFPileUpAlgo.h:43
PFCollection pfCandidatesFromPU_
Definition: PFPileUpAlgo.h:46
int chargedHadronVertex(const reco::VertexCollection &vertices, const reco::PFCandidate &pfcand) const
Definition: PFPileUpAlgo.cc:37
Particle reconstructed by the particle flow algorithm.
Definition: PFCandidate.h:40
virtual ParticleType particleId() const
Definition: PFCandidate.h:366
void PFPileUpAlgo::setCheckClosestZVertex ( bool  val)
inline

Definition at line 30 of file PFPileUpAlgo.h.

References checkClosestZVertex_, and heppy_batch::val.

bool checkClosestZVertex_
use the closest z vertex if a track is not in a vertex
Definition: PFPileUpAlgo.h:40
void PFPileUpAlgo::setVerbose ( bool  verbose)
inline

Definition at line 28 of file PFPileUpAlgo.h.

References verbose, and verbose_.

28 { verbose_ = verbose; }
static int verbose
bool verbose_
verbose ?
Definition: PFPileUpAlgo.h:43

Member Data Documentation

bool PFPileUpAlgo::checkClosestZVertex_
private

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

Definition at line 40 of file PFPileUpAlgo.h.

Referenced by chargedHadronVertex(), and setCheckClosestZVertex().

PFCollection PFPileUpAlgo::pfCandidatesFromPU_
private

Definition at line 46 of file PFPileUpAlgo.h.

Referenced by getPFCandidatesFromPU(), and process().

PFCollection PFPileUpAlgo::pfCandidatesFromVtx_
private

Definition at line 45 of file PFPileUpAlgo.h.

Referenced by getPFCandidatesFromVtx(), and process().

bool PFPileUpAlgo::verbose_
private

verbose ?

Definition at line 43 of file PFPileUpAlgo.h.

Referenced by process(), and setVerbose().