Import Geant4 11.3.0 source tree
This commit is contained in:
@@ -37,70 +37,75 @@
|
||||
#include "HistoManager.hh"
|
||||
#include "Run.hh"
|
||||
|
||||
#include "G4PhysicalConstants.hh"
|
||||
#include "G4Positron.hh"
|
||||
#include "G4RunManager.hh"
|
||||
#include "G4StepStatus.hh"
|
||||
#include "G4Track.hh"
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
TrackingAction::TrackingAction(DetectorConstruction* det, EventAction* evt)
|
||||
: fDetector(det), fEventAct(evt)
|
||||
{}
|
||||
TrackingAction::TrackingAction(DetectorConstruction* det,EventAction* evt)
|
||||
:fDetector(det),fEventAct(evt)
|
||||
{ }
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
void TrackingAction::PostUserTrackingAction(const G4Track* track)
|
||||
{
|
||||
G4int trackID = track->GetTrackID();
|
||||
|
||||
|
||||
G4AnalysisManager* analysisManager = G4AnalysisManager::Instance();
|
||||
Run* run = static_cast<Run*>(G4RunManager::GetRunManager()->GetNonConstCurrentRun());
|
||||
|
||||
// track length of primary particle or charged secondaries
|
||||
Run* run
|
||||
= static_cast<Run*>(
|
||||
G4RunManager::GetRunManager()->GetNonConstCurrentRun());
|
||||
|
||||
//track length of primary particle or charged secondaries
|
||||
//
|
||||
G4double tracklen = track->GetTrackLength();
|
||||
if (trackID == 1) {
|
||||
run->AddTrackLength(tracklen);
|
||||
analysisManager->FillH1(3, tracklen);
|
||||
}
|
||||
else if (track->GetDefinition()->GetPDGCharge() != 0.)
|
||||
} else if (track->GetDefinition()->GetPDGCharge() != 0.)
|
||||
analysisManager->FillH1(6, tracklen);
|
||||
|
||||
// extract projected range of primary particle
|
||||
|
||||
//extract projected range of primary particle
|
||||
//
|
||||
if (trackID == 1) {
|
||||
G4double x = track->GetPosition().x() + 0.5 * fDetector->GetAbsorSizeX();
|
||||
G4double x = track->GetPosition().x() + 0.5*fDetector->GetAbsorSizeX();
|
||||
run->AddProjRange(x);
|
||||
analysisManager->FillH1(5, x);
|
||||
}
|
||||
|
||||
// mean step size of primary particle
|
||||
|
||||
//mean step size of primary particle
|
||||
//
|
||||
if (trackID == 1) {
|
||||
G4int nbOfSteps = track->GetCurrentStepNumber();
|
||||
G4double stepSize = tracklen / nbOfSteps;
|
||||
run->AddStepSize(nbOfSteps, stepSize);
|
||||
G4double stepSize = tracklen/nbOfSteps;
|
||||
run->AddStepSize(nbOfSteps,stepSize);
|
||||
}
|
||||
|
||||
// status of primary particle : absorbed, transmited, reflected ?
|
||||
|
||||
//status of primary particle : absorbed, transmited, reflected ?
|
||||
//
|
||||
if (trackID == 1) {
|
||||
G4int flag = 0;
|
||||
if (!track->GetNextVolume()) {
|
||||
if (track->GetMomentumDirection().x() > 0.)
|
||||
flag = 1;
|
||||
else
|
||||
flag = 2;
|
||||
if (track->GetMomentumDirection().x() > 0.) flag = 1;
|
||||
else flag = 2;
|
||||
}
|
||||
run->AddTrackStatus(flag);
|
||||
}
|
||||
|
||||
|
||||
// where are we ?
|
||||
G4StepStatus status = track->GetStep()->GetPostStepPoint()->GetStepStatus();
|
||||
if (status == fWorldBoundary) {
|
||||
G4double energy = track->GetKineticEnergy();
|
||||
fEventAct->AddEleak(energy);
|
||||
G4double eleak = track->GetKineticEnergy();
|
||||
if (track->GetDefinition() == G4Positron::Positron()) {
|
||||
eleak += 2*electron_mass_c2;
|
||||
}
|
||||
fEventAct->AddEleak(eleak);
|
||||
}
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
|
||||
Reference in New Issue
Block a user