File indexing completed on 2026-05-05 08:06:10
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 WLSTrajectory_h
0030 #define WLSTrajectory_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 "globals.hh"
0039
0040 #include <vector>
0041
0042 typedef std::vector<G4VTrajectoryPoint*> WLSTrajectoryPointContainer;
0043
0044 class WLSTrajectory : public G4VTrajectory
0045 {
0046 public:
0047 WLSTrajectory() = default;
0048 WLSTrajectory(const G4Track*);
0049 WLSTrajectory(WLSTrajectory&);
0050 ~WLSTrajectory() override;
0051
0052 inline void* operator new(size_t);
0053 inline void operator delete(void*);
0054 inline int operator==(const WLSTrajectory& right) const { return (this == &right); }
0055
0056 inline G4int GetTrackID() const override { return fTrackID; }
0057 inline G4int GetParentID() const override { return fParentID; }
0058 inline G4String GetParticleName() const override { return fParticleName; }
0059 inline G4double GetCharge() const override { return fPDGCharge; }
0060 inline G4int GetPDGEncoding() const override { return fPDGEncoding; }
0061 inline G4ThreeVector GetInitialMomentum() const override { return fInitialMomentum; }
0062
0063 void ShowTrajectory(std::ostream& os = G4cout) const override;
0064 void AppendStep(const G4Step* aStep) override;
0065 void MergeTrajectory(G4VTrajectory* secondTrajectory) override;
0066
0067 G4ParticleDefinition* GetParticleDefinition();
0068
0069 int GetPointEntries() const override { return fpPointsContainer->size(); }
0070 G4VTrajectoryPoint* GetPoint(G4int i) const override { return (*fpPointsContainer)[i]; }
0071
0072 const std::map<G4String, G4AttDef>* GetAttDefs() const override;
0073 std::vector<G4AttValue>* CreateAttValues() const override;
0074
0075 private:
0076 WLSTrajectoryPointContainer* fpPointsContainer = nullptr;
0077
0078 G4int fTrackID = 0;
0079 G4int fParentID = 0;
0080 G4double fPDGCharge = 0.;
0081 G4int fPDGEncoding = 0;
0082 G4String fParticleName;
0083 G4ThreeVector fInitialMomentum;
0084
0085 G4ParticleDefinition* fParticleDefinition = nullptr;
0086 };
0087
0088 extern G4ThreadLocal G4Allocator<WLSTrajectory>* WLSTrajectoryAllocator;
0089
0090 inline void* WLSTrajectory::operator new(size_t)
0091 {
0092 if (!WLSTrajectoryAllocator) WLSTrajectoryAllocator = new G4Allocator<WLSTrajectory>;
0093 return (void*)WLSTrajectoryAllocator->MallocSingle();
0094 }
0095
0096 inline void WLSTrajectory::operator delete(void* aTrajectory)
0097 {
0098 WLSTrajectoryAllocator->FreeSingle((WLSTrajectory*)aTrajectory);
0099 }
0100
0101 #endif