CMS 3D CMS Logo

TrackingParticle.h
Go to the documentation of this file.
1 #ifndef SimDataFormats_TrackingParticle_h
2 #define SimDataFormats_TrackingParticle_h
3 
4 #include <vector>
11 
12 //
13 // Forward declarations
14 //
15 class TrackingVertex;
16 class SimTrack;
17 class EncodedEventId;
18 
30  friend std::ostream& operator<<(std::ostream& s, TrackingParticle const& tp);
31 
32 public:
33  typedef int Charge;
38 
41  typedef std::vector<SimTrack>::const_iterator g4t_iterator;
42 
51 
53 
54  // destructor
56 
61  int pdgId() const {
62  if (genParticles_.empty())
63  return g4Tracks_[0].type();
64  else
65  return (*genParticles_.begin())->pdgId();
66  }
67 
72  EncodedEventId eventId() const { return g4Tracks_[0].eventId(); }
73 
74  // Setters for G4 and reco::GenParticle
75  void addGenParticle(const reco::GenParticleRef& ref);
76  void addG4Track(const SimTrack& t);
78  genp_iterator genParticle_begin() const;
79  genp_iterator genParticle_end() const;
80  g4t_iterator g4Track_begin() const;
81  g4t_iterator g4Track_end() const;
82  void setParentVertex(const TrackingVertexRef& ref);
83  void addDecayVertex(const TrackingVertexRef& ref);
84  void clearParentVertex();
85  void clearDecayVertices();
86 
87  // Getters for Embd and Sim Tracks
89  const std::vector<SimTrack>& g4Tracks() const { return g4Tracks_; }
90  const TrackingVertexRef& parentVertex() const { return parentVertex_; }
91 
92  // Accessors for vector of decay vertices
96 
98  float charge() const { return g4Tracks_[0].charge(); }
100  int threeCharge() const { return lrintf(3.f * charge()); }
101 
103  const LorentzVector& p4() const { return g4Tracks_[0].momentum(); }
104 
106  Vector momentum() const { return p4().Vect(); }
107 
109  Vector boostToCM() const { return p4().BoostToCM(); }
110 
112  double p() const { return p4().P(); }
113 
115  double energy() const { return p4().E(); }
116 
118  double et() const { return p4().Et(); }
119 
121  double mass() const { return p4().M(); }
122 
124  double massSqr() const { return pow(mass(), 2); }
125 
127  double mt() const { return p4().Mt(); }
128 
130  double mtSqr() const { return p4().Mt2(); }
131 
133  double px() const { return p4().Px(); }
134 
136  double py() const { return p4().Py(); }
137 
139  double pz() const { return p4().Pz(); }
140 
142  double pt() const { return p4().Pt(); }
143 
145  double phi() const { return p4().Phi(); }
146 
148  double theta() const { return p4().Theta(); }
149 
151  double eta() const { return p4().Eta(); }
152 
154  double rapidity() const { return p4().Rapidity(); }
155 
157  double y() const { return rapidity(); }
158 
160  Point vertex() const {
161  const TrackingVertex::LorentzVector& p = (*parentVertex_).position();
162  return Point(p.x(), p.y(), p.z());
163  }
164 
166  double vx() const {
167  const TrackingVertex& r = (*parentVertex_);
168  return r.position().X();
169  }
170 
172  double vy() const {
173  const TrackingVertex& r = (*parentVertex_);
174  return r.position().Y();
175  }
176  // @brief z coordinate of parent vertex position
177  double vz() const {
178  const TrackingVertex& r = (*parentVertex_);
179  return r.position().Z();
180  }
181 
185  int status() const { return genParticles_.empty() ? -99 : (*genParticles_[0]).status(); }
186 
187  static const unsigned int longLivedTag;
188 
190  bool longLived() const { return status() & longLivedTag; }
191 
195  int numberOfHits() const { return numberOfHits_; }
196 
201 
204  int matchedHit() const;
205 
210 
211  void setNumberOfHits(int numberOfHits);
214 
215 private:
219 
221  std::vector<SimTrack> g4Tracks_;
223 
224  // Source and decay vertices
227 };
228 
229 #endif // SimDataFormats_TrackingParticle_H
const LorentzVector & p4() const
Four-momentum Lorentz vector. Note this is taken from the first SimTrack only.
type
Definition: HCALResponse.h:21
math::XYZTLorentzVectorD LorentzVector
Lorentz vector.
genp_iterator genParticle_begin() const
iterators
tv_iterator decayVertices_end() const
tv_iterator decayVertices_begin() const
const std::vector< SimTrack > & g4Tracks() const
ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > XYZTLorentzVectorD
Lorentz vector with cylindrical internal representation using pseudorapidity.
Definition: LorentzVector.h:14
TrackingVertexRefVector decayVertices_
Vector boostToCM() const
Vector to boost to the particle centre of mass frame.
Vector momentum() const
spatial momentum vector
const reco::GenParticleRefVector & genParticles() const
g4t_iterator g4Track_begin() const
int pdgId() const
PDG ID.
TrackingParticle()
Default constructor. Note that the object will be useless until it is provided with a SimTrack and pa...
double pt() const
Transverse momentum. Note this is taken from the first SimTrack only.
double py() const
y coordinate of momentum vector. Note this is taken from the first SimTrack only. ...
int matchedHit() const
int numberOfTrackerHits_
The number of tracker only hits.
const_iterator end() const
Termination of iteration.
Definition: RefVector.h:228
bool empty() const
Is the RefVector empty.
Definition: RefVector.h:99
int status() const
Status word.
const_iterator begin() const
Initialize an iterator over the RefVector.
Definition: RefVector.h:223
void setParentVertex(const TrackingVertexRef &ref)
math::XYZPointD Point
point in the space
PtEtaPhiMLorentzVectorD PtEtaPhiMLorentzVector
Lorentz vector with cartesian internal representation.
Definition: LorentzVector.h:25
void addGenParticle(const reco::GenParticleRef &ref)
math::XYZTLorentzVectorD LorentzVector
reco::GenParticleRefVector genParticles_
double pz() const
z coordinate of momentum vector. Note this is taken from the first SimTrack only. ...
float charge() const
Electric charge. Note this is taken from the first SimTrack only.
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > XYZVectorD
spatial vector with cartesian internal representation
Definition: Vector3D.h:8
double mtSqr() const
Transverse mass squared. Note this is taken from the first SimTrack only.
bool longLived() const
is long lived?
double vy() const
y coordinate of parent vertex position
double y() const
Same as rapidity().
double massSqr() const
Mass squared. Note this is taken from the first SimTrack only.
void addG4Track(const SimTrack &t)
int numberOfTrackerLayers() const
The number of tracker layers with a hit.
int numberOfHits_
The total number of hits.
double mt() const
Transverse mass. Note this is taken from the first SimTrack only.
std::vector< SimTrack > g4Tracks_
references to G4 and reco::GenParticle tracks
double p() const
Magnitude of momentum vector. Note this is taken from the first SimTrack only.
double f[11][100]
const TrackingVertexRef & parentVertex() const
std::vector< SimTrack >::const_iterator g4t_iterator
double mass() const
Mass. Note this is taken from the first SimTrack only.
genp_iterator genParticle_end() const
ROOT::Math::PositionVector3D< ROOT::Math::Cartesian3D< double > > XYZPointD
point in space with cartesian internal representation
Definition: Point3D.h:8
math::PtEtaPhiMLorentzVector PolarLorentzVector
Lorentz vector.
void addDecayVertex(const TrackingVertexRef &ref)
double vx() const
x coordinate of parent vertex position
int numberOfHits() const
Gives the total number of hits, including muon hits. Hits on overlaps in the same layer count separat...
double eta() const
Momentum pseudorapidity. Note this is taken from the first SimTrack only.
double rapidity() const
Rapidity. Note this is taken from the first SimTrack only.
Point vertex() const
Parent vertex position.
EncodedEventId eventId() const
Signal source, crossing number.
void setNumberOfTrackerHits(int numberOfTrackerHits)
int Charge
electric charge type
int numberOfTrackerLayers_
The number of tracker layers with hits. Equivalent to the old matchedHit.
static const unsigned int longLivedTag
long lived flag
Monte Carlo truth information used for tracking validation.
double px() const
x coordinate of momentum vector. Note this is taken from the first SimTrack only. ...
int numberOfTrackerHits() const
The number of hits in the tracker. Hits on overlaps in the same layer count separately.
reco::GenParticleRefVector::iterator genp_iterator
reference to reco::GenParticle
void setNumberOfTrackerLayers(const int numberOfTrackerLayers)
math::XYZVectorD Vector
point in the space
int threeCharge() const
Gives charge in unit of quark charge (should be 3 times "charge()")
g4t_iterator g4Track_end() const
const TrackingVertexRefVector & decayVertices() const
double et() const
Transverse energy. Note this is taken from the first SimTrack only.
TrackingVertexRef parentVertex_
double energy() const
Energy. Note this is taken from the first SimTrack only.
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:30
double phi() const
Momentum azimuthal angle. Note this is taken from the first SimTrack only.
friend std::ostream & operator<<(std::ostream &s, TrackingParticle const &tp)
double theta() const
Momentum polar angle. Note this is taken from the first SimTrack only.
void setNumberOfHits(int numberOfHits)
double vz() const
const LorentzVector & position() const