Warning, file /geant4/examples/extended/medical/dna/range/src/TrackingAction.cc was not indexed
or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
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 
0033 
0034 
0035 
0036 
0037 
0038 
0039 #include "TrackingAction.hh"
0040 
0041 #include "HistoManager.hh"
0042 #include "PrimaryGeneratorAction.hh"
0043 #include "Run.hh"
0044 
0045 #include "G4Positron.hh"
0046 #include "G4RunManager.hh"
0047 
0048 
0049 
0050 TrackingAction::TrackingAction(PrimaryGeneratorAction* prim)
0051   : G4UserTrackingAction(), fPrimary(prim)
0052 {}
0053 
0054 
0055 
0056 void TrackingAction::PreUserTrackingAction(const G4Track* track)
0057 {
0058   G4int trackID = track->GetTrackID();
0059   if (trackID == 1) fTrackLength = 0;
0060 }
0061 
0062 
0063 
0064 void TrackingAction::PostUserTrackingAction(const G4Track* track)
0065 {
0066   
0067   G4AnalysisManager* analysisManager = G4AnalysisManager::Instance();
0068 
0069   G4int trackID = track->GetTrackID();
0070 
0071   Run* run = static_cast<Run*>(G4RunManager::GetRunManager()->GetNonConstCurrentRun());
0072 
0073   
0074 
0075   G4double tracklen = track->GetTrackLength();
0076 
0077   
0078 
0079   
0080   if (trackID == 1 && track->GetDefinition()->GetPDGCharge() == -1) {
0081     run->AddTrackLength(tracklen);
0082     analysisManager->FillH1(1, tracklen);
0083   };
0084 
0085   
0086   if (trackID == 1 && track->GetDefinition()->GetPDGCharge() == -1) {
0087     G4double pr =
0088       (track->GetPosition()) * (fPrimary->GetParticleGun()->GetParticleMomentumDirection());
0089     run->AddProjRange(pr);
0090     analysisManager->FillH1(2, pr);
0091   }
0092 
0093   
0094   if (trackID == 1 && track->GetDefinition()->GetPDGCharge() == -1) {
0095     G4double pene = std::sqrt((track->GetPosition()) * (track->GetPosition()));
0096     run->AddPenetration(pene);
0097     analysisManager->FillH1(3, pene);
0098   };
0099 
0100   
0101   
0102 
0103   
0104   if (track->GetDefinition()->GetPDGCharge() >= 0 && track->GetDefinition()->GetPDGMass() > 0
0105       && track->GetDefinition() != G4Positron::PositronDefinition())
0106   {
0107     
0108     fTrackLength = fTrackLength + tracklen;
0109 
0110     if (track->GetKineticEnergy() == 0) {
0111       run->AddTrackLength(fTrackLength);
0112       analysisManager->FillH1(1, fTrackLength);
0113     }
0114   }
0115 
0116   
0117   if (track->GetDefinition()->GetPDGCharge() >= 0 && track->GetDefinition()->GetPDGMass() > 0
0118       && track->GetDefinition() != G4Positron::PositronDefinition())
0119   {
0120     G4double pr =
0121       (track->GetPosition()) * (fPrimary->GetParticleGun()->GetParticleMomentumDirection());
0122 
0123     if (track->GetKineticEnergy() == 0) {
0124       run->AddProjRange(pr);
0125       analysisManager->FillH1(2, pr);
0126     }
0127   }
0128 
0129   
0130   if (track->GetDefinition()->GetPDGCharge() >= 0 && track->GetDefinition()->GetPDGMass() > 0
0131       && track->GetDefinition() != G4Positron::PositronDefinition())
0132   {
0133     G4double pene = std::sqrt((track->GetPosition()) * (track->GetPosition()));
0134 
0135     if (track->GetKineticEnergy() == 0) {
0136       run->AddPenetration(pene);
0137       analysisManager->FillH1(3, pene);
0138     }
0139   };
0140 }