ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/grimes/TrackingTruthCode/SimDataFormats/TrackingAnalysis/interface/ParticleBase.h
Revision: 1.1
Committed: Wed Mar 20 17:13:47 2013 UTC (12 years, 1 month ago) by grimes
Content type: text/plain
Branch: MAIN
CVS Tags: OldTrackingParticles_v0, base_6_0_0, HEAD
Branch point for: NewTrackingParticles
Error occurred while calculating annotation data.
Log Message:
First commit of the base 6.0.0 files

File Contents

# Content
1 #ifndef SimDataFormats_ParticleBase_h
2 #define SimDataFormats_ParticleBase_h
3 /** \class reco::Particle
4 *
5 * Base class describing a generic reconstructed particle
6 * its main subclass is Candidate
7 *
8 * \author Luca Lista, INFN
9 *
10 * \version $Id: ParticleBase.h,v 1.4 2011/10/27 16:31:44 wmtan Exp $
11 *
12 */
13 #include "DataFormats/Math/interface/Point3D.h"
14 #include "DataFormats/Math/interface/Vector3D.h"
15 #include "DataFormats/Math/interface/LorentzVector.h"
16 #include "Rtypes.h"
17
18 class ParticleBase
19 {
20 public:
21 /// electric charge type
22 typedef int Charge;
23 /// Lorentz vector
24 typedef math::XYZTLorentzVectorD LorentzVector;
25 /// Lorentz vector
26 typedef math::PtEtaPhiMLorentzVector PolarLorentzVector;
27 /// point in the space
28 typedef math::XYZPointD Point;
29 /// point in the space
30 typedef math::XYZVectorD Vector;
31 /// default constructor
32 ParticleBase() : cachePolarFixed_( false ), cacheCartesianFixed_( false ) { }
33 /// constructor from values
34 ParticleBase( Charge q, const LorentzVector & p4, const Point & vertex = Point( 0, 0, 0 ),
35 int pdgId = 0, int status = 0, bool integerCharge = true ) :
36 qx3_( q ), pt_( p4.pt() ), eta_( p4.eta() ), phi_( p4.phi() ), mass_( p4.mass() ),
37 vertex_( vertex ), pdgId_( pdgId ), status_( status ),
38 cachePolarFixed_( false ), cacheCartesianFixed_( false )
39 {
40 if ( integerCharge ) qx3_ *= 3;
41 }
42 /// constructor from values
43 ParticleBase( Charge q, const PolarLorentzVector & p4, const Point & vertex = Point( 0, 0, 0 ),
44 int pdgId = 0, int status = 0, bool integerCharge = true ) :
45 qx3_( q ), pt_( p4.pt() ), eta_( p4.eta() ), phi_( p4.phi() ), mass_( p4.mass() ),
46 vertex_( vertex ), pdgId_( pdgId ), status_( status ),
47 cachePolarFixed_( false ), cacheCartesianFixed_( false )
48 {
49 if ( integerCharge ) qx3_ *= 3;
50 }
51 /// destructor
52 virtual ~ParticleBase() { }
53 /// electric charge
54 int charge() const
55 {
56 return qx3_ / 3;
57 }
58 /// set electric charge
59 void setCharge( Charge q )
60 {
61 qx3_ = q * 3;
62 }
63 /// electric charge
64 int threeCharge() const
65 {
66 return qx3_;
67 }
68 /// set electric charge
69 void setThreeCharge( Charge qx3 )
70 {
71 qx3_ = qx3;
72 }
73 /// four-momentum Lorentz vector
74 const LorentzVector & p4() const
75 {
76 cacheCartesian();
77 return p4Cartesian_;
78 }
79 /// four-momentum Lorentz vector
80 const PolarLorentzVector & polarP4() const
81 {
82 cachePolar();
83 return p4Polar_;
84 }
85 /// spatial momentum vector
86 Vector momentum() const
87 {
88 cacheCartesian();
89 return p4Cartesian_.Vect();
90 }
91 /// boost vector to boost a Lorentz vector
92 /// to the particle center of mass system
93 Vector boostToCM() const
94 {
95 cacheCartesian();
96 return p4Cartesian_.BoostToCM();
97 }
98 /// magnitude of momentum vector
99 double p() const
100 {
101 cacheCartesian();
102 return p4Cartesian_.P();
103 }
104 /// energy
105 double energy() const
106 {
107 cacheCartesian();
108 return p4Cartesian_.E();
109 }
110 /// transverse energy
111 double et() const
112 {
113 cachePolar();
114 return p4Polar_.Et();
115 }
116 /// mass
117 double mass() const
118 {
119 return mass_;
120 }
121 /// mass squared
122 double massSqr() const
123 {
124 return mass_ * mass_;
125 }
126 /// transverse mass
127 double mt() const
128 {
129 cachePolar();
130 return p4Polar_.Mt();
131 }
132 /// transverse mass squared
133 double mtSqr() const
134 {
135 cachePolar();
136 return p4Polar_.Mt2();
137 }
138 /// x coordinate of momentum vector
139 double px() const
140 {
141 cacheCartesian();
142 return p4Cartesian_.Px();
143 }
144 /// y coordinate of momentum vector
145 double py() const
146 {
147 cacheCartesian();
148 return p4Cartesian_.Py();
149 }
150 /// z coordinate of momentum vector
151 double pz() const
152 {
153 cacheCartesian();
154 return p4Cartesian_.Pz();
155 }
156 /// transverse momentum
157 double pt() const
158 {
159 return pt_;
160 }
161 /// momentum azimuthal angle
162 double phi() const
163 {
164 return phi_;
165 }
166 /// momentum polar angle
167 double theta() const
168 {
169 cacheCartesian();
170 return p4Cartesian_.Theta();
171 }
172 /// momentum pseudorapidity
173 double eta() const
174 {
175 return eta_;
176 }
177 /// repidity
178 double rapidity() const
179 {
180 cachePolar();
181 return p4Polar_.Rapidity();
182 }
183 /// repidity
184 double y() const
185 {
186 return rapidity();
187 }
188 /// set 4-momentum
189 void setP4( const LorentzVector & p4 )
190 {
191 p4Cartesian_ = p4;
192 p4Polar_ = p4;
193 pt_ = p4Polar_.pt();
194 eta_ = p4Polar_.eta();
195 phi_ = p4Polar_.phi();
196 mass_ = p4Polar_.mass();
197 cachePolarFixed_ = true;
198 cacheCartesianFixed_ = true;
199 }
200 /// set 4-momentum
201 void setP4( const PolarLorentzVector & p4 )
202 {
203 p4Polar_ = p4;
204 pt_ = p4Polar_.pt();
205 eta_ = p4Polar_.eta();
206 phi_ = p4Polar_.phi();
207 mass_ = p4Polar_.mass();
208 cachePolarFixed_ = true;
209 cacheCartesianFixed_ = false;
210 }
211 /// set particle mass
212 void setMass( double m )
213 {
214 mass_ = m;
215 clearCache();
216 }
217 void setPz( double pz )
218 {
219 cacheCartesian();
220 p4Cartesian_.SetPz(pz);
221 p4Polar_ = p4Cartesian_;
222 pt_ = p4Polar_.pt();
223 eta_ = p4Polar_.eta();
224 phi_ = p4Polar_.phi();
225 mass_ = p4Polar_.mass();
226 }
227 /// vertex position
228 const Point & vertex() const
229 {
230 return vertex_;
231 }
232 /// x coordinate of vertex position
233 double vx() const
234 {
235 return vertex_.X();
236 }
237 /// y coordinate of vertex position
238 double vy() const
239 {
240 return vertex_.Y();
241 }
242 /// z coordinate of vertex position
243 double vz() const
244 {
245 return vertex_.Z();
246 }
247 /// set vertex
248 void setVertex( const Point & vertex )
249 {
250 vertex_ = vertex;
251 }
252 /// PDG identifier
253 int pdgId() const
254 {
255 return pdgId_;
256 }
257 // set PDG identifier
258 void setPdgId( int pdgId )
259 {
260 pdgId_ = pdgId;
261 }
262 /// status word
263 int status() const
264 {
265 return status_;
266 }
267 /// set status word
268 void setStatus( int status )
269 {
270 status_ = status;
271 }
272 /// long lived flag
273 static const unsigned int longLivedTag;
274 /// set long lived flag
275 void setLongLived()
276 {
277 status_ |= longLivedTag;
278 }
279 /// is long lived?
280 bool longLived() const
281 {
282 return status_ & longLivedTag;
283 }
284
285 protected:
286 /// electric charge
287 Charge qx3_;
288 /// four-momentum Lorentz vector
289 float pt_, eta_, phi_, mass_;
290 /// vertex position
291 Point vertex_;
292 /// PDG identifier
293 int pdgId_;
294 /// status word
295 int status_;
296 /// internal cache for p4
297 mutable PolarLorentzVector p4Polar_;
298 /// internal cache for p4
299 mutable LorentzVector p4Cartesian_;
300 /// has cache been set?
301 mutable bool cachePolarFixed_, cacheCartesianFixed_;
302 /// set internal cache
303 inline void cachePolar() const
304 {
305 if ( cachePolarFixed_ ) return;
306 p4Polar_ = PolarLorentzVector( pt_, eta_, phi_, mass_ );
307 cachePolarFixed_ = true;
308 }
309 /// set internal cache
310 inline void cacheCartesian() const
311 {
312 if ( cacheCartesianFixed_ ) return;
313 cachePolar();
314 p4Cartesian_ = p4Polar_;
315 cacheCartesianFixed_ = true;
316 }
317 /// clear internal cache
318 inline void clearCache() const
319 {
320 cachePolarFixed_ = false;
321 cacheCartesianFixed_ = false;
322 }
323 };
324
325 #endif