CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
Candidate.h
Go to the documentation of this file.
1 #ifndef Candidate_Candidate_h
2 #define Candidate_Candidate_h
3 
16 #include "boost/iterator/filter_iterator.hpp"
17 
21 #include "Rtypes.h"
22 
24 
25 class OverlapChecker;
26 
27 namespace reco {
28 
29  class Candidate {
30  public:
31  typedef size_t size_type;
34 
36  typedef int Charge;
45 
46  enum { dimension = 3 };
50  enum { size = dimension * (dimension + 1)/2 };
52  typedef unsigned int index;
53 
55  Candidate() {};
57  virtual ~Candidate();
59  virtual int charge() const = 0;
61  virtual void setCharge( Charge q ) = 0;
63  virtual int threeCharge() const = 0;
65  virtual void setThreeCharge( Charge qx3 ) = 0;
67  virtual const LorentzVector & p4() const = 0;
69  virtual const PolarLorentzVector & polarP4() const = 0;
71  virtual Vector momentum() const = 0;
74  virtual Vector boostToCM() const = 0;
76  virtual double p() const = 0;
78  virtual double energy() const = 0;
80  virtual double et() const = 0;
82  virtual double mass() const = 0;
84  virtual double massSqr() const = 0;
86  virtual double mt() const = 0;
88  virtual double mtSqr() const = 0;
90  virtual double px() const = 0;
92  virtual double py() const = 0;
94  virtual double pz() const = 0;
96  virtual double pt() const = 0;
98  virtual double phi() const = 0;
100  virtual double theta() const = 0;
102  virtual double eta() const = 0;
104  virtual double rapidity() const = 0;
106  virtual double y() const = 0;
108  virtual void setP4( const LorentzVector & p4 ) = 0;
110  virtual void setP4( const PolarLorentzVector & p4 ) = 0;
112  virtual void setMass( double m ) = 0;
113  virtual void setPz( double pz ) = 0;
115  virtual const Point & vertex() const = 0;
117  virtual double vx() const = 0;
119  virtual double vy() const = 0;
121  virtual double vz() const = 0;
123  virtual void setVertex( const Point & vertex ) = 0;
125  virtual int pdgId() const = 0;
126  // set PDG identifier
127  virtual void setPdgId( int pdgId ) = 0;
129  virtual int status() const = 0;
131  virtual void setStatus( int status ) = 0;
133  virtual void setLongLived() = 0;
135  virtual bool longLived() const = 0;
137  virtual void setMassConstraint() = 0;
139  virtual bool massConstraint() const = 0;
141  virtual Candidate * clone() const = 0;
143  virtual const_iterator begin() const = 0;
145  virtual const_iterator end() const = 0;
147  virtual iterator begin() = 0;
149  virtual iterator end() = 0;
151  virtual size_type numberOfDaughters() const = 0;
153  virtual const Candidate * daughter( size_type i ) const = 0;
155  virtual Candidate * daughter( size_type i ) = 0;
157  virtual Candidate * daughter(const std::string& s ) = 0;
159  virtual const Candidate * daughter(const std::string& s ) const = 0;
161  virtual size_type numberOfMothers() const = 0;
163  virtual const Candidate * mother( size_type i = 0 ) const = 0;
166  virtual size_t numberOfSourceCandidatePtrs() const = 0;
170  return CandidatePtr();
171  }
181  virtual void setSourceCandidatePtr( const CandidatePtr& ptr ) {};
182 
184  virtual double vertexChi2() const = 0;
191  virtual double vertexNdof() const = 0;
193  virtual double vertexNormalizedChi2() const = 0;
195  virtual double vertexCovariance(int i, int j) const = 0;
198  virtual void fillVertexCovariance(CovarianceMatrix & v) const = 0;
201  virtual bool hasMasterClone() const = 0;
204  virtual const CandidateBaseRef & masterClone() const = 0;
207  virtual bool hasMasterClonePtr() const = 0;
210  virtual const CandidatePtr & masterClonePtr() const = 0;
212  template<typename Ref>
213  Ref masterRef() const { return masterClone().template castTo<Ref>(); }
215 
216  template<typename T> T get() const {
217  if ( hasMasterClone() ) return masterClone()->get<T>();
218  else return reco::get<T>( * this );
219  }
221  template<typename T, typename Tag> T get() const {
222  if ( hasMasterClone() ) return masterClone()->get<T, Tag>();
223  else return reco::get<T, Tag>( * this );
224  }
226  template<typename T> T get( size_type i ) const {
227  if ( hasMasterClone() ) return masterClone()->get<T>( i );
228  else return reco::get<T>( * this, i );
229  }
231  template<typename T, typename Tag> T get( size_type i ) const {
232  if ( hasMasterClone() ) return masterClone()->get<T, Tag>( i );
233  else return reco::get<T, Tag>( * this, i );
234  }
236  template<typename T> size_type numberOf() const {
237  if ( hasMasterClone() ) return masterClone()->numberOf<T>();
238  else return reco::numberOf<T>( * this );
239  }
241  template<typename T, typename Tag> size_type numberOf() const {
242  if ( hasMasterClone() ) return masterClone()->numberOf<T, Tag>();
243  else return reco::numberOf<T, Tag>( * this );
244  }
245 
246  template<typename S>
248  typedef boost::filter_iterator<S, const_iterator> type;
249  };
250 
251  template<typename S>
252  typename daughter_iterator<S>::type beginFilter( const S & s ) const {
253  return boost::make_filter_iterator(s, begin(), end());
254  }
255  template<typename S>
256  typename daughter_iterator<S>::type endFilter( const S & s ) const {
257  return boost::make_filter_iterator(s, end(), end());
258  }
259 
260  virtual bool isElectron() const = 0;
261  virtual bool isMuon() const = 0;
262  virtual bool isStandAloneMuon() const = 0;
263  virtual bool isGlobalMuon() const = 0;
264  virtual bool isTrackerMuon() const = 0;
265  virtual bool isCaloMuon() const = 0;
266  virtual bool isPhoton() const = 0;
267  virtual bool isConvertedPhoton() const = 0;
268  virtual bool isJet() const = 0;
269 
270  protected:
272  virtual bool overlap( const Candidate & ) const = 0;
273  template<typename, typename, typename> friend struct component;
274  friend class ::OverlapChecker;
275  friend class ShallowCloneCandidate;
277 
278  };
279 
280 }
281 
282 #endif
virtual double massSqr() const =0
mass squared
int Charge
electric charge type
Definition: Candidate.h:36
daughter_iterator< S >::type endFilter(const S &s) const
Definition: Candidate.h:256
int i
Definition: DBlmapReader.cc:9
virtual double energy() const =0
energy
virtual const Candidate * daughter(size_type i) const =0
return daughter at a given position, i = 0, ... numberOfDaughters() - 1 (read only mode) ...
virtual bool isJet() const =0
math::XYZVector Vector
point in the space
Definition: Candidate.h:44
virtual void setSourceCandidatePtr(const CandidatePtr &ptr)
Set the ptr to the source Candidate.
Definition: Candidate.h:181
virtual void fillVertexCovariance(CovarianceMatrix &v) const =0
virtual const Candidate * mother(size_type i=0) const =0
return pointer to mother
size_t size_type
Definition: Candidate.h:31
virtual bool isConvertedPhoton() const =0
virtual void setP4(const LorentzVector &p4)=0
set 4-momentum
virtual double et() const =0
transverse energy
candidate::const_iterator const_iterator
Definition: Candidate.h:32
virtual double pt() const =0
transverse momentum
virtual CandidatePtr sourceCandidatePtr(size_type i) const
Definition: Candidate.h:169
virtual int threeCharge() const =0
electric charge
virtual double mass() const =0
mass
virtual int status() const =0
status word
virtual size_type numberOfMothers() const =0
number of mothers (zero or one in most of but not all the cases)
virtual double pz() const =0
z coordinate of momentum vector
math::XYZTLorentzVector LorentzVector
virtual void setMassConstraint()=0
set mass constraint flag
virtual bool massConstraint() const =0
do mass constraint?
virtual double vx() const =0
x coordinate of vertex position
virtual const CandidatePtr & masterClonePtr() const =0
virtual double y() const =0
rapidity
virtual double rapidity() const =0
rapidity
ErrorD< N >::type type
Definition: Error.h:30
virtual const PolarLorentzVector & polarP4() const =0
four-momentum Lorentz vector
virtual void setPdgId(int pdgId)=0
virtual double vy() const =0
y coordinate of vertex position
virtual bool isPhoton() const =0
PtEtaPhiMLorentzVectorD PtEtaPhiMLorentzVector
Lorentz vector with cartesian internal representation.
Definition: LorentzVector.h:26
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
Definition: LorentzVector.h:30
virtual size_type numberOfDaughters() const =0
number of daughters
virtual double p() const =0
magnitude of momentum vector
virtual bool hasMasterClone() const =0
virtual bool isCaloMuon() const =0
virtual Vector momentum() const =0
spatial momentum vector
Ref masterRef() const
cast master clone reference to a concrete type
Definition: Candidate.h:213
virtual double mt() const =0
transverse mass
fixed size vector
Definition: Vector.h:23
virtual const_iterator end() const =0
last daughter const_iterator
virtual double theta() const =0
momentum polar angle
virtual double vertexChi2() const =0
chi-squares
virtual bool isStandAloneMuon() const =0
virtual void setVertex(const Point &vertex)=0
set vertex
math::XYZPoint Point
int j
Definition: DBlmapReader.cc:9
virtual const Point & vertex() const =0
vertex position
virtual int charge() const =0
electric charge
virtual void setPz(double pz)=0
size_type numberOf() const
number of components
Definition: Candidate.h:236
virtual double py() const =0
y coordinate of momentum vector
virtual void setStatus(int status)=0
set status word
size_type numberOf() const
number of components
Definition: Candidate.h:241
virtual double vertexNormalizedChi2() const =0
chi-squared divided by n.d.o.f.
virtual void setThreeCharge(Charge qx3)=0
set electric charge
virtual void setLongLived()=0
set long lived flag
virtual double px() const =0
x coordinate of momentum vector
boost::filter_iterator< S, const_iterator > type
Definition: Candidate.h:248
virtual bool hasMasterClonePtr() const =0
virtual int pdgId() const =0
PDG identifier.
virtual Candidate * clone() const =0
returns a clone of the Candidate object
candidate::iterator iterator
Definition: Candidate.h:33
unsigned int index
index type
Definition: Candidate.h:52
edm::Ptr< Candidate > CandidatePtr
persistent reference to an object in a collection of Candidate objects
Definition: CandidateFwd.h:25
virtual bool isMuon() const =0
virtual ~Candidate()
destructor
Definition: Candidate.cc:5
Candidate()
default constructor
Definition: Candidate.h:55
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:31
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:13
virtual CovarianceMatrix vertexCovariance() const
fill SMatrix
Definition: Candidate.h:197
virtual double mtSqr() const =0
transverse mass squared
math::XYZTLorentzVector LorentzVector
Lorentz vector.
Definition: Candidate.h:38
virtual double vz() const =0
z coordinate of vertex position
virtual const_iterator begin() const =0
first daughter const_iterator
math::XYZPoint Point
point in the space
Definition: Candidate.h:42
virtual bool longLived() const =0
is long lived?
virtual bool overlap(const Candidate &) const =0
check overlap with another Candidate
virtual bool isElectron() const =0
virtual bool isTrackerMuon() const =0
math::Error< dimension >::type CovarianceMatrix
covariance error matrix (3x3)
Definition: Candidate.h:48
long double T
virtual void setCharge(Charge q)=0
set electric charge
virtual size_t numberOfSourceCandidatePtrs() const =0
virtual Vector boostToCM() const =0
value_type const * get() const
Definition: RefToBase.h:212
virtual void setMass(double m)=0
set particle mass
mathSSE::Vec4< T > v
daughter_iterator< S >::type beginFilter(const S &s) const
Definition: Candidate.h:252
virtual double phi() const =0
momentum azimuthal angle
virtual double eta() const =0
momentum pseudorapidity
virtual double vertexNdof() const =0
virtual const LorentzVector & p4() const =0
four-momentum Lorentz vector
virtual bool isGlobalMuon() const =0
virtual const CandidateBaseRef & masterClone() const =0
math::PtEtaPhiMLorentzVector PolarLorentzVector
Lorentz vector.
Definition: Candidate.h:40