Trajectory.hh

Go to the documentation of this file.
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

Generated on Mon Jun 7 17:45:21 2010 for Simulator for the Linear Collider by  doxygen 1.5.4