36.2. Geant4 Units Cheat Sheet
Table of Contents
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:
| Quantity | Symbol | Geant4 constant | Relation (to mm) |
|---|---|---|---|
| millimeter | mm | mm | $1 \,\text{mm}$ |
| centimeter | cm | cm | $1 \,\text{cm} = 10\,\text{mm}$ |
| meter | m | m | $1 \,\text{m} = 1000\,\text{mm}$ |
| micrometer | µm | micrometer | $1 \,\mu\text{m} = 10^{-3}\,\text{mm}$ |
| nanometer | nm | nanometer | $1 \,\text{nm} = 10^{-6}\,\text{mm}$ |
| kilometer | km | km | $1 \,\text{km} = 10^{6}\,\text{mm}$ |
Example:
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:
| Quantity | Symbol | Geant4 constant | Relation (to eV) |
|---|---|---|---|
| electronvolt | eV | eV | $1 \,\text{eV}$ |
| kiloelectronvolt | keV | keV | $1 \,\text{keV} = 10^{3}\,\text{eV}$ |
| megaelectronvolt | MeV | MeV | $1 \,\text{MeV} = 10^{6}\,\text{eV}$ |
| gigaelectronvolt | GeV | GeV | $1 \,\text{GeV} = 10^{9}\,\text{eV}$ |
| teraelectronvolt | TeV | TeV | $1 \,\text{TeV} = 10^{12}\,\text{eV}$ |
| joule | J | joule | $1 \,\text{J} \approx 6.2415\times10^{18}\,\text{eV}$ |
Examples:
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:
| Quantity | Symbol | Geant4 constant | Relation (to ns) |
|---|---|---|---|
| second | s | s | $1 \,\text{s} = 10^{9}\,\text{ns}$ |
| millisecond | ms | ms | $1 \,\text{ms} = 10^{6}\,\text{ns}$ |
| microsecond | µs | microsecond | $1 \,\mu\text{s} = 10^{3}\,\text{ns}$ |
| nanosecond | ns | ns | $1 \,\text{ns}$ |
| picosecond | ps | ps | $1 \,\text{ps} = 10^{-3}\,\text{ns}$ |
| femtosecond | fs | fs | $1 \,\text{fs} = 10^{-6}\,\text{ns}$ |
Example:
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:
| Quantity | Symbol | Geant4 constant | Relation (to kg) |
|---|---|---|---|
| kilogram | kg | kg | $1 \,\text{kg}$ |
| gram | g | g | $1 \,\text{g} = 10^{-3}\,\text{kg}$ |
| milligram | mg | mg | $1 \,\text{mg} = 10^{-6}\,\text{kg}$ |
Density units often combine mass and volume units:
| Quantity | Geant4 constant | Example value |
|---|---|---|
| g per cubic centimeter | g/cm3 | Water: 1.0*g/cm3 |
| mg per cubic centimeter | mg/cm3 | Lung tissue: 0.3*mg/cm3 |
| kg per cubic meter | kg/m3 | Air: about 1.29*kg/m3 |
Example material definition:
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:
| Quantity | Geant4 constant | Relation |
|---|---|---|
| radian | rad | $1 \,\text{rad}$ |
| degree | deg | $1 \,\text{deg} = \pi / 180 \,\text{rad}$ |
Solid angle:
| Quantity | Geant4 constant | Relation |
|---|---|---|
| steradian | sr | $1 \,\text{sr}$ |
Example:
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:
| Quantity | Geant4 constant | Notes |
|---|---|---|
| speed of light | c_light | In units of mm/ns |
| magnetic field | tesla, gauss | 1 tesla is $10^{4}$ gauss |
| electric field | volt/m, kV/cm | Frequently used in drift detectors |
| dose | gray | 1 gray is 1 J/kg |
| activity | becquerel, curie | 1 curie is $3.7\times10^{10}$ Bq |
Examples:
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:
#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:
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:
G4double worldSizeXYZ = 1.0*m;
G4Box* solidWorld = new G4Box("World", 0.5*worldSizeXYZ, 0.5*worldSizeXYZ, 0.5*worldSizeXYZ);Defining cuts and energies:
G4double cutValue = 1.0*mm;
SetCutValue(cutValue, "gamma");
G4double primaryEnergy = 662*keV;
particleGun->SetParticleEnergy(primaryEnergy);Working with positions and times:
G4ThreeVector pos(0.0, 0.0, -10*cm);
particleGun->SetParticlePosition(pos);
G4double t = step->GetPreStepPoint()->GetGlobalTime();
G4double t_ns = t/ns;Dose and density:
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
KAHIBARO