Hi,
I want to collect information on particles generated in radioactive decay. Currently, I am referring one code where it is counting number of particles generated in my radioactive decay as follows (it’s written in trackingAction.cc:
void TrackingAction::PreUserTrackingAction(const G4Track* track)
{
Run* run
= static_cast<Run*>(G4RunManager::GetRunManager()->GetNonConstCurrentRun());
G4ParticleDefinition* particle = track->GetDefinition();
G4String name = particle->GetParticleName();
fCharge = particle->GetPDGCharge();
fMass = particle->GetPDGMass();
G4double Ekin = track->GetKineticEnergy();
G4int ID = track->GetTrackID();
G4bool condition = false;
// check LifeTime
//
G4double meanLife = particle->GetPDGLifeTime();
//count particles
//
run->ParticleCount(name, Ekin, meanLife);
... and more code
}
void TrackingAction::PostUserTrackingAction(const G4Track* track)
{
//keep only ions
//
if (fCharge < 3. ) return;
Run* run
= static_cast<Run*>(G4RunManager::GetRunManager()->GetNonConstCurrentRun());
G4AnalysisManager* analysis = G4AnalysisManager::Instance();
//get time
//
G4double time = track->GetGlobalTime();
G4int ID = track->GetTrackID();
if (ID == 1) run->PrimaryTiming(time); //time of life of primary ion
fTime_end = time;
//energy and momentum balance (from secondaries)
//
const std::vector<const G4Track*>* secondaries
= track->GetStep()->GetSecondaryInCurrentStep();
size_t nbtrk = (*secondaries).size();
if (nbtrk) {
//there are secondaries --> it is a decay
//
//balance
G4double EkinTot = 0., EkinVis = 0.;
G4ThreeVector Pbalance = - track->GetMomentum();
for (size_t itr=0; itr<nbtrk; itr++) {
const G4Track* trk = (*secondaries)[itr];
G4ParticleDefinition* particle = trk->GetDefinition();
G4double Ekin = trk->GetKineticEnergy();
EkinTot += Ekin;
G4bool visible = !((particle == G4NeutrinoE::NeutrinoE())||
(particle == G4AntiNeutrinoE::AntiNeutrinoE()));
..and more code
}
Notice that, to count particles, the author has not written a stepping action. Before this, I thought that you must get it all in a stepping action file to get particle data. Also, take a look at how secondaries are extracted.
My doubt is if I want to know about my particle count, can I write code in steppingAction file instead of this?
Also, if I want to get position of particle should I write it in TrackingAction file like this:
G4double x = track->GetStep()->GetPostStepPoint()->GetPosition().x()
Or should I do it SteppingAction file:
G4double x =step->GetPostStepPoint()->GetPosition().x()
If these two works the same, can I write all code of steppingAction file into TrackingAction file by using the track object and secondaries pointer author used here.(instead of writing code in steppingAction)