Hello everyone!
Suppose I shoot an X-ray into a scintillator and have a photoabsorption event inside the latter. After that, the initial X-ray is killed and a hot photoelectron is created. I want to track the path of that photoelectron. To do so, I enabled a low-energy physics list (Livermore/Penelope). Then I output information about all the steps that photoelectron takes before it dies.
What happens is that the number of steps and what happens during each step significantly depends on the following line (which makes sense) inside the PhysicsList.cc file constructor:
G4EmParameters* param = G4EmParameters::Instance();
param->SetStepFunction(0.01, 0.1*nm);
param->SetLowestElectronEnergy(1.0*eV);
However, this seems rather arbitrary. Changing 0.01 here in the SetStepFunction to say 0.5 makes the photoelectron take 1 step, fully depositing its energy and die versus 50-100 steps with 0.01. At each step, I see that the process is eIoni. Sometimes, with 0.01 I have steps with zero deposited energy (Edep = 0), but the process is still shown as eIoni. With very small parameter like 0.001 the steps seem to do a lot of small zig-zags which doesn’t look physical.
My question is the following: what exactly can be taken as the “true” path of the primary photoelectron?
UPD: A related question is: does it make sense that the Process defining the step is eIoni, but the deposited energy of the step is zero?
Hello,
Condense history approach means that a step of an electron in media there are at least several elastic and inelastic collisions. My estimation is that if step is above 0.1 micron Geant4 models and ionisation, fluctuations of energy los, and multiple scattering are applicable and results are reliable.
If you step are smaller these models are under question. In the EM physics constructor Opt4 we have a collection of more accurate models, including Livermore and Penelope. The default lowest limit is 100 eV. It ma be reduced to 10 eV, because electron stopping power tables in the Livermore model have low energy limit 10 eV. Reduction of it to 1 eV does not make sense.
Potentially it is possible to use SS (single scattering) physics constructor. It will be slower than Opt4. You also need to reduce “cut in range” and low energy limit of it but a reasonable value of this low limit is 100 eV.
The model of energy lost fluctuation at small steps may return zero, which is correct physically. However, the accuracy of the fluctuation model at the small steps is limited.
In summary: if you agree to limit step by 0.1 micron and lowest limit to 10 eV, you may get reasonable results with Opt4 EM physics or SS physics.
VI
Thank you for your response! I don’t understand how “physical” is step limiting. Let me be more specific. I use Livermore low energy physics:
PMPhysicsList::PMPhysicsList():G4VModularPhysicsList()
{
RegisterPhysics(new G4EmLivermorePhysics());
G4OpticalPhysics* opticalPhysics = new G4OpticalPhysics();
RegisterPhysics(opticalPhysics);
auto* opticalParams = G4OpticalParameters::Instance();
RegisterPhysics(new G4StepLimiterPhysics());
G4EmParameters* param = G4EmParameters::Instance();
// param->SetStepFunction(0.02, 100*nm);
}
Suppose my initial X-ray photon energy is low (10 keV). It gets photoabsorbed in a scintillator, and generates a photoelectron with a few keV energy. If I don’t specify StepSizeLimit (it is commented out in the code above), this phototelectron just takes one step and dies, depositing energy and generating optical photons along its step. With three events (/run/beamOn 3), I get as an example either 1) start with E_kin ~ 2 keV and step length ~ 55 nm or 2) with E_kin ~ 8.85 keV and step length of ~ 570 nm. In this case the step is just a straight line between two points, but optical photons were generated randomly along the step according to the total energy deposited. So in the first case Geant4 itself chose 55 nm step which is already < 100 nm.
If I enable StepFunction(0.2, 100 nm), now the following happens: the E_kin ~ 2 keV case doesn’t change (one step ~ 55 nm and dies), which makes sense. The E_kin ~ 8.85 keV case changes, now it’s steps are about ~100-300 nm, it makes about 3 steps, although the very last step before death is about 40 nm. So this case corresponds to what you would call still reliable (as I understand).
My question is: how physical it is that we artificially resricted the step to ~ 0.2 of the proposed range (the first parameter in StepFunction) if Geant4 already chose 500 nm? Isn’t this artifical “wiggling”?