CGEM BOSS 6.6.5.i
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtParticle.hh
Go to the documentation of this file.
1//--------------------------------------------------------------------------
2//
3// Environment:
4// This software is part of the EvtGen package developed jointly
5// for the BaBar and CLEO collaborations. If you use all or part
6// of it, please give an appropriate acknowledgement.
7//
8// Copyright Information: See EvtGen/COPYRIGHT
9// Copyright (C) 1998 Caltech, UCSB
10//
11// Module: EvtGen/EvtParticle.hh
12//
13// Description:Class to describe all particles
14//
15// Modification history:
16//
17// DJL/RYD Sept. 25, 1996 Module created
18//
19//------------------------------------------------------------------------
20
21#ifndef EVTPARTICLE_HH
22#define EVTPARTICLE_HH
23
24//#include <iostream.h>
25#include <assert.h>
28#include "EvtGenBase/EvtId.hh"
30#include <string>
31
32class EvtDiracSpinor;
33class EvtVector4C;
34class EvtTensor4C;
35class EvtStdHep;
36class EvtSecondary;
37
38const int MAX_DAUG =100;
39const int MAX_LEVEL=10;
40const int MAX_TRIES=10000;
41
43
44public:
45
46 /**
47 * Default constructor.
48 */
50
51 /**
52 * Destructor.
53 */
54 virtual ~EvtParticle();
55
56 /**
57 * Returns polarization vector in the parents restframe.
58 */
59 virtual EvtVector4C epsParent(int i) const;
60
61 /**
62 * Returns polarization vector in the particles own restframe.
63 */
64 virtual EvtVector4C eps(int i) const;
65
66
67 /**
68 * Returns polarization vector in the parents restframe for a photon.
69 */
70 virtual EvtVector4C epsParentPhoton(int i);
71
72 /**
73 * Returns polarization vector in the particles own restframe for a photon.
74 */
75 virtual EvtVector4C epsPhoton(int i);
76
77
78 /**
79 * Returns Dirac spinor in the parents restframe for a Dirac particle.
80 */
81 virtual EvtDiracSpinor spParent(int) const;
82
83 /**
84 * Returns Dirac spinor in the particles own restframe for a Dirac particle.
85 */
86 virtual EvtDiracSpinor sp(int) const;
87
88
89
90 /**
91 * Returns Dirac spinor in the parents restframe for a Neutrino particle.
92 */
93 virtual EvtDiracSpinor spParentNeutrino() const;
94
95 /**
96 * Returns Dirac spinor in the particles own restframe for a
97 * Neutrino particle.
98 */
99 virtual EvtDiracSpinor spNeutrino() const;
100
101
102 /**
103 * Returns tensor in the parents restframe for a spin 2 particle.
104 */
105 virtual EvtTensor4C epsTensorParent(int i) const;
106
107 /**
108 * Returns tensor in the particles own restframe for a spin 2 particle.
109 */
110 virtual EvtTensor4C epsTensor(int i) const;
111
112 /**
113 * Initialiaze particle with id and 4momentum.
114 */
115 virtual void init(EvtId part_n,const EvtVector4R& p4)=0;
116
117 /**
118 * Add another daughter to the particle
119 */
120 void addDaug(EvtParticle *node);
121
122 /**
123 * Decay particle
124 */
125 void decay();
126
127 /**
128 * Delete a decay chain
129 */
130 void deleteTree();
131 void deleteDaughters(bool keepChannel=false);
132
133 /**
134 * Should only be used internally.
135 */
136 void setChannel( int i );
137
138 /**
139 * set generator information; pingrg-2011-1-6
140 */
141 void setGeneratorFlag(int flag){_generatorFlag = flag;}
142
143 /**
144 * get generator information; pingrg-2011-1-6
145 */
146 int getGeneratorFlag(){ return _generatorFlag ;}
147
148 /**
149 * Creates the daughters in the list of ids and
150 * adds them to the parent. Note that momentum
151 * is left uninitialized, this is _only_ creation.
152 */
153 void makeDaughters(int ndaug,EvtId *id);
154
155 /**
156 * Similar to the routine above except that here
157 * momentum is generated according to phase space
158 * daughters are filled with this momentum.
159 */
160 double initializePhaseSpace(int numdaughter,EvtId *daughters,
161 double poleSize=-1., int whichTwo1=0,
162 int whichTwo2=1);
163
164 /**
165 * Get pointer the the i:th daugther.
166 */
167 EvtParticle *getDaug(int i);
168
169 /**
170 * Iterates over the particles in a decay chain.
171 */
172 EvtParticle *nextIter(EvtParticle *rootOfTree=0);
173
174 /**
175 * Makes stdhep list
176 */
177 void makeStdHep(EvtStdHep& stdhep,
178 EvtSecondary& secondary,EvtId *stable_parent_ihep);
179 void makeStdHep(EvtStdHep& stdhep);
180
181 /**
182 * Gets 4vector in the labframe, i.e., the frame in which the root
183 * particles momentum is measured.
184 */
186
187 /**
188 * Gets 4vector in the particles restframe, i.e. this functiont will
189 * return (m,0,0,0)
190 */
192
193 /**
194 * Returns the 4position of the particle in the lab frame.
195 */
197
198 /**
199 * Returns pointer to parent particle.
200 */
202
203 /**
204 * Makes partptr the idaug:th daugther.
205 */
206 void insertDaugPtr(int idaug,EvtParticle* partptr){ _daug[idaug]=partptr;
207 partptr->_parent=this; }
208 /**
209 * Returns mass of particle.
210 */
211 double mass() const;
212
213 /**
214 * Used internally to decide if first time particle is decayed.
215 */
216 int firstornot() const;
217 void setFirstOrNot();
218 void resetFirstOrNot();
219
220 /**
221 * Returns Id of particle.
222 */
223 EvtId getId() const;
224
225 /**
226 * Returns particle type.
227 */
228
230
231 /**
232 * Returns number of spin states of the particle.
233 */
234 int getSpinStates() const;
235
236 /**
237 * Returns 4momentum in parents restframe.
238 */
239 const EvtVector4R& getP4() const;
240
241 /**
242 * Sets the 4momentum in the parents restframe.
243 */
244 void setP4(const EvtVector4R& p4){_p=p4;}
245
246 /**
247 * Retunrs the decay channel.
248 */
249 int getChannel() const;
250
251 /**
252 * Returns number of daugthers.
253 */
254 int getNDaug() const;
255 void resetNDaug() {_ndaug=0; return;}
256
257 /**
258 * Prints out the particle "tree" of a given particle. The
259 * tree consists of all daughters (and their daughters, etc)
260 * and their properties.
261 */
262 void printTree() const;
263
264 void printTreeRec(int level) const;
265 std::string writeTreeRec(std::string ) const;
266
267 void dumpTree( ) const;
268 void dumpTreeRec(int level,int dj) const;
269
270 std::string treeStr() const;
271 std::string treeStrRec(int level) const;
272
273 /**
274 * Prints information for the particle.
275 */
276 void printParticle() const;
277
278 /**
279 * Set lifetime of the particle in parents restframe.
280 */
281 void setLifetime(double tau);
282
283 /**
284 * Generate lifetime according to pure exponential.
285 */
286 void setLifetime();
287
288 /**
289 * Returns the lifetime.
290 */
291 double getLifetime();
292
293 /**
294 * Set diagonal spindensity matrix.
295 */
297
298 /**
299 * Set spindensity matrix for e+e- -> V
300 */
301 void setVectorSpinDensity();
302
303 void setPolarizedSpinDensity(double r00,double r11,double r22); //pingrg for polarized charmonium production
304 /**
305 * Set forward spin density matrix.
306 */
307 void setSpinDensityForward(const EvtSpinDensity& rho){_rhoForward=rho;}
308
309 /**
310 * Set forward spin density matrix according to the density matrix
311 * rho in the helicity amplitude basis.
312 */
315 double alpha,
316 double beta,
317 double gamma);
318
319 /**
320 * Returns a rotation matrix need to rotate the basis state
321 * to the helicity basis. The EvtSpinDensity matrix is just use
322 * as a matrix here. This function is to be implemented in each
323 * derived class.
324 */
327 double beta,
328 double gamma) const=0;
329
330 /**
331 * Get forward spin density matrix.
332 */
334
335 /**
336 * Set backward spin density matrix.
337 */
338 void setSpinDensityBackward(const EvtSpinDensity& rho){_rhoBackward=rho;}
339
340 /**
341 * Get backward spin density matrix.
342 */
344
345 //Hacks will be removed when better solutions are thought of!
346 //This is used to suppress use of random numbers when doing initialization
347 //of some models.
348 void noLifeTime() { _genlifetime=0; }
349
350 //lange - April 29, 2002
351 void setId(EvtId id) { _id=id;}
352 void initDecay(bool useMinMass=false);
353 void generateMassTree();
354
355 double compMassProb();
356
357 //setMass will blow away any existing 4vector
358 void setMass(double m) { _p=EvtVector4R(m,0.0,0.0,0.0);}
359
360 //void setMixed() {_mix=true;}
361 //void setUnMixed() {_mix=false;}
362 //bool getMixed() {return _mix;}
363
364 //void takeCConj() {report(INFO,"EvtGen") << "should take conj\n";}
365
366 //this means that the particle has gone through initDecay
367 // and thus has a mass
368 bool isInitialized() {return _isInit;}
369 bool hasValidP4() {return _validP4;}
370 bool isDecayed() {return _isDecayed;}
371
372
373 // decay prob - only relevent if already decayed
374 // and is a scalar particle
375 // returned is a double* that should be prob/probMax
376 double* decayProb() {return _decayProb;}
377 void setDecayProb( double p);
378
379 void setInclusiveMode(int im){_inclusiveMode=im ;}
380 int getInclusiveMode(){return _inclusiveMode;}
381
382protected:
383
384 void setp( double e, double px, double py, double pz) { _p.set(e,px,py,pz); }
385 void setp( const EvtVector4R& p4 ) { _p =p4; }
386 void setpart_num(EvtId particle_number )
387 {
388 assert(_channel==-10||
389 _id.getId()==particle_number.getId()||
390 _id.getId()==-1);
391 _id = particle_number;
392 }
394
395private:
396
397 EvtParticle* _daug[MAX_DAUG];
398 int _ndaug;
399 EvtParticle* _parent;
400 int _channel;
401 int _first;
402 EvtId _id;
403 EvtVector4R _p;
404 double _t;
405 bool _isInit;
406 bool _isDecayed;
407 int _generatorFlag;
408 //bool _mix;
409
410 EvtSpinDensity _rhoForward;
411 EvtSpinDensity _rhoBackward;
412
413 void makeStdHepRec(int firstparent,int lastparent,EvtStdHep& stdhep,
414 EvtSecondary& secondary,EvtId *stable_parent_ihep);
415 void makeStdHepRec(int firstparent,int lastparent,EvtStdHep& stdhep);
416
417
418 //This is a hack until things gets straightened out. (Ryd)
419 int _genlifetime;
420
421 //should never be used, therefor is private.
422 //these does _not_ have an implementation
423 EvtParticle& operator=(const EvtParticle& p);
424 EvtParticle(const EvtParticle& p);
425
426 double *_decayProb;
427
428 //Access the inclusive mode for OPENCHARM
429 int _inclusiveMode;
430
431
432};
433
434std::string IntToStr( int a); //pingrg, 2008-03-24
435#endif
436
const int MAX_LEVEL
std::string IntToStr(int a)
const int MAX_DAUG
const int MAX_TRIES
const double alpha
Definition EvtId.hh:27
int getId() const
Definition EvtId.hh:41
void noLifeTime()
virtual EvtVector4C epsPhoton(int i)
void setMass(double m)
void setSpinDensityBackward(const EvtSpinDensity &rho)
void setSpinDensityForwardHelicityBasis(const EvtSpinDensity &rho)
void setSpinDensityForward(const EvtSpinDensity &rho)
void setDecayProb(double p)
void makeDaughters(int ndaug, EvtId *id)
virtual ~EvtParticle()
virtual EvtVector4C epsParent(int i) const
void initDecay(bool useMinMass=false)
virtual void init(EvtId part_n, const EvtVector4R &p4)=0
void resetNDaug()
void insertDaugPtr(int idaug, EvtParticle *partptr)
EvtVector4R getP4Lab()
virtual EvtTensor4C epsTensorParent(int i) const
virtual EvtVector4C epsParentPhoton(int i)
void printTreeRec(int level) const
EvtId getId() const
EvtParticle * getParent()
virtual EvtDiracSpinor spParentNeutrino() const
void setGeneratorFlag(int flag)
virtual EvtDiracSpinor spParent(int) const
void setVectorSpinDensity()
bool hasValidP4()
bool isDecayed()
void printParticle() const
virtual EvtDiracSpinor spNeutrino() const
virtual EvtSpinDensity rotateToHelicityBasis(double alpha, double beta, double gamma) const =0
int getSpinStates() const
EvtVector4R getP4Restframe()
void setLifetime()
void setPolarizedSpinDensity(double r00, double r11, double r22)
double getLifetime()
void setDiagonalSpinDensity()
double compMassProb()
EvtSpinType::spintype getSpinType() const
void setChannel(int i)
const EvtVector4R & getP4() const
void setp(double e, double px, double py, double pz)
void printTree() const
virtual EvtSpinDensity rotateToHelicityBasis() const =0
int getGeneratorFlag()
void setP4(const EvtVector4R &p4)
void resetFirstOrNot()
int getNDaug() const
EvtParticle * getDaug(int i)
void dumpTreeRec(int level, int dj) const
double * decayProb()
bool isInitialized()
void deleteDaughters(bool keepChannel=false)
double mass() const
virtual EvtDiracSpinor sp(int) const
void setp(const EvtVector4R &p4)
void makeStdHep(EvtStdHep &stdhep, EvtSecondary &secondary, EvtId *stable_parent_ihep)
int firstornot() const
EvtSpinDensity getSpinDensityBackward()
void setInclusiveMode(int im)
EvtVector4R get4Pos()
virtual EvtVector4C eps(int i) const
void addDaug(EvtParticle *node)
void dumpTree() const
std::string treeStr() const
std::string treeStrRec(int level) const
void setpart_num(EvtId particle_number)
int getChannel() const
virtual EvtTensor4C epsTensor(int i) const
void setId(EvtId id)
std::string writeTreeRec(std::string) const
void setFirstOrNot()
double initializePhaseSpace(int numdaughter, EvtId *daughters, double poleSize=-1., int whichTwo1=0, int whichTwo2=1)
EvtSpinDensity getSpinDensityForward()
int getInclusiveMode()
EvtParticle * nextIter(EvtParticle *rootOfTree=0)
void generateMassTree()
void deleteTree()
void set(int i, double d)