Frequently Asked Questions on Physics
This page explains several additional features that are available to users for the development of Geant4-DNA-based applications.
Material definition and density change
Geant4-DNA physics models can be used in liquid water, which is defined in Geant4 as the NIST material G4_WATER. To do so, one may use the following lines in the DetectorConstruction class :
// Water is defined from the NIST material database
G4NistManager * man = G4NistManager::Instance();
G4Material * H2O = man->FindOrBuildMaterial("G4_WATER");
// Default materials in setup.
waterMaterial = H2O;
The density of water is taken by default as 1 g/cm3. In case you need to change the density of water, you may look into the « dnaphysics » extended example DetectorConstruction class:
// If one wishes to test other density value for water material, one should use instead:
G4Material * H2O = man->BuildMaterialWithNewDensity("G4_WATER_MODIFIED","G4_WATER »,1.1*g/cm/cm/cm);
// Note: any string for "G4_WATER_MODIFIED" parameter is accepted and "G4_WATER" parameter should not be changed
Geometrical tolerances
When using Geant4-DNA processes, the geometrical tolerances of the setup must be coherent with the size of the setup when working with nanometer size dimensions. For this, in the DetectorConstruction class Construct() method, you may use the following lines:
#include "G4GeometryManager.hh"
#include "G4GeometryTolerance.hh"
...
G4double fWorldLength = 100. *nm;
G4GeometryManager::GetInstance()->SetWorldMaximumExtent(fWorldLength);
G4cout << "Surface tolerance = " << G4GeometryTolerance::GetInstance()->GetSurfaceTolerance()/nm
<< " nm - Radial tolerance = " << G4GeometryTolerance::GetInstance()->GetRadialTolerance()/nm << " nm" << G4endl;
How to activate Auger electron production?
Use the following User Interface commands, provided that your PhysicsList class uses the G4EmDNAPhysics Physics constructor.
/process/em/auger true
For a full simulation of Auger cascades, the following additional command is available:
/process/em/augerCascade true
and should be used in combination with
/process/em/deexcitationIgnoreCut true
All Geant4-DNA physics constructors activate by default Auger cascade simulation.
How to kill particles below a given energy threshold for faster performance?
In case the user needs to kill particles with energies below a selected energy threshold value, one may instantiate a G4UserLimits object in the DetectorConstruction class and define the process G4UserSpecialCuts in the user PhysicsList class for the affected particles. All details are given in the Geant4 Book For Application Developers.
For example, in order to kill all electrons below 9 eV, one may use the following lines. All electron tracks below 9 eV will be killed, and electrons will deposit their total energy locally at the end of the current step :
- in the DetectorConstruction class, one can choose to apply this limit to the World volume :
#include "G4UserLimits.hh"
...
logicWorld->SetUserLimits(new G4UserLimits(DBL_MAX,DBL_MAX,DBL_MAX,9*eV));
- in the PhysicsList class, for example, in the ConstructProcess() method, one can add :
#include "G4UserSpecialCuts.hh"
#include "G4PhysicsListHelper.hh"
#include "G4Electron.hh"
...
G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper();
ph->RegisterProcess(new G4UserSpecialCuts(),G4Electron::ElectronDefinition());
...
An alternative approach is to use a dedicated process that will act similarly; this is illustrated in the « microdosimetry » extended example, using the G4ElectronCapture process. By default, energy is dumped at the post-step position of the step. The user can modify this class in order to dump at the pre-step position if needed.
How can the low energy limit of the vibrational excitation model for electrons be decreased?
// Vibrational excitation (can be extended down to 0.025 eV)
G4DNAVibExcitation* theDNAVibProcess = new G4DNAVibExcitation("e-_G4DNAVib");
theDNAVibProcess->SetEmModel(new G4DNASancheExcitationModel() );
((G4DNASancheExcitationModel*)(theDNAVibProcess->EmModel()))->ExtendLowEnergyLimit(0.025*eV);
// ph is G4PhysicsListHelper
ph->RegisterProcess(theDNAVibProcess, particle);
How to combine Geant4-DNA processes with other Geant4 processes ?
Please refer to the « dnaphysics » or « microdosimetry » extended/medical/dna examples.
How to access Geant4-DNA total cross sections ?
It is possible to retrieve total cross sections using a G4EmCalculator object. For example, in order to retrieve the total cross section of a process with name procName, do as follows :
#include "G4EmCalculator.hh"
...
G4EmCalculator emCalculator;
G4double density = material->GetDensity();
G4double massSigma = emCalculator.ComputeCrossSectionPerVolume(energy,particle,procName,material)/density;
G4cout << G4BestUnit(massSigma, "Surface/Mass") << G4endl;
A good example is extended example TestEm14 (located in $G4INSTALL/examples/extended/electromagnetic), in particular in the Run class.
Note that in order to use the ComputeCrossSectionPerVolume method from the G4EmCalculator class for alpha particles (G4Alpha), it is necessary to add the following condition to G4EmCalculator::UpdateParticle in G4EmCalculator.cc (located in $G4INSTALL/source/processes/electromagnetic/utils/src)
&& currentParticleName != "alpha"
Where are Geant4 units defined ?
Units can be found in the source/global/management/include/G4SystemOfUnits.hh file.
How to change the sequence of random numbers?
Try the User Interface command:
/random/setSeeds N M
More details here.