00001 #ifndef _BDS_TRAJECTORY_HH__ 00002 #define _BDS_TRAJECTORY_HH__ 00003 00004 #include "G4Trajectory.hh" 00005 #include "BDSTrajectoryPoint.hh" 00006 #include "G4Track.hh" 00007 #include "G4Step.hh" 00008 #include "G4ThreeVector.hh" 00009 #include <vector> 00010 00011 class BDSTrajectory: public G4Trajectory{ 00012 public: 00013 BDSTrajectory(); 00014 BDSTrajectory(const G4Track* aTrack); 00015 BDSTrajectory(BDSTrajectory &); 00016 virtual ~BDSTrajectory(); 00017 00018 inline void* operator new(size_t); 00019 inline void operator delete(void*); 00020 inline int operator == (const BDSTrajectory& right) const 00021 {return (this==&right);} 00022 00023 virtual void AppendStep(const G4Step* aStep); 00024 virtual void MergeTrajectory(G4VTrajectory* secondTrajectory); 00025 00026 void printData(); 00027 void printDataOfSteps(); 00028 void printDataOfSteps(G4Step*); 00029 00030 G4ThreeVector GetPositionOfLastScatter(G4Track* aTrack); 00031 G4ThreeVector GetMomDirAtLastScatter(G4Track* aTrack); 00032 G4double GetTimeAtLastScatter(G4Track* aTrack); 00033 G4double GetTimeAtVertex(G4Track* aTrack); 00034 G4double GetEnergyAtLastScatter(G4Track* aTrack); 00035 00036 private: 00037 std::map<G4int,G4ThreeVector> _positionOfLastScatter; 00038 std::map<G4int,G4ThreeVector> _momDirAtLastScatter; 00039 std::map<G4int,G4double> _energyAtLastScatter; 00040 std::map<G4int,G4double> _timeAtLastScatter; 00041 std::map<G4int,G4double> _timeAtVertex; 00042 }; 00043 00044 extern G4Allocator<BDSTrajectory> bdsTrajectoryAllocator; 00045 00046 inline void* BDSTrajectory::operator new(size_t){ 00047 void* aTrajectory; 00048 aTrajectory = (void*)bdsTrajectoryAllocator.MallocSingle(); 00049 return aTrajectory; 00050 } 00051 00052 inline void BDSTrajectory::operator delete(void* aTrajectory){ 00053 bdsTrajectoryAllocator.FreeSingle((BDSTrajectory*)aTrajectory); 00054 } 00055 00056 #endif