00001 #ifndef Event_McParticle_H
00002 #define Event_McParticle_H
00003
00004 #include <iostream>
00005 #include "GaudiKernel/Kernel.h"
00006 #include "GaudiKernel/ContainedObject.h"
00007 #include "GaudiKernel/SmartRef.h"
00008 #include "GaudiKernel/SmartRefVector.h"
00009 #include "CLHEP/Vector/LorentzVector.h"
00010 #include "CLHEP/Geometry/Point3D.h"
00011 #include "GaudiKernel/ObjectVector.h"
00012 #include "GaudiKernel/ObjectList.h"
00013 #include "EventModel/EventModel.h"
00014 using namespace CLHEP;
00023 extern const CLID& CLID_McParticle;
00024
00025 namespace Event {
00026
00027
00028 class McParticle : virtual public ContainedObject {
00029 public:
00030 typedef int StdHepId;
00031
00033
00034 enum StatusBits{
00035 DECAYED =1 ,
00036 DECAYFLT=1<<1,
00037 PRIMARY =1<<2,
00038 LEAF = 1<<3,
00039 ERROR = 1<<4
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052 };
00053
00054
00055 virtual const CLID& clID() const { return McParticle::classID(); }
00056 static const CLID& classID() { return CLID_McParticle; }
00058 McParticle() :
00059 m_statusFlags(0)
00060 {}
00062 virtual ~McParticle() {}
00063
00066 void init( McParticle* mother,
00067 StdHepId id,
00068 unsigned int statusBits,
00069 const HepLorentzVector& initialMomentum,
00070 const HepLorentzVector& finalMomentum,
00071 const HepLorentzVector& initialPosition,
00072 const HepLorentzVector& finalPosition,
00073 const std::string process = "");
00074
00076 void initialize(
00077 StdHepId id,
00078 unsigned int statusBits,
00079 const HepLorentzVector& initialMomentum,
00080 const HepLorentzVector& initialPosition,
00081 const std::string process = "");
00082
00083
00084 void initialize( McParticle* mother,
00085 StdHepId id,
00086 unsigned int statusBits,
00087 const HepLorentzVector& initialMomentum,
00088 const HepLorentzVector& initialPosition,
00089 const std::string process = "");
00090
00092
00093
00094 void finalize( const HepLorentzVector& finalPosition);
00095
00097 StdHepId particleProperty() const;
00098
00100 unsigned int statusFlags()const;
00101
00103 void addStatusFlag(unsigned int flag){m_statusFlags |= flag;};
00104
00107 bool primaryParticle() const;
00108
00110 bool leafParticle() const;
00111
00113 bool decayFromGenerator() const;
00114
00116 bool decayInFlight() const;
00117
00119 void setVertexIndex0(int index0) { m_vertexIndex0 = index0; }
00120
00121 int vertexIndex0() const {return m_vertexIndex0;}
00122
00123 void setVertexIndex1(int index1) { m_vertexIndex1 = index1; }
00124
00125 int vertexIndex1() const {return m_vertexIndex1;}
00126
00127
00128 void setTrackIndex(int trackIndex) { m_trackIndex = trackIndex; }
00129
00130
00131 int trackIndex() const {return m_trackIndex;}
00132
00134 const HepLorentzVector& initialPosition() const;
00135 const HepLorentzVector& finalPosition() const;
00136
00137 const HepLorentzVector& initialFourMomentum()const;
00138
00139
00141 const McParticle& mother()const;
00142
00144 void setMother(const SmartRef<McParticle> m);
00145
00147 void addDaughter(const SmartRef<McParticle> d){m_daughters.push_back(d);};
00148
00150 void removeDaughter(const SmartRef<McParticle> mcPart);
00151
00153
00154
00156
00157
00158
00160
00161
00162
00164 const SmartRefVector<McParticle>& daughterList()const{return m_daughters;};
00165
00166
00167 private:
00168
00170 StdHepId m_particleID;
00171
00172 int m_trackIndex;
00173
00175 int m_vertexIndex0;
00176
00178 int m_vertexIndex1;
00179
00181 unsigned long m_statusFlags;
00183 HepLorentzVector m_initialPosition;
00185 HepLorentzVector m_finalPosition;
00186
00188 HepLorentzVector m_initialFourMomentum;
00190 HepLorentzVector m_finalFourMomentum;
00192 SmartRef<McParticle> m_mother;
00194 SmartRefVector<McParticle> m_daughters;
00196 std::string m_process;
00197
00199
00200
00202
00203 };
00204
00205 typedef ObjectList<McParticle> McParticleCol;
00206
00207 }
00208
00209
00210 #endif // Event_McParticle_H
00211