00001 // $Header: /cvs/lcd/slic/include/Trajectory.hh,v 1.17 2006/09/05 23:21:49 jeremy Exp $ 00002 00003 #ifndef SLIC_TRAJECTORY_HH 00004 #define SLIC_TRAJECTORY_HH 1 00005 00006 // geant4 00007 #include "G4VTrajectory.hh" 00008 #include "G4Allocator.hh" 00009 #include "G4Track.hh" 00010 #include "G4VTrajectoryPoint.hh" 00011 #include "globals.hh" 00012 00013 namespace slic 00014 { 00015 00016 typedef std::vector<G4VTrajectoryPoint*> TrajectoryPointContainer; 00017 00022 class Trajectory : public G4VTrajectory 00023 { 00024 public: 00025 00026 enum EFinalStatus { 00027 eUnset = 0, 00028 eDecayedInTracker = 1, 00029 eLeftDetector = 2, 00030 eStopped = 3, 00031 eDecayedInCalorimeter = 4 00032 }; 00033 00034 public: 00035 00036 // no arg ctor 00037 Trajectory(); 00038 00039 // create from track 00040 Trajectory(const G4Track *aTrack); 00041 00042 // copy ctor from trajectory 00043 Trajectory(Trajectory &); 00044 00045 virtual ~Trajectory(); 00046 00047 public: 00048 00049 virtual void DrawTrajectory(G4int i_mode) const 00050 { 00051 G4VTrajectory::DrawTrajectory( i_mode ); 00052 } 00053 00054 // static string of final status 00055 static const std::string& getFinalStatusString(EFinalStatus fs); 00056 00057 // non-static version 00058 const std::string& getFinalStatusString() const 00059 { 00060 return Trajectory::getFinalStatusString( m_finalStatus ); 00061 } 00062 00063 // new op 00064 inline void* operator new(size_t); 00065 00066 // del op 00067 inline void operator delete(void*); 00068 00069 inline int operator == (const Trajectory& right) const 00070 { 00071 return (this==&right); 00072 } 00073 00074 inline G4int GetTrackID() const 00075 { 00076 return m_trackID; 00077 } 00078 00079 inline G4int GetParentID() const 00080 { 00081 return m_parentID; 00082 } 00083 00084 inline G4String GetParticleName() const 00085 { 00086 return m_particleName; 00087 } 00088 00089 inline G4double GetCharge() const 00090 { 00091 return m_PDGCharge; 00092 } 00093 00094 inline G4int GetPDGEncoding() const 00095 { 00096 return m_PDGEncoding; 00097 } 00098 00099 inline G4ThreeVector GetInitialMomentum() const 00100 { 00101 return m_initialMomentum; 00102 } 00103 00104 inline const G4ParticleDefinition* GetParticleDefinition() 00105 { 00106 return m_particleDefinition; 00107 } 00108 00109 inline G4double GetGlobalTime() 00110 { 00111 return m_globalTime; 00112 } 00113 00114 // has endpoint daughters 00115 inline G4bool getHasEndpointDaughters() const 00116 { 00117 return m_hasEndpointDaughters; 00118 } 00119 00120 inline void setHasEndpointDaughters(G4bool d) 00121 { 00122 m_hasEndpointDaughters = d; 00123 } 00124 00125 // backscatter 00126 inline G4bool getBackscatter() const 00127 { 00128 return m_backscatter; 00129 } 00130 00131 inline void setBackscatter(G4bool b) 00132 { 00133 m_backscatter = b; 00134 } 00135 00136 // vertexIsNotEndpointOfParent 00137 inline G4bool getVertexIsNotEndpointOfParent() const 00138 { 00139 return m_vertexIsNotEndpointOfParent; 00140 } 00141 00142 inline void setVertexIsNotEndpointOfParent(G4bool = true) 00143 { 00144 m_vertexIsNotEndpointOfParent = true; 00145 } 00146 00147 // final status 00148 inline void setFinalStatus(EFinalStatus fstatus) 00149 { 00150 m_finalStatus = fstatus; 00151 } 00152 00153 inline EFinalStatus getFinalStatus() const 00154 { 00155 return m_finalStatus; 00156 } 00157 00158 // createdInSimulation 00159 inline void setCreatedInSimulation(G4bool c) 00160 { 00161 m_createdInSimulation = c; 00162 } 00163 00164 inline G4bool getCreatedInSimulation() const 00165 { 00166 return m_createdInSimulation; 00167 } 00168 00169 // set additional info from track 00170 void setupManuallyFromTrack(const G4Track* aTrack); 00171 00172 inline void setEndpointEnergy(G4double e) 00173 { 00174 m_endpointEnergy = e; 00175 } 00176 00177 G4double getEndPointEnergy() 00178 { 00179 return m_endpointEnergy; 00180 } 00181 00182 public: 00183 virtual void AppendStep(const G4Step *aStep); 00184 virtual void MergeTrajectory(G4VTrajectory *secondTrajectory); 00185 00186 virtual G4int GetPointEntries() const { return m_posRecord->size(); } 00187 virtual G4VTrajectoryPoint* GetPoint(G4int i) const {return (*m_posRecord)[i]; } 00188 00189 private: 00190 00191 // track info 00192 G4ParticleDefinition* m_particleDefinition; 00193 G4String m_particleName; 00194 G4double m_PDGCharge; 00195 G4int m_PDGEncoding; 00196 G4int m_trackID; 00197 G4int m_parentID; 00198 TrajectoryPointContainer* m_posRecord; 00199 G4ThreeVector m_initialMomentum; 00200 G4double m_globalTime; 00201 G4double m_endpointEnergy; 00202 00203 // non-exclusive sim statuses 00204 G4bool m_createdInSimulation; 00205 G4bool m_hasEndpointDaughters; 00206 G4bool m_backscatter; 00207 G4bool m_vertexIsNotEndpointOfParent; 00208 00209 // mutually exclusive final states: see enums 00210 EFinalStatus m_finalStatus; 00211 }; 00212 00213 extern G4Allocator<Trajectory> TrajectoryAllocator; 00214 00215 inline void* Trajectory::operator new(size_t) 00216 { 00217 void *aTrajectory; 00218 aTrajectory = (void*) TrajectoryAllocator.MallocSingle(); 00219 return aTrajectory; 00220 } 00221 00222 inline void Trajectory::operator delete(void* aTrajectory) 00223 { 00224 TrajectoryAllocator.FreeSingle( ( Trajectory* ) aTrajectory ); 00225 } 00226 } 00227 00228 #endif
1.5.4