Impinging a gamma beam on a scintillator block and evaluating the tracks created in it, I see that I can retrieve the pointer preStepPoint->GetProcessDefinedStep() for all steps but the first one of each track, i.e. using step->GetTrack()->GetCurrentStepNumber()==1. Does that mean that no process would get to define the first step? (no competition between processes to limit this step length?) Or maybe it is the track creator process that constraints the first step?
You should be using postStepPoint to find out which process limited the step. For the first step, the preStepPoint wasn’t “limited” by anything, it’s the point where the track was first created.
OK. The word “limited” completes the picture indeed; also considering that it is the same to get the governing process from the postPoint of the current step or the prePoint of the next step. In other words, the process info attached to the prePoint says nothing about the current step. Right?
Or to say that the process info attached to prePoint seems redundant, since it is null for the first and last steps anyway. Is it correct?
Sure, it’s redundant. Consider that both the pre-step and post-step points are instances of the same class,
G4StepPoint. When a new step is started, the post-step instance is simply copied to the new pre-step. That gives the correct position, momentum, energy, polarization, etc. at the start of the step. Then a new post-step instance is populated at the end of the new step.
Super. Thank you for explaining that.