File indexing completed on 2026-04-19 07:54:35
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029 #ifndef RE01Trajectory_h
0030 #define RE01Trajectory_h 1
0031
0032 #include "G4Allocator.hh"
0033 #include "G4ParticleDefinition.hh"
0034 #include "G4Step.hh"
0035 #include "G4ThreeVector.hh"
0036 #include "G4Track.hh"
0037 #include "G4TrajectoryPoint.hh"
0038 #include "G4VTrajectory.hh"
0039 #include "G4ios.hh"
0040 #include "globals.hh"
0041
0042 #include <stdlib.h>
0043 #include <vector>
0044
0045 class G4Polyline;
0046 class G4AttDef;
0047 class G4AttValue;
0048
0049 typedef std::vector<G4VTrajectoryPoint*> RE01TrajectoryPointContainer;
0050
0051 class RE01Trajectory : public G4VTrajectory
0052 {
0053 public:
0054 RE01Trajectory(const G4Track* aTrack);
0055 virtual ~RE01Trajectory();
0056
0057 virtual void ShowTrajectory(std::ostream& os = G4cout) const;
0058 virtual void DrawTrajectory() const;
0059 virtual const std::map<G4String, G4AttDef>* GetAttDefs() const;
0060 virtual std::vector<G4AttValue>* CreateAttValues() const;
0061 virtual void AppendStep(const G4Step* aStep);
0062 virtual void MergeTrajectory(G4VTrajectory* secondTrajectory);
0063
0064 inline void* operator new(size_t);
0065 inline void operator delete(void*);
0066 inline int operator==(const RE01Trajectory& right) const { return (this == &right); }
0067
0068 virtual G4int GetTrackID() const { return fTrackID; }
0069 virtual G4int GetParentID() const { return fParentID; }
0070 virtual G4String GetParticleName() const { return fParticleName; }
0071 virtual G4double GetCharge() const { return fPDGCharge; }
0072 virtual G4int GetPDGEncoding() const { return fPDGEncoding; }
0073 virtual G4ThreeVector GetInitialMomentum() const { return fMomentum; }
0074 virtual int GetPointEntries() const { return fPositionRecord->size(); }
0075 virtual G4VTrajectoryPoint* GetPoint(G4int i) const { return (*fPositionRecord)[i]; }
0076
0077 private:
0078 RE01TrajectoryPointContainer* fPositionRecord;
0079 G4int fTrackID;
0080 G4int fParentID;
0081 G4int fTrackStatus;
0082 G4ParticleDefinition* fParticleDefinition;
0083 G4String fParticleName;
0084 G4double fPDGCharge;
0085 G4int fPDGEncoding;
0086 G4ThreeVector fMomentum;
0087 G4ThreeVector fVertexPosition;
0088 G4double fGlobalTime;
0089 };
0090
0091 extern G4ThreadLocal G4Allocator<RE01Trajectory>* myTrajectoryAllocator;
0092
0093 inline void* RE01Trajectory::operator new(size_t)
0094 {
0095 if (!myTrajectoryAllocator) myTrajectoryAllocator = new G4Allocator<RE01Trajectory>;
0096 return (void*)myTrajectoryAllocator->MallocSingle();
0097 }
0098
0099 inline void RE01Trajectory::operator delete(void* aTrajectory)
0100 {
0101 myTrajectoryAllocator->FreeSingle((RE01Trajectory*)aTrajectory);
0102 }
0103
0104 #endif