/scratch0/jsnuveri/BDSIM/BDSIMgit/bdsim/src/BDSTrajectory.cc

00001 #include "BDSTrajectory.hh"
00002 #include "BDSTrajectoryPoint.hh"
00003 #include <map>
00004 
00005 G4Allocator<BDSTrajectory> bdsTrajectoryAllocator;
00006 
00007 
00008 BDSTrajectory::BDSTrajectory():G4Trajectory(){
00009 }
00010 
00011 BDSTrajectory::BDSTrajectory(const G4Track* aTrack):G4Trajectory(aTrack){
00012   _positionOfLastScatter[aTrack->GetTrackID()]=aTrack->GetPosition();
00013   _momDirAtLastScatter[aTrack->GetTrackID()]=aTrack->GetMomentumDirection();
00014   _energyAtLastScatter[aTrack->GetTrackID()]=aTrack->GetTotalEnergy();
00015   _timeAtLastScatter[aTrack->GetTrackID()]=aTrack->GetGlobalTime();
00016   _timeAtVertex[aTrack->GetTrackID()]=aTrack->GetGlobalTime();
00017 }
00018 
00019 BDSTrajectory::~BDSTrajectory(){
00020 }
00021 
00022 void BDSTrajectory::AppendStep(const G4Step* aStep){
00023   G4Track* aTrack = aStep->GetTrack();
00024   BDSTrajectoryPoint* tempTP = new BDSTrajectoryPoint(aTrack);
00025   if(tempTP->isScatteringProcess()){
00026     _positionOfLastScatter[aTrack->GetTrackID()]=aTrack->GetPosition();
00027     _momDirAtLastScatter[aTrack->GetTrackID()]=aTrack->GetMomentumDirection();
00028     _energyAtLastScatter[aTrack->GetTrackID()]=aTrack->GetTotalEnergy();
00029     _timeAtLastScatter[aTrack->GetTrackID()]=aTrack->GetGlobalTime();
00030   }
00031   delete tempTP;
00032 }
00033 
00034 void BDSTrajectory::MergeTrajectory(G4VTrajectory* secondTrajectory){
00035   if(!secondTrajectory) return;
00036 
00037   BDSTrajectory* seco = (BDSTrajectory*)secondTrajectory;
00038   for(std::map<G4int, G4ThreeVector>::iterator iter = seco->_positionOfLastScatter.begin();
00039       iter!=seco->_positionOfLastScatter.end();
00040       iter++){
00041     _positionOfLastScatter.insert(*iter);
00042   }
00043   seco->_positionOfLastScatter.clear();
00044 }
00045 
00046 void BDSTrajectory::printData(){
00047 }
00048 
00049 void BDSTrajectory::printDataOfSteps(){
00050   BDSTrajectoryPoint* tj;
00051   for(int i = 0; i<GetPointEntries(); i++){
00052     tj = (BDSTrajectoryPoint*)GetPoint(i);
00053     if(i>0){
00054       G4cout << "BDSTrajectory: Data for trajectory point : " << i << G4endl;
00055       tj->printData();
00056     }
00057   }
00058 }
00059 
00060 void BDSTrajectory::printDataOfSteps(G4Step* aStep){
00061   G4int trackID = aStep->GetTrack()->GetTrackID();
00062   BDSTrajectoryPoint* tj;
00063   for(int i = 0; i<GetPointEntries(); i++){
00064     tj = (BDSTrajectoryPoint*)GetPoint(i);
00065     if(tj->GetTrackID() == trackID){
00066       G4cout << "BDSTrajectory: Data for trajectory point : " << i << G4endl;
00067       tj->printData();
00068     }
00069   }
00070 }
00071 
00072 G4ThreeVector BDSTrajectory::GetPositionOfLastScatter(G4Track* aTrack){
00073   return _positionOfLastScatter[aTrack->GetTrackID()];
00074 }
00075 
00076 G4ThreeVector BDSTrajectory::GetMomDirAtLastScatter(G4Track* aTrack){
00077   return _momDirAtLastScatter[aTrack->GetTrackID()];
00078 }
00079 
00080 G4double BDSTrajectory::GetEnergyAtLastScatter(G4Track* aTrack){
00081   return _energyAtLastScatter[aTrack->GetTrackID()];
00082 }
00083 
00084 G4double BDSTrajectory::GetTimeAtLastScatter(G4Track* aTrack){
00085   return _timeAtLastScatter[aTrack->GetTrackID()];
00086 }
00087 
00088 G4double BDSTrajectory::GetTimeAtVertex(G4Track* aTrack){
00089   return _timeAtVertex[aTrack->GetTrackID()];
00090 }
00091 

Generated on 28 Jun 2015 for BDSIM by  doxygen 1.4.7