KAHIBARO
Discord Login Register

36.2. Geant4 Units Cheat Sheet

Length Units

Geant4 uses its own internal unit system. You must always multiply numeric literals by a unit constant. This prevents silent mistakes and keeps code readable.

Typical length units are defined in G4SystemOfUnits.hh and used directly in C++ code, for example 10cm or 2.5m.

Common length units include:

QuantitySymbolGeant4 constantRelation (to mm)
millimetermmmm$1 \,\text{mm}$
centimetercmcm$1 \,\text{cm} = 10\,\text{mm}$
metermm$1 \,\text{m} = 1000\,\text{mm}$
micrometerµmmicrometer$1 \,\mu\text{m} = 10^{-3}\,\text{mm}$
nanometernmnanometer$1 \,\text{nm} = 10^{-6}\,\text{mm}$
kilometerkmkm$1 \,\text{km} = 10^{6}\,\text{mm}$

Example:

cpp
G4double worldSize = 1.0*m;
G4double pixelSize = 300*micrometer;

Always multiply raw numbers by a Geant4 unit constant like mm, cm, or m.
Never mix raw SI numbers with Geant4 numbers without an explicit unit.

Energy Units

Energy is central in Geant4. The base energy unit is MeV internally, but you should always use the symbolic constants.

Common energy units:

QuantitySymbolGeant4 constantRelation (to eV)
electronvolteVeV$1 \,\text{eV}$
kiloelectronvoltkeVkeV$1 \,\text{keV} = 10^{3}\,\text{eV}$
megaelectronvoltMeVMeV$1 \,\text{MeV} = 10^{6}\,\text{eV}$
gigaelectronvoltGeVGeV$1 \,\text{GeV} = 10^{9}\,\text{eV}$
teraelectronvoltTeVTeV$1 \,\text{TeV} = 10^{12}\,\text{eV}$
jouleJjoule$1 \,\text{J} \approx 6.2415\times10^{18}\,\text{eV}$

Examples:

cpp
G4double gammaEnergy = 511*keV;
G4double beamEnergy  = 120*GeV;

Use keV, MeV, or *GeV when setting particle energies, cut values, or histogram ranges.
Do not assume the default is eV or MeV without writing the unit.

Time Units

Time units are important for timing studies, time of flight, and detector response.

Common time units:

QuantitySymbolGeant4 constantRelation (to ns)
secondss$1 \,\text{s} = 10^{9}\,\text{ns}$
millisecondmsms$1 \,\text{ms} = 10^{6}\,\text{ns}$
microsecondµsmicrosecond$1 \,\mu\text{s} = 10^{3}\,\text{ns}$
nanosecondnsns$1 \,\text{ns}$
picosecondpsps$1 \,\text{ps} = 10^{-3}\,\text{ns}$
femtosecondfsfs$1 \,\text{fs} = 10^{-6}\,\text{ns}$

Example:

cpp
G4double gateWidth = 10*ns;
G4double coincidenceWindow = 5*ns;

Use explicit time units like ns, microsecond, and s whenever you work with GetGlobalTime() or timing histograms.
Never rely on implicit time scales.

Mass and Density Units

Mass and density appear when creating materials and defining particle properties.

Common mass units:

QuantitySymbolGeant4 constantRelation (to kg)
kilogramkgkg$1 \,\text{kg}$
gramgg$1 \,\text{g} = 10^{-3}\,\text{kg}$
milligrammgmg$1 \,\text{mg} = 10^{-6}\,\text{kg}$

Density units often combine mass and volume units:

QuantityGeant4 constantExample value
g per cubic centimeterg/cm3Water: 1.0*g/cm3
mg per cubic centimetermg/cm3Lung tissue: 0.3*mg/cm3
kg per cubic meterkg/m3Air: about 1.29*kg/m3

Example material definition:

cpp
G4double density = 1.0*g/cm3;
G4double a = 1.01*g/mole;
G4Material* H = new G4Material("Hydrogen", 1., a, density);

When defining materials always specify density with combined units like g/cm3 or kg/m3.
Do not try to compute density in pure SI and forget the unit factor.

Angle and Solid Angle Units

Geant4 uses radians internally but provides constants for both radians and degrees.

Angle units:

QuantityGeant4 constantRelation
radianrad$1 \,\text{rad}$
degreedeg$1 \,\text{deg} = \pi / 180 \,\text{rad}$

Solid angle:

QuantityGeant4 constantRelation
steradiansr$1 \,\text{sr}$

Example:

cpp
G4double theta = 45*deg;
G4double phi   = 90*deg;

Do not pass bare numbers where an angle is expected. Always use deg or rad to avoid confusion between radians and degrees.

Other Common Units

Velocity, magnetic field, and dose units appear frequently in detector and medical simulations.

Selected examples:

QuantityGeant4 constantNotes
speed of lightc_lightIn units of mm/ns
magnetic fieldtesla, gauss1 tesla is $10^{4}$ gauss
electric fieldvolt/m, kV/cmFrequently used in drift detectors
dosegray1 gray is 1 J/kg
activitybecquerel, curie1 curie is $3.7\times10^{10}$ Bq

Examples:

cpp
G4double fieldStrength = 1.5*tesla;
G4double dose          = 2*gray;

Unit Conversion Helpers

Geant4 provides utility functions to convert between internal and human readable units.

For printing values with preferred units you can use:

cpp
#include "G4SystemOfUnits.hh"
#include "G4UnitsTable.hh"
G4double energy = 5*MeV;
G4cout << "Energy = " << G4BestUnit(energy, "Energy") << G4endl;
G4double length = 150*cm;
G4cout << "Length = " << G4BestUnit(length, "Length") << G4endl;

Useful categories for G4BestUnit include "Length", "Energy", "Time", "Volumic Mass" for density, and "Dose".

You can also force a specific unit by dividing:

cpp
G4cout << "Energy (MeV) = " << energy/MeV << G4endl;
G4cout << "Length (cm)  = " << length/cm  << G4endl;

To print a value in specific units divide by that unit, for example value/MeV or value/cm.
G4BestUnit chooses a human friendly scale automatically but you must still pass the correct quantity type string.

Typical Code Patterns

This section shows concise patterns you will reuse in most applications.

Setting geometry sizes:

cpp
G4double worldSizeXYZ = 1.0*m;
G4Box* solidWorld = new G4Box("World", 0.5*worldSizeXYZ, 0.5*worldSizeXYZ, 0.5*worldSizeXYZ);

Defining cuts and energies:

cpp
G4double cutValue = 1.0*mm;
SetCutValue(cutValue, "gamma");
G4double primaryEnergy = 662*keV;
particleGun->SetParticleEnergy(primaryEnergy);

Working with positions and times:

cpp
G4ThreeVector pos(0.0, 0.0, -10*cm);
particleGun->SetParticlePosition(pos);
G4double t = step->GetPreStepPoint()->GetGlobalTime();
G4double t_ns = t/ns;

Dose and density:

cpp
G4double density = 1.0*g/cm3;
G4double dose    = edep / mass; // edep in joule, mass in kg, result in gray

Whenever you see a dimensional quantity in your code, stop and check that it is multiplied or divided by the correct Geant4 unit constant.
Systematic unit mistakes are among the most common and hardest to debug problems in Geant4 simulations.

Views: 10

Comments

Please login to add a comment.

Don't have an account? Register now!