36.5. Common Particle Definitions
Table of Contents
Overview
In Geant4 you never write your own particle classes. Instead, you request particle types from Geant4, and the toolkit provides complete definitions that include mass, charge, lifetime, and standard physics processes. For practical work you mainly need to know:
- Which class or factory provides the particle.
- The PDG-style name string used in macros.
- Which “particle table” category the particle belongs to.
This appendix collects the most common particles and where to find them in Geant4.
Always use Geant4’s built-in particle definitions such as G4Gamma::Gamma() or /gps/particle e-. Never invent your own masses, charges, or lifetimes unless you are deliberately defining an exotic or test particle.
The Particle Table and Names
Geant4 keeps all known particles in a central G4ParticleTable. You usually do not access it directly, but it is useful to know:
In C++ you can obtain a particle by name:
auto particleTable = G4ParticleTable::GetParticleTable();
G4ParticleDefinition* electron =
particleTable->FindParticle("e-");In macros you use the same name string:
/gps/particle e-Common particles follow standard PDG naming conventions. The table below shows typical name patterns you will see in Geant4 macros and in particle table lookups.
| Category | Example name | Pattern / Notes |
|---|---|---|
| Photon | gamma | Gamma rays, i.e. photons |
| Electron / positron | e-, e+ | Charge sign as in PDG |
| Muons | mu-, mu+ | Negative and positive muons |
| Pions | pi-, pi+,pi0 | Charged and neutral pions |
| Kaons | kaon-, kaon+,kaon0, kaon0L, kaon0S | Strange mesons |
| Nucleons | proton, anti_proton, neutron, anti_neutron | With underscore for anti |
| Ions | ion, specific ions via command options | Created via ion commands |
| Neutrinos | nu_e, anti_nu_e, nu_mu, anti_nu_mu, … | If enabled by physics list |
Use these exact strings when setting up particle sources via macro commands.
Fundamental Electromagnetic Particles
Electromagnetic particles are the most commonly used in detector simulations, radiation studies, and medical physics. Geant4 gives convenient C++ helpers for them.
Photon (Gamma)
In Geant4 a “gamma” is a photon. It is defined with zero mass and zero charge.
Typical C++ access:
auto gamma = G4Gamma::Gamma();Macro name:
/gps/particle gammaPhotons are heavily used as primary particles in gamma detectors, shielding studies, and medical imaging examples.
Electron and Positron
Electrons and positrons are defined with their physical mass and charges:
auto electron = G4Electron::Electron(); // e-
auto positron = G4Positron::Positron(); // e+Macro names:
/gps/particle e-
/gps/particle e+These are important for electromagnetic showers, beta radiation, and annihilation processes.
Muons
Muons appear frequently in cosmic-ray simulations and some detector backgrounds.
C++:
auto muMinus = G4MuonMinus::MuonMinus(); // mu-
auto muPlus = G4MuonPlus::MuonPlus(); // mu+Macro names:
/gps/particle mu-
/gps/particle mu+Muons are heavier cousins of electrons with the same charge signs.
Hadrons: Pions, Kaons, and Nucleons
Hadronic particles are important for calorimetry, accelerator shielding, and nuclear physics applications. Most of the time you simply set the particle by its name.
Pions
Pions are the lightest mesons and appear in hadronic showers and many beam lines.
C++ definitions:
auto piPlus = G4PionPlus::PionPlus(); // pi+
auto piMinus = G4PionMinus::PionMinus(); // pi-
auto pi0 = G4PionZero::PionZero(); // pi0Macro names:
/gps/particle pi+
/gps/particle pi-
/gps/particle pi0Kaons
Kaons carry strangeness and appear in higher-energy hadron interactions.
Common C++ helpers:
auto kp = G4KaonPlus::KaonPlus(); // kaon+
auto km = G4KaonMinus::KaonMinus(); // kaon-
auto k0 = G4KaonZero::KaonZero(); // kaon0 (generic)
auto k0L = G4KaonZeroLong::KaonZeroLong(); // kaon0L
auto k0S = G4KaonZeroShort::KaonZeroShort();// kaon0SMacro names:
/gps/particle kaon+
/gps/particle kaon-
/gps/particle kaon0
/gps/particle kaon0L
/gps/particle kaon0SProtons and Neutrons
Protons and neutrons are crucial in shielding, activation studies, and proton therapy examples.
C++:
auto proton = G4Proton::Proton(); // proton
auto neutron = G4Neutron::Neutron(); // neutron
auto antiP = G4AntiProton::AntiProton(); // anti_proton
auto antiN = G4AntiNeutron::AntiNeutron(); // anti_neutronMacro names:
/gps/particle proton
/gps/particle neutron
/gps/particle anti_proton
/gps/particle anti_neutronFor clinical proton beams or detailed neutron transport, always choose an appropriate reference physics list and production cuts. Using the right physics list is essential for correct energy loss and scattering behavior.
Ions and Nuclei
Geant4 can simulate any nucleus using an ion definition. You normally do not construct these directly via C++ factory classes; instead you request ions from G4IonTable or, more commonly in beginner setups, via macro commands.
Ion Names and Commands
In macros you can configure generic ions with the /gun/ion or /gps/ion commands. For example, a monoenergetic carbon-12 beam:
/gps/particle ion
/gps/ion 6 12 6 0The arguments are:
| Parameter | Meaning |
|---|---|
| Z | Atomic number (protons) |
| A | Mass number (nucleons) |
| Q | Charge state (in units of e) |
| E | Excitation energy (in keV) |
So /gps/ion 6 12 6 0 means: Z = 6, A = 12, ion charge = +6e, excitation energy = 0 keV, which corresponds to fully stripped carbon-12.
C++ access via the ion table:
auto ionTable = G4IonTable::GetIonTable();
G4ParticleDefinition* carbon12 =
ionTable->GetIon(6, 12, 0.*keV);This is particularly important for heavy ion therapy simulations and nuclear physics.
Common Light Ions
Typical small ions used in medical and space applications include:
| Ion | Z | A | Example macro snippet |
|---|---|---|---|
| Deuteron | 1 | 2 | /gps/particle deuteron |
| Triton | 1 | 3 | /gps/particle triton |
| Alpha (He-4) | 2 | 4 | /gps/particle alpha or /gps/ion 2 4 2 0 |
| Generic ion | any | any | /gps/particle ion + /gps/ion Z A Q E |
Geant4 provides direct names for some light ions like alpha, deuteron, and triton in both C++ and macros, so you do not always need /gps/ion.
Neutrinos and Other Leptons
Neutrinos are often not central to detector response in Geant4, but they can be defined and transported depending on the physics list.
Common neutrino names:
/gps/particle nu_e
/gps/particle anti_nu_e
/gps/particle nu_mu
/gps/particle anti_nu_muTheir presence and behavior depend strongly on the chosen physics list. For many detector simulations neutrinos essentially escape without interaction.
Tau leptons and their neutrinos also exist:
/gps/particle tau-
/gps/particle tau+
/gps/particle nu_tau
/ gps/particle anti_nu_tauThese are more relevant for high-energy physics than for typical beginner detector examples.
Geant4 Particle Categories
Internally, Geant4 organizes particles into categories. This is mostly useful if you explore or filter the particle table, but it helps to understand where standard particles “live”.
Main categories used in G4ParticleTable:
| Category | Examples |
|---|---|
G4Lepton | e-, e+, mu-, mu+, tau |
G4Boson | gamma, W, Z, Higgs |
G4Meson | pi, kaon, others |
G4Baryon | proton, neutron, hyperons |
G4Ion / G4Ions | All nuclei and heavy ions |
G4ShortLivedParticle | Resonances, virtuals |
For typical beginner simulations you only work with standard leptons, photons, nucleons, mesons, and ions. Exotic and short-lived states are usually handled automatically by the physics processes you enable.
Using Particle Definitions in C++ and Macros
For most applications you will use one of two approaches.
In C++ code, when configuring a primary generator with a particle gun:
#include "G4ParticleGun.hh"
#include "G4ParticleTable.hh"
...
G4ParticleGun* fGun = new G4ParticleGun(1);
auto particleTable = G4ParticleTable::GetParticleTable();
auto proton = particleTable->FindParticle("proton");
fGun->SetParticleDefinition(proton);Here the most important part is the name string, which must match the Geant4 particle definition exactly.
In macro files, for the General Particle Source:
/gps/particle gamma
/gps/energy 1 MeV
/gps/position 0 0 0 mm
/gps/direction 0 0 1
This uses the same particle name string as FindParticle.
Always verify that the particle name you use in macros or in FindParticle() exactly matches a Geant4 definition. A typo such as "protton" will quietly fail and typically lead to a null pointer in C++, or a macro error.
Summary Table of Common Particle Names
The table below summarizes the most common particle names you will use in Geant4 beginner projects.
| Type | C++ class example | Macro name example |
|---|---|---|
| Photon | G4Gamma::Gamma() | gamma |
| Electron | G4Electron::Electron() | e- |
| Positron | G4Positron::Positron() | e+ |
| Muon minus | G4MuonMinus::MuonMinus() | mu- |
| Muon plus | G4MuonPlus::MuonPlus() | mu+ |
| Pion plus | G4PionPlus::PionPlus() | pi+ |
| Pion minus | G4PionMinus::PionMinus() | pi- |
| Pion zero | G4PionZero::PionZero() | pi0 |
| Kaon plus | G4KaonPlus::KaonPlus() | kaon+ |
| Kaon minus | G4KaonMinus::KaonMinus() | kaon- |
| Proton | G4Proton::Proton() | proton |
| Neutron | G4Neutron::Neutron() | neutron |
| Anti proton | G4AntiProton::AntiProton() | anti_proton |
| Anti neutron | G4AntiNeutron::AntiNeutron() | anti_neutron |
| Alpha | via G4IonTable or helper | alpha or ion+params |
| Deuteron | via G4Deuteron::Deuteron() | deuteron |
| Triton | via G4Triton::Triton() | triton |
| Generic ion | via G4IonTable | ion + /gps/ion |
| Electron neutrino | via G4NeutrinoE | nu_e, anti_nu_e |
| Muon neutrino | via G4NeutrinoMu | nu_mu, anti_nu_mu |
With these definitions and names you can configure almost any primary beam commonly used in the rest of this course, from gamma sources and electron beams to protons, neutrons, and simple ion beams.
Views: 10
KAHIBARO