CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
PackedCandidate.h
Go to the documentation of this file.
1 #ifndef __DataFormats_PatCandidates_PackedCandidate_h__
2 #define __DataFormats_PatCandidates_PackedCandidate_h__
3 
11 /* #include "DataFormats/Math/interface/PtEtaPhiMass.h" */
12 
13 namespace pat {
15  public:
26 
27  typedef unsigned int index;
28 
31  p4_(0,0,0,0), p4c_(0,0,0,0), vertex_(0,0,0), dphi_(0), pdgId_(0),
32  qualityFlags_(0), pvRefKey_(reco::VertexRef::invalidKey()),
34  dzdz_(0),dxydz_(0),dlambdadz_(0), dphidxy_(0),dptdpt_(0),detadeta_(0),
36 
37  explicit PackedCandidate( const reco::Candidate & c,
38  const reco::VertexRefProd &pvRefProd,
39  reco::VertexRef::key_type pvRefKey) :
40  p4_(c.pt(), c.eta(), c.phi(), c.mass()), p4c_(p4_), vertex_(c.vertex()),
41  dphi_(0), pdgId_(c.pdgId()), qualityFlags_(0), pvRefProd_(pvRefProd),
45  normalizedChi2_(0) {
46  packBoth();
47  }
48 
49  explicit PackedCandidate( const PolarLorentzVector &p4, const Point &vtx,
50  float phiAtVtx, int pdgId,
51  const reco::VertexRefProd &pvRefProd,
52  reco::VertexRef::key_type pvRefKey) :
53  p4_(p4), p4c_(p4_), vertex_(vtx),
54  dphi_(reco::deltaPhi(phiAtVtx,p4_.phi())), pdgId_(pdgId),
55  qualityFlags_(0), pvRefProd_(pvRefProd), pvRefKey_(pvRefKey),
57  dxydxy_(0),dzdz_(0),dxydz_(0),dlambdadz_(0),dphidxy_(0),dptdpt_(0),
59  packBoth();
60  }
61 
62  explicit PackedCandidate( const LorentzVector &p4, const Point &vtx,
63  float phiAtVtx, int pdgId,
64  const reco::VertexRefProd &pvRefProd,
65  reco::VertexRef::key_type pvRefKey) :
66  p4_(p4.Pt(), p4.Eta(), p4.Phi(), p4.M()), p4c_(p4), vertex_(vtx),
67  dphi_(reco::deltaPhi(phiAtVtx,p4_.phi())), pdgId_(pdgId), qualityFlags_(0),
68  pvRefProd_(pvRefProd), pvRefKey_(pvRefKey), unpacked_(true),
72  packBoth();
73  }
74 
76  virtual ~PackedCandidate();
78  virtual size_t numberOfDaughters() const;
80  virtual const reco::Candidate * daughter( size_type ) const;
82  virtual size_t numberOfMothers() const;
84  virtual const reco::Candidate * mother( size_type ) const;
86  virtual reco::Candidate * daughter( size_type );
88  virtual reco::Candidate * daughter(const std::string& s );
90  virtual const reco::Candidate * daughter(const std::string& s ) const;
93  virtual size_t numberOfSourceCandidatePtrs() const {return 0;}
97  return reco::CandidatePtr();
98  }
99 
101  virtual int charge() const {
102  switch (abs(pdgId_)) {
103  case 211: return (pdgId_>0)-(pdgId_<0);
104  case 11: return (-1)*(pdgId_>0)+(pdgId_<0); //e
105  case 13: return (-1)*(pdgId_>0)+(pdgId_<0); //mu
106  case 15: return (-1)*(pdgId_>0)+(pdgId_<0); //tau
107  case 24: return (pdgId_>0)-(pdgId_<0); //W
108  default: return 0; //FIXME: charge is not defined
109  }
110  }
112  virtual void setCharge( int charge) {}
114  virtual int threeCharge() const {return charge()*3;}
116  virtual void setThreeCharge( int threecharge) {}
118  virtual const LorentzVector & p4() const { if (!unpacked_) unpack(); return p4c_; }
120  virtual const PolarLorentzVector & polarP4() const { if (!unpacked_) unpack(); return p4_; }
122  virtual Vector momentum() const { if (!unpacked_) unpack(); return p4c_.Vect(); }
125  virtual Vector boostToCM() const { if (!unpacked_) unpack(); return p4c_.BoostToCM(); }
127  virtual double p() const { if (!unpacked_) unpack(); return p4c_.P(); }
129  virtual double energy() const { if (!unpacked_) unpack(); return p4c_.E(); }
131  double et() const { return (pt()<=0) ? 0 : p4c_.Et(); }
133  double et2() const { return (pt()<=0) ? 0 : p4c_.Et2(); }
135  virtual double mass() const { if (!unpacked_) unpack(); return p4_.M(); }
137  virtual double massSqr() const { if (!unpacked_) unpack(); return p4_.M()*p4_.M(); }
138 
140  virtual double mt() const { if (!unpacked_) unpack(); return p4_.Mt(); }
142  virtual double mtSqr() const { if (!unpacked_) unpack(); return p4_.Mt2(); }
144  virtual double px() const { if (!unpacked_) unpack(); return p4c_.Px(); }
146  virtual double py() const { if (!unpacked_) unpack(); return p4c_.Py(); }
148  virtual double pz() const { if (!unpacked_) unpack(); return p4c_.Pz(); }
150  virtual double pt() const { if (!unpacked_) unpack(); return p4_.Pt();}
152  virtual double phi() const { if (!unpacked_) unpack(); return p4_.Phi(); }
154  virtual float phiAtVtx() const {
155  maybeUnpackBoth();
156  float ret = p4_.Phi() + dphi_;
157  while (ret > float(M_PI)) ret -= 2*float(M_PI);
158  while (ret < -float(M_PI)) ret += 2*float(M_PI);
159  return ret;
160  }
162  virtual double theta() const { if (!unpacked_) unpack(); return p4_.Theta(); }
164  virtual double eta() const { if (!unpacked_) unpack(); return p4_.Eta(); }
166  virtual double rapidity() const { if (!unpacked_) unpack(); return p4_.Rapidity(); }
168  virtual double y() const { if (!unpacked_) unpack(); return p4_.Rapidity(); }
170  virtual void setP4( const LorentzVector & p4 ) {
171  maybeUnpackBoth(); // changing px,py,pz changes also mapping between dxy,dz and x,y,z
172  p4_ = PolarLorentzVector(p4.Pt(), p4.Eta(), p4.Phi(), p4.M());
173  packBoth();
174  }
176  virtual void setP4( const PolarLorentzVector & p4 ) {
177  maybeUnpackBoth(); // changing px,py,pz changes also mapping between dxy,dz and x,y,z
178  p4_ = p4;
179  packBoth();
180  }
182  virtual void setMass( double m ) {
183  if (!unpacked_) unpack();
184  p4_ = PolarLorentzVector(p4_.Pt(), p4_.Eta(), p4_.Phi(), m);
185  pack();
186  }
187  virtual void setPz( double pz ) {
188  maybeUnpackBoth(); // changing px,py,pz changes also mapping between dxy,dz and x,y,z
189  p4c_ = LorentzVector(p4c_.Px(), p4c_.Py(), pz, p4c_.E());
190  p4_ = PolarLorentzVector(p4c_.Pt(), p4c_.Eta(), p4c_.Phi(), p4c_.M());
191  packBoth();
192  }
194 
195  virtual void setTrackProperties( const reco::Track & tk, const reco::Track::CovarianceMatrix & covariance) {
196  dxydxy_ = covariance(3,3);
197  dxydz_ = covariance(3,4);
198  dzdz_ = covariance(4,4);
199  dphidxy_ = covariance(2,3);
200  dlambdadz_ = covariance(1,4);
201  dptdpt_ = covariance(0,0)*pt()*pt();
202  detadeta_ = covariance(1,1);
203  dphidphi_ = covariance(2,2)*pt()*pt();
204 
206  int numberOfPixelHits_ = tk.hitPattern().numberOfValidPixelHits();
207  if (numberOfPixelHits_ > 7) numberOfPixelHits_ = 7;
208  int numberOfStripHits_ = tk.hitPattern().numberOfValidHits() - numberOfPixelHits_;
209  if (numberOfStripHits_ > 31) numberOfStripHits_ = 31;
210  packedHits_ = (numberOfPixelHits_&0x7) | (numberOfStripHits_ << 3);
211  packBoth();
212  }
213 
214  virtual void setTrackProperties( const reco::Track & tk ) {
216  }
217 
218  int numberOfPixelHits() const { return packedHits_ & 0x7; }
219  int numberOfHits() const { return (packedHits_ >> 3) + numberOfPixelHits(); }
220 
222  virtual const Point & vertex() const { maybeUnpackBoth(); return vertex_; }//{ if (fromPV_) return Point(0,0,0); else return Point(0,0,100); }
224  virtual double vx() const { maybeUnpackBoth(); return vertex_.X(); }//{ return 0; }
226  virtual double vy() const { maybeUnpackBoth(); return vertex_.Y(); }//{ return 0; }
228  virtual double vz() const { maybeUnpackBoth(); return vertex_.Z(); }//{ if (fromPV_) return 0; else return 100; }
230  virtual void setVertex( const Point & vertex ) { maybeUnpackBoth(); vertex_ = vertex; packVtx(); }
231 
233  enum PVAssoc { NoPV=0, PVLoose=1, PVTight=2, PVUsedInFit=3 } ;
234  const PVAssoc fromPV(size_t ipv=0) const {
235  reco::VertexRef pvRef = vertexRef();
236  if(pvAssociationQuality()==UsedInFitTight and pvRef.key()==ipv) return PVUsedInFit;
237  if(pvRef.key()==ipv or abs(pdgId())==13 or abs(pdgId())==11 ) return PVTight;
238  if(pvAssociationQuality() == CompatibilityBTag and std::abs(dzAssociatedPV()) > std::abs(dz(ipv))) return PVTight; // it is not closest, but at least prevents the B assignment stealing
239  if(pvAssociationQuality() < UsedInFitLoose or pvRef->ndof() < 4.0 ) return PVLoose;
240  return NoPV;
241  }
242 
248 
250 
252  virtual float dxy() const { maybeUnpackBoth(); return dxy_; }
254  virtual float dz(size_t ipv=0) const { maybeUnpackBoth(); return dz_ + (*pvRefProd_)[pvRefKey_].position().z()-(*pvRefProd_)[ipv].position().z(); }
256  virtual float dzAssociatedPV() const { maybeUnpackBoth(); return dz_; }
258  virtual float dxy(const Point &p) const ;
260  virtual float dz(const Point &p) const ;
261 
263  virtual float dzError() const { maybeUnpackBoth(); return sqrt(dzdz_); }
265  virtual float dxyError() const { maybeUnpackBoth(); return sqrt(dxydxy_); }
266 
267 
269  virtual const reco::Track & pseudoTrack() const { if (!unpackedTrk_) unpackTrk(); return track_; }
270 
272  virtual const reco::Track * bestTrack() const {
273  if (packedHits_!=0) {
274  if (!unpackedTrk_) unpackTrk();
275  return &track_;
276  }
277  else
278  return nullptr;
279  }
280 
285 
289  noLostInnerHits=0, // it could still not have a hit in the first layer, e.g. if it crosses an inactive sensor
292  };
295  }
297  int lost = hits; if (lost > 2) lost = 2; // protection against misuse
298  lost++; // shift so it's 0 .. 3 instead of (-1) .. 2
300  }
301 
302  void setMuonID(bool isStandAlone, bool isGlobal) {
303  int16_t muonFlags = isStandAlone | (2*isGlobal);
305  }
306 
308  virtual int pdgId() const { return pdgId_; }
309  // set PDG identifier
310  virtual void setPdgId( int pdgId ) { pdgId_ = pdgId; }
312  virtual int status() const { return qualityFlags_; } /*FIXME*/
314  virtual void setStatus( int status ) {} /*FIXME*/
316  static const unsigned int longLivedTag = 0; /*FIXME*/
318  virtual void setLongLived() {} /*FIXME*/
320  virtual bool longLived() const;
322  static const unsigned int massConstraintTag = 0; /*FIXME*/
324  virtual void setMassConstraint() {} /*FIXME*/
326  virtual bool massConstraint() const;
327 
329  virtual PackedCandidate * clone() const {
330  return new PackedCandidate( *this );
331  }
332 
334  virtual double vertexChi2() const;
341  virtual double vertexNdof() const;
343  virtual double vertexNormalizedChi2() const;
345  virtual double vertexCovariance(int i, int j) const;
349  virtual void fillVertexCovariance(CovarianceMatrix & v) const;
352  virtual bool hasMasterClone() const;
355  virtual const reco::CandidateBaseRef & masterClone() const;
358  virtual bool hasMasterClonePtr() const;
361 
362  virtual const reco::CandidatePtr & masterClonePtr() const;
363 
365  template<typename Ref>
366  Ref masterRef() const { return masterClone().template castTo<Ref>(); }
367 
368  virtual bool isElectron() const { return false; }
369  virtual bool isMuon() const { return false; }
370  virtual bool isStandAloneMuon() const { return ((qualityFlags_ & muonFlagsMask) >> muonFlagsShift) & 1; }
371  virtual bool isGlobalMuon() const { return ((qualityFlags_ & muonFlagsMask) >> muonFlagsShift) & 2; }
372  virtual bool isTrackerMuon() const { return false; }
373  virtual bool isCaloMuon() const { return false; }
374  virtual bool isPhoton() const { return false; }
375  virtual bool isConvertedPhoton() const { return false; }
376  virtual bool isJet() const { return false; }
377 
378  // puppiweights
379  void setPuppiWeight(float p, float p_nolep = 0.0);
380  float puppiWeight() const;
381  float puppiWeightNoLep() const;
382 
383  protected:
389  void pack(bool unpackAfterwards=true) ;
390  void unpack() const ;
391  void packVtx(bool unpackAfterwards=true) ;
392  void unpackVtx() const ;
393  void maybeUnpackBoth() const { if (!unpacked_) unpack(); if (!unpackedVtx_) unpackVtx(); }
394  void packBoth() { pack(false); packVtx(false); unpack(); unpackVtx(); } // do it this way, so that we don't loose precision on the angles before computing dxy,dz
395  void unpackTrk() const ;
396 
398  int8_t packedPuppiweightNoLepDiff_; // storing the DIFFERENCE of (all - "no lep") for compression optimization
403  mutable Point vertex_;
404  mutable float dxy_, dz_, dphi_;
408  int pdgId_;
409  uint16_t qualityFlags_;
413  // is the momentum p4 unpacked
414  mutable bool unpacked_;
415  // are the dxy, dz and vertex unpacked
416  mutable bool unpackedVtx_;
417  // is the track unpacked
418  mutable bool unpackedTrk_;
421  uint8_t packedHits_;
423  uint8_t normalizedChi2_;
424 // uint8_t numberOfPixelHits_;
425  // uint8_t numberOfHits_;
426 
428  virtual bool overlap( const reco::Candidate & ) const;
429  template<typename, typename, typename> friend struct component;
430  friend class ::OverlapChecker;
431  friend class ShallowCloneCandidate;
433 
439  };
440  };
441 
442  typedef std::vector<pat::PackedCandidate> PackedCandidateCollection;
445 }
446 
447 #endif
float puppiWeight() const
Set both weights at once (with option for only full PUPPI)
virtual float dz(size_t ipv=0) const
dz with respect to the PV[ipv]
virtual void setP4(const LorentzVector &p4)
set 4-momentum
void setMuonID(bool isStandAlone, bool isGlobal)
virtual void setVertex(const Point &vertex)
set vertex
int i
Definition: DBlmapReader.cc:9
virtual void setTrackProperties(const reco::Track &tk, const reco::Track::CovarianceMatrix &covariance)
set impact parameters covariance
virtual size_t numberOfMothers() const
number of mothers
virtual bool hasMasterClonePtr() const
virtual void setPdgId(int pdgId)
math::XYZVector Vector
point in the space
Definition: Candidate.h:43
float puppiWeightNoLep() const
Weight from full PUPPI.
void setPuppiWeight(float p, float p_nolep=0.0)
virtual float dzError() const
uncertainty on dz
int numberOfHits() const
size_t size_type
Definition: Candidate.h:30
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventIDconst &, edm::Timestampconst & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
double normalizedChi2() const
chi-squared divided by n.d.o.f. (or chi-squared * 1e6 if n.d.o.f. is zero)
Definition: TrackBase.h:524
virtual const reco::Track * bestTrack() const
return a pointer to the track if present. otherwise, return a null pointer
reco::VertexRef::key_type pvRefKey_
virtual bool isCaloMuon() const
PackedCandidate(const LorentzVector &p4, const Point &vtx, float phiAtVtx, int pdgId, const reco::VertexRefProd &pvRefProd, reco::VertexRef::key_type pvRefKey)
void maybeUnpackBoth() const
static const unsigned int longLivedTag
long lived flag
int numberOfValidHits() const
Definition: HitPattern.h:734
virtual double y() const
rapidity
virtual void fillVertexCovariance(CovarianceMatrix &v) const
fill SMatrix
static const unsigned int massConstraintTag
do mass constraint flag
virtual double mtSqr() const
transverse mass squared
std::vector< pat::PackedCandidate > PackedCandidateCollection
math::XYZPoint Point
point in the space
virtual double vertexNdof() const
virtual double pt() const
transverse momentum
virtual void setStatus(int status)
set status word
key_type key() const
Accessor for product key.
Definition: Ref.h:264
virtual double vx() const
x coordinate of vertex position
virtual bool overlap(const reco::Candidate &) const
check overlap with another Candidate
virtual bool isPhoton() const
virtual double eta() const
momentum pseudorapidity
virtual void setP4(const PolarLorentzVector &p4)
set 4-momentum
const reco::VertexRef vertexRef() const
void unpackVtx() const
math::PtEtaPhiMLorentzVector PolarLorentzVector
Lorentz vector.
PackedCandidate(const reco::Candidate &c, const reco::VertexRefProd &pvRefProd, reco::VertexRef::key_type pvRefKey)
uint16_t packedPt_
Weight from PUPPI removing leptons.
PackedCandidate(const PolarLorentzVector &p4, const Point &vtx, float phiAtVtx, int pdgId, const reco::VertexRefProd &pvRefProd, reco::VertexRef::key_type pvRefKey)
Ref masterRef() const
cast master clone reference to a concrete type
PolarLorentzVector p4_
the four vector
PtEtaPhiMLorentzVectorD PtEtaPhiMLorentzVector
Lorentz vector with cartesian internal representation.
Definition: LorentzVector.h:25
reco::CandidateCollection daughters
collection of daughter candidates
virtual const reco::Candidate * daughter(size_type) const
return daughter at a given position (throws an exception)
virtual double phi() const
momentum azimuthal angle
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
Definition: LorentzVector.h:29
virtual void setTrackProperties(const reco::Track &tk)
virtual bool isTrackerMuon() const
virtual void setLongLived()
set long lived flag
virtual double mass() const
mass
virtual bool isConvertedPhoton() const
friend struct component
virtual void setMassConstraint()
set mass constraint flag
virtual bool isMuon() const
reco::Track track_
reco::Track
const PVAssociationQuality pvAssociationQuality() const
virtual PackedCandidate * clone() const
returns a clone of the Candidate object
math::XYZTLorentzVector LorentzVector
Lorentz vector.
const PVAssoc fromPV(size_t ipv=0) const
CovarianceMatrix covariance() const
return track covariance matrix
Definition: TrackBase.h:694
T sqrt(T t)
Definition: SSEVec.h:48
virtual double py() const
y coordinate of momentum vector
bool trackHighPurity() const
true if the track had the highPurity quality bit
LostInnerHits lostInnerHits() const
virtual int status() const
status word
PackedCandidate()
default constructor
virtual double rapidity() const
rapidity
math::XYZPoint Point
virtual const reco::CandidateBaseRef & masterClone() const
edm::Ref< pat::PackedCandidateCollection > PackedCandidateRef
friend class ShallowCloneCandidate
virtual double energy() const
energy
double et2() const
transverse energy squared (use this for cuts)!
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
virtual bool isJet() const
int j
Definition: DBlmapReader.cc:9
virtual int charge() const
electric charge
virtual const reco::Track & pseudoTrack() const
Return reference to a pseudo track made with candidate kinematics, parameterized error for eta...
virtual double theta() const
momentum polar angle
virtual int threeCharge() const
electric charge
virtual double vertexNormalizedChi2() const
chi-squared divided by n.d.o.f.
Point vertex_
vertex position
virtual void setThreeCharge(int threecharge)
set electric charge
virtual void setPz(double pz)
virtual double mt() const
transverse mass
edm::Ref< VertexCollection > VertexRef
persistent reference to a Vertex
Definition: VertexFwd.h:13
virtual float dzAssociatedPV() const
dz with respect to the PV ref
int numberOfPixelHits() const
virtual const reco::CandidatePtr & masterClonePtr() const
#define M_PI
virtual double vy() const
y coordinate of vertex position
virtual const PolarLorentzVector & polarP4() const
four-momentum Lorentz vector
LostInnerHits
Enumerator specifying the.
uint8_t normalizedChi2_
track quality information
PVAssoc
This refers to the association to PV=ipv. &gt;=PVLoose corresponds to JME definition, &gt;=PVTight to isolation definition.
virtual size_t numberOfSourceCandidatePtrs() const
edm::Ptr< Candidate > CandidatePtr
persistent reference to an object in a collection of Candidate objects
Definition: CandidateFwd.h:25
virtual Vector momentum() const
spatial momentum vector
virtual bool isGlobalMuon() const
virtual bool massConstraint() const
do mass constraint?
const HitPattern & hitPattern() const
Access the hit pattern, indicating in which Tracker layers the track has hits.
Definition: TrackBase.h:421
float dxydxy_
IP covariance.
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:30
virtual double massSqr() const
mass squared
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
edm::RefVector< pat::PackedCandidateCollection > PackedCandidateRefVector
virtual Vector boostToCM() const
uint16_t packedCovarianceDxyDxy_
virtual double vz() const
z coordinate of vertex position
virtual void setMass(double m)
set particle mass
virtual reco::CandidatePtr sourceCandidatePtr(size_type i) const
virtual float phiAtVtx() const
momentum azimuthal angle from the track (normally identical to phi())
math::XYZTLorentzVector LorentzVector
Lorentz vector.
Definition: Candidate.h:37
int pdgId_
PDG identifier.
virtual const Point & vertex() const
vertex position
virtual size_t numberOfDaughters() const
number of daughters
CovarianceMatrix vertexCovariance() const
return SMatrix
virtual bool isStandAloneMuon() const
friend class ShallowClonePtrCandidate
virtual bool longLived() const
is long lived?
virtual const reco::Candidate * mother(size_type) const
return mother at a given position (throws an exception)
virtual void setCharge(int charge)
set electric charge
void packVtx(bool unpackAfterwards=true)
void setLostInnerHits(LostInnerHits hits)
int numberOfValidPixelHits() const
Definition: HitPattern.h:749
virtual const LorentzVector & p4() const
four-momentum Lorentz vecto r
math::XYZPoint Point
point in the space
Definition: Candidate.h:41
void pack(bool unpackAfterwards=true)
virtual bool isElectron() const
double et() const
transverse energy
virtual double px() const
x coordinate of momentum vector
volatile std::atomic< bool > shutdown_flag false
virtual float dxy() const
dxy with respect to the PV ref
virtual double vertexChi2() const
chi-squares
void setTrackHighPurity(bool highPurity)
set to true if the track had the highPurity quality bit
virtual ~PackedCandidate()
destructor
virtual int pdgId() const
PDG identifier.
virtual double pz() const
z coordinate of momentum vector
virtual float dxyError() const
uncertainty on dxy
math::XYZVector Vector
point in the space
boost::remove_cv< typename boost::remove_reference< argument_type >::type >::type key_type
Definition: Ref.h:168
math::Error< dimension >::type CovarianceMatrix
5 parameter covariance matrix
Definition: TrackBase.h:77
virtual double p() const
magnitude of momentum vector
virtual bool hasMasterClone() const
reco::VertexRefProd pvRefProd_
Use these to build a Ref to primary vertex.
void setAssociationQuality(PVAssociationQuality q)
math::PtEtaPhiMLorentzVector PolarLorentzVector
Lorentz vector.
Definition: Candidate.h:39