How to get production process for emitted particles in RDM?

I have implemented radioactive decays of certain isotopes. I am able to export relevant particle-related information (see attached). I am wondering how to determine the generation process of emitted particle(s)? For example, in the attached case, how to determine that 129.359 keV electron was produced from internal conversion. Similarly, discriminating beta-decay electrons from internal conversion for example?

Can we set up something in SteppingAction to export this information at each step to a ROOT branch/console? Any assistance is appreciated.

Hello, I dont know if it can help a lot but for my application i wanted to know generation process for gamma to discriminate neutron induced gamma from other generation process and i did this in StyeppingAction.cc :

const G4Track* track = step->GetTrack();
G4String creatprocess = track->GetCreatorProcess()->GetProcessName();
auto creatvolume = track->GetOriginTouchableHandle()->GetVolume()->GetName();
G4cout << creatvolume << creatprocess << G4endl;

@Geoffrey_Varignier : Thanks, I just tried. The GetProcessName() gives me “RadioactiveDecayBase” Is there a way to look deeper which decay channel lead to this? For example internal conversion?

Be careful with your language. The decay process (in Geant4 talk), is RadioactiveDecayBase. Full stop. What you’re asking for is which “decay channel” was selected by the RadioactiveDecayBase process for the particular nuclear decay instance.

I am not sure that RDecay has a public interface to register or report which channel was chosen. It might be that you have to “infer” it in your SteppingActon by looking at the secondaries, but that’s a terrible approach.

@mkelsey : Thanks for noting that. I have updated the words; I am still new to G4 and appreciate you clarifying this. Can you please shed some more light on how that information can be ‘inferred’ using secondaries? I guess any way via which I can discriminate beta-decay and internal conversion electrons is good for me?

Internal conversion is easy: there won’t be a neutrino in the final state.

To be a bit more concrete. What you’d do in your stepping action is look to see if the particle has decayed (status fStopAndKill, secondaries in the current step). Loop over the secondaries (use GetSecondaryInCurrentStep() to avoid picking up other secondaries from past steps), and look for the kind of decay you expect (if there’s an alpha, if there’s a neutrino, and so on).

1 Like