File indexing completed on 2026-04-07 07:52:07
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 F04Trajectory_h
0030 #define F04Trajectory_h 1
0031
0032 #include "G4Allocator.hh"
0033 #include "G4ParticleDefinition.hh"
0034 #include "G4Step.hh"
0035 #include "G4Track.hh"
0036 #include "G4TrajectoryPoint.hh"
0037 #include "G4VTrajectory.hh"
0038 #include "G4ios.hh"
0039 #include "globals.hh"
0040
0041 #include <stdlib.h>
0042 #include <vector>
0043
0044 using TrajectoryPointContainer = std::vector<G4VTrajectoryPoint*>;
0045
0046 class F04Trajectory : public G4VTrajectory
0047 {
0048
0049 public:
0050
0051
0052
0053
0054 F04Trajectory();
0055 F04Trajectory(const G4Track* aTrack);
0056 F04Trajectory(F04Trajectory&);
0057 ~F04Trajectory() override;
0058
0059
0060
0061 inline void* operator new(size_t);
0062 inline void operator delete(void*);
0063 inline int operator==(const F04Trajectory& right) const { return (this == &right); }
0064
0065
0066
0067 inline G4int GetTrackID() const override { return fTrackID; }
0068 inline G4int GetParentID() const override { return fParentID; }
0069 inline G4String GetParticleName() const override { return fParticleName; }
0070 inline G4double GetCharge() const override { return fPDGCharge; }
0071 inline G4int GetPDGEncoding() const override { return fPDGEncoding; }
0072 inline G4ThreeVector GetInitialMomentum() const override { return fInitialMomentum; }
0073
0074
0075
0076 void ShowTrajectory(std::ostream& os = G4cout) const override;
0077 void AppendStep(const G4Step* aStep) override;
0078 void MergeTrajectory(G4VTrajectory* secondTrajectory) override;
0079
0080 G4ParticleDefinition* GetParticleDefinition();
0081
0082 int GetPointEntries() const override { return fpPointsContainer->size(); }
0083 G4VTrajectoryPoint* GetPoint(G4int i) const override { return (*fpPointsContainer)[i]; }
0084
0085 const std::map<G4String, G4AttDef>* GetAttDefs() const override;
0086 std::vector<G4AttValue>* CreateAttValues() const override;
0087
0088
0089 private:
0090
0091
0092
0093
0094 TrajectoryPointContainer* fpPointsContainer = nullptr;
0095
0096 G4int fTrackID = 0;
0097 G4int fParentID = 0;
0098 G4double fPDGCharge = 0.;
0099 G4int fPDGEncoding = 0;
0100 G4String fParticleName;
0101 G4ThreeVector fInitialMomentum;
0102 };
0103
0104 extern G4ThreadLocal G4Allocator<F04Trajectory>* F04TrajectoryAllocator;
0105
0106 inline void* F04Trajectory::operator new(size_t)
0107 {
0108 if (!F04TrajectoryAllocator) F04TrajectoryAllocator = new G4Allocator<F04Trajectory>;
0109 return (void*)F04TrajectoryAllocator->MallocSingle();
0110 }
0111
0112 inline void F04Trajectory::operator delete(void* aTrajectory)
0113 {
0114 F04TrajectoryAllocator->FreeSingle((F04Trajectory*)aTrajectory);
0115 }
0116
0117 #endif