Interpreting Range Cuts with Energy Thresholds


I am unable to understand Range Cuts fully. For example, in the attached file does it mean that interactions of all the gammas below 419 keV is ignored in lead?

Also, I see that Range_Cut of 2 cm corresponds to energy threshold 419 keV. Is it saying that the range of 419 keV photon is 2 cm in lead? In other words, how these two are related?


Range Cuts (also called Production Cuts) do not affect active tracks. They affect whether or not the EM processes create new secondaries, or whether they take the energy of those secondaries and add it into the “TotalEnergyDeposit” for a step.

No. If you have a track, it will be followed with all of its interactions, all the way until it stops (zero energy).

Approximately. There is a mean interaction length which is energy dependent. You can use that interaction length, and how it changes with energy, to estimate the “range” of a particle in the material, and that’s the relationship you see.

In Geant4, you specify a Production Cut (for gammas, electrons, positrons, and hadrons) in units of length. The code can then use that “universal” value and translate it into an appropriate minimum energy for each material of each volume in your simulation.

That’s a really good explanation. Thank you!

I went ahead for :

Basically, I compared a few range-values for electrons in boron and lead corresponding to energy threshold. I checked if theoretical/predicted range matches with Geant4. They came in agreement, which is awesome! The theoretical predictions were from:

[1] Electron Range Approximation Tool
[2] Turner, “Atoms, Radiation, and Radiation Protection”

Mentioned just in case if someone is curious about this in future.

There’s also a G4EmCalculator tool in G4 which I think will report what it calculates, which might make these sorts of comparisons easier for you.

I didn’t know this. I made an attempt and referred to in TestEm0

As a short test, I added the following in my–because the material boron was defined there. Here are the additions I made:

#include "G4LossTableManager.hh"
#include "G4EmCalculator.hh"
#include "G4Electron.hh"
#include "G4UnitsTable.hh"
#include "G4PhysicalConstants.hh"

G4VPhysicalVolume* DetectorConstruction::Construct()
    //Uusal working code
    G4Material* boron = nist->FindOrBuildMaterial("G4_B");
    G4EmCalculator emCal;

    G4double range = emCal.GetCSDARange(1.*MeV, G4Electron::Electron(), boron);
    G4cout << "****RANGE IN Boron*****" << G4BestUnit(range,"Length") << G4endl;

Error that I get is:

-------- WWWW ------- G4Exception-START -------- WWWW -------
*** G4Exception : em0077
      issued by : G4EmCalculator::GetCSDARange
G4EmCalculator::GetCSDARange: CSDA table is not built;  use UI command: /process/eLoss/CSDARange true
*** This is just a warning message. ***
-------- WWWW -------- G4Exception-END --------- WWWW -------

****RANGE IN Boron*****0 fm 

What am I missing here? 0 fm seems to be wrong as well, it is not able to workout the GetCSDARange Any suggestions

The zero is just the return value when there is an error. since you got an error, you should ignore the returned value (in real code, you could test for zero and take some appropriate error action).

As for why the error, you put this into your DetectorConstruction class, which gets invoked first, before the physics. G4EmCalculator needs to have all of the cross-section and dE/dx tables loaded for all the materials, before it can do its job. That happens after the geometry is built. You might try putting this into your event action.

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.