File indexing completed on 2025-02-23 09:22:42
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
0030
0031
0032 #ifndef RE01Trajectory_h
0033 #define RE01Trajectory_h 1
0034
0035 #include "G4Allocator.hh"
0036 #include "G4ParticleDefinition.hh"
0037 #include "G4Step.hh"
0038 #include "G4ThreeVector.hh"
0039 #include "G4Track.hh"
0040 #include "G4TrajectoryPoint.hh"
0041 #include "G4VTrajectory.hh"
0042 #include "G4ios.hh"
0043 #include "globals.hh"
0044
0045 #include <stdlib.h>
0046 #include <vector>
0047
0048 class G4Polyline;
0049 class G4AttDef;
0050 class G4AttValue;
0051
0052 typedef std::vector<G4VTrajectoryPoint*> RE01TrajectoryPointContainer;
0053
0054 class RE01Trajectory : public G4VTrajectory
0055 {
0056 public:
0057 RE01Trajectory(const G4Track* aTrack);
0058 virtual ~RE01Trajectory();
0059
0060 virtual void ShowTrajectory(std::ostream& os = G4cout) const;
0061 virtual void DrawTrajectory() const;
0062 virtual const std::map<G4String, G4AttDef>* GetAttDefs() const;
0063 virtual std::vector<G4AttValue>* CreateAttValues() const;
0064 virtual void AppendStep(const G4Step* aStep);
0065 virtual void MergeTrajectory(G4VTrajectory* secondTrajectory);
0066
0067 inline void* operator new(size_t);
0068 inline void operator delete(void*);
0069 inline int operator==(const RE01Trajectory& right) const { return (this == &right); }
0070
0071 virtual G4int GetTrackID() const { return fTrackID; }
0072 virtual G4int GetParentID() const { return fParentID; }
0073 virtual G4String GetParticleName() const { return fParticleName; }
0074 virtual G4double GetCharge() const { return fPDGCharge; }
0075 virtual G4int GetPDGEncoding() const { return fPDGEncoding; }
0076 virtual G4ThreeVector GetInitialMomentum() const { return fMomentum; }
0077 virtual int GetPointEntries() const { return fPositionRecord->size(); }
0078 virtual G4VTrajectoryPoint* GetPoint(G4int i) const { return (*fPositionRecord)[i]; }
0079
0080 private:
0081 RE01TrajectoryPointContainer* fPositionRecord;
0082 G4int fTrackID;
0083 G4int fParentID;
0084 G4int fTrackStatus;
0085 G4ParticleDefinition* fParticleDefinition;
0086 G4String fParticleName;
0087 G4double fPDGCharge;
0088 G4int fPDGEncoding;
0089 G4ThreeVector fMomentum;
0090 G4ThreeVector fVertexPosition;
0091 G4double fGlobalTime;
0092 };
0093
0094 extern G4ThreadLocal G4Allocator<RE01Trajectory>* myTrajectoryAllocator;
0095
0096 inline void* RE01Trajectory::operator new(size_t)
0097 {
0098 if (!myTrajectoryAllocator) myTrajectoryAllocator = new G4Allocator<RE01Trajectory>;
0099 return (void*)myTrajectoryAllocator->MallocSingle();
0100 }
0101
0102 inline void RE01Trajectory::operator delete(void* aTrajectory)
0103 {
0104 myTrajectoryAllocator->FreeSingle((RE01Trajectory*)aTrajectory);
0105 }
0106
0107 #endif