28.3 Checking Energy Conservation
Table of Contents
Why Energy Conservation Matters in Geant4
In a Geant4 simulation the total energy in an event should be conserved within the accuracy of the physics models and numerical precision. If you see large or systematic energy deficits or surpluses, it usually indicates a problem in your setup, in what you are recording, or in your interpretation of the results.
Energy conservation is not only a physics requirement. It is also a powerful debugging tool. By following the energy through your geometry and into your scoring, you can often locate missing sensitive volumes, incorrect production cuts, or misconfigured physics.
You should always be able to account for:
- Initial energy of all primary particles in an event.
- Energy deposited in materials (dose, heating).
- Energy carried away by secondaries that leave your scoring region.
- Energy of particles that are killed or stopped according to your cuts and physics.
The sum of items 2, 3, and 4 must be consistent with item 1, within expected numerical and model tolerances.
In this chapter the focus is on how to check energy conservation in practice, not on the underlying physics models.
Defining the Energy Balance
To check energy conservation you need a clear definition of what energy you expect and where it can go.
For a single event with one primary particle of initial energy $E_{\text{prim}}$, the energy balance can be written schematically as
$$
E_{\text{prim}} \approx E_{\text{dep}} + E_{\text{out}} + E_{\text{cut}} + E_{\text{rest}}
$$
where:
- $E_{\text{dep}}$ is the sum of all energy deposited in materials in your geometry.
- $E_{\text{out}}$ is the energy carried away by particles that leave a chosen control volume or the whole world.
- $E_{\text{cut}}$ is energy removed from transport by production cuts or range cuts, for example when particles fall below tracking thresholds.
- $E_{\text{rest}}$ is any remaining term, such as changes in rest mass energy when particles are created or annihilated, nuclear binding energy, or energy stored in nuclei in excited states.
For many detector problems, especially where you restrict attention to electromagnetic interactions and moderate energies, you can often focus on
$$
E_{\text{prim}} \approx E_{\text{dep}} + E_{\text{out}}
$$
and treat $E_{\text{cut}}$ and $E_{\text{rest}}$ as small corrections. However, for hadronic physics, nuclear interactions, and annihilation you must consider these terms carefully.
Practical rule: Before checking the numbers, decide exactly which terms you are going to track. Do not compare the primary energy only to the deposited energy unless you know that escaping and cut-off particles can be neglected.
Using Steps to Measure Energy Deposition
The most direct observable for checking energy conservation inside your geometry is the energy deposited per step. In a SteppingAction you can access
G4double edep = step->GetTotalEnergyDeposit();This value is the energy lost by the track in that step that is actually deposited locally in the material. It does not include kinetic energy transferred to new secondary particles, because that energy is carried away by those secondaries.
For an event, the total deposited energy in a chosen region or in the whole geometry is obtained by summing $E_{\text{dep}}$ over all steps that occur in that region during that event.
You can accumulate this in an EventAction or in your analysis manager. A simple pattern is to maintain an eventEdep variable that you reset at the beginning of the event and increment in the stepping action. At the end of the event you record eventEdep in a histogram or ntuple.
When you perform an energy conservation check you will often compare:
- The known initial energy of the primary, which you set in the primary generator, to
- The distribution of
eventEdepplus other energy terms that you record.
If you simulate a geometry that fully stops the primary and all secondaries, and if you track all particles down to very low cuts, then $E_{\text{dep}}$ per event should approach the primary energy, minus any rest mass changes and neutrinos or other untracked particles.
Accounting for Escaping Particles
If your geometry is finite, some particles will leave it carrying energy. To check energy conservation you must estimate this outgoing energy.
For each track you can look at its kinetic energy when it leaves the geometry or a chosen scoring volume. The post step point of the last step before the particle exits will have a step status and a kinetic energy you can use. For example, in a SteppingAction you can detect when a track leaves a logical volume of interest by checking the volume of the post step point. When this happens, you add the kinetic energy of the track at that moment to an E_out accumulator.
You may also want to include the rest mass energy of particles that leave. For pure electromagnetic shower containment studies, tracking kinetic energy is usually enough. For problems that involve nuclear reactions and particle transformations, including rest mass energy gives a more complete balance.
If your interest is in a detector region that is smaller than the world volume, you can choose to define $E_{\text{out}}$ as the energy crossing a particular boundary, for example from the detector into surrounding passive material. In that case, you only look at steps where the post step volume is outside the detector and record the outgoing kinetic energy.
Important check: If a large fraction of the primary energy appears as $E_{\text{out}}$, but physically you expect your detector or shield to contain most of the shower, you may have misconfigured the dimensions or the materials of your world or you may have misplaced the detector geometry.
Effects of Production Cuts and Tracking Limits
Geant4 uses production cuts and tracking limits to improve performance. These can remove low energy particles from explicit transport and replace their effect with local energy deposition or with no further tracking at all, depending on the process.
Typical effects include:
- Low energy secondary electrons and photons not being produced explicitly below a cut range, with their would-be energy being deposited at the point where they would have been created.
- Very low energy particles being killed once their range or kinetic energy falls below configured thresholds.
In the first case the missing explicit secondaries are compensated by an increased step energy deposit. In the second case part of the kinetic energy may be deposited locally, but the rest may be ignored or implicitly treated as heat. The exact behavior depends on the physics model.
From the point of view of your energy balance, this means that:
- $E_{\text{dep}}$ will already contain energy from some non-produced secondaries, so you do not need to count those separately.
- $E_{\text{cut}}$ may be non-zero if some kinetic energy is removed from the tracking without being added to $E_{\text{dep}}$ in a way you record.
If you perform a very strict energy conservation test, you may want to temporarily use very low production cuts and disable user tracking limits so that almost all energy ends up either as explicit deposited energy or in explicit secondaries.
Practical recommendation: For energy conservation tests, reduce production cuts as low as is reasonable and avoid user-imposed tracking cuts. First verify energy balance in this more detailed simulation. Only then increase cuts to improve performance, while checking that the changes remain within acceptable tolerances.
Checking Event-Level Energy Balance
An effective way to test energy conservation is to perform event level accounting, where for each event you compute quantities such as:
| Symbol | Meaning |
|---|---|
| $E_{\text{prim}}$ | Sum of initial energies of all primaries |
| $E_{\text{dep}}$ | Total energy deposited in your geometry |
| $E_{\text{out}}$ | Total kinetic energy of particles that escape |
| $E_{\text{rest}}$ | Net change in rest mass and nuclear energy |
For a simple test you can compute
$$
\Delta E = E_{\text{prim}} - \left(E_{\text{dep}} + E_{\text{out}}\right)
$$
and fill a histogram of $\Delta E$ over many events.
If energy is approximately conserved, this histogram should be centered near zero, and its width should reflect only small model related effects and numerical noise, not large systematic shifts.
If you add more terms you can compute a more complete balance
$$
\Delta E_{\text{full}} = E_{\text{prim}} - \left(E_{\text{dep}} + E_{\text{out}} + E_{\text{cut}} + E_{\text{rest}}\right)
$$
though in practice you often approximate $E_{\text{cut}}$ and $E_{\text{rest}}$ or treat them qualitatively.
Diagnostic rule: A narrow $\Delta E$ distribution that is offset from zero indicates a systematic missing or double counted term. A very wide distribution suggests that different physics channels are being treated in very different ways, or that your scoring is incomplete for some event classes.
Common Sources of Apparent Energy Loss
When checking energy conservation in Geant4, many apparent violations are due to how you score and interpret the results, rather than to a problem in the core simulation. Some frequent causes are:
- You only sum energy deposition in a subset of volumes. For example, you integrate deposited energy in a detector crystal, but ignore deposits in surrounding support materials or world material. The total deposit in your crystal will then be less than the primary energy, which is physically correct but must not be mistaken for non-conservation.
- You ignore escaping particles. If a primary or its secondaries leave the world or your scoring region, they take energy with them.
- You ignore rest mass and nuclear binding energy. In processes such as pair production, nuclear capture, or annihilation, part of the initial energy goes into rest mass or is released from it. If you only track kinetic energy and ionization energy, you will see apparent discrepancies.
- You use production cuts that remove low energy particles from explicit tracking. If you compare detailed and coarse simulations without understanding the effect of cuts, you may see different deposited energies even though both are self-consistent.
- You mis-handle units. A common beginner mistake is to store energy in MeV, but interpret it as keV or vice versa when writing analysis code, leading to incorrect comparisons with the primary energy.
- You double count or miss steps in your own code. For example, accumulating energy both in
SteppingActionand in a sensitive detector that already sums the same step deposits, or forgetting to reset per event accumulators at the start of each event.
When you see an energy deficit, it is useful to first construct a very simple geometry and physics configuration where you can understand every process, such as a monoenergetic electron beam in a thick block of a single material, and test your scoring logic there before returning to more complex setups.
Strategies to Debug Energy Conservation Problems
If you suspect an energy conservation problem, you can proceed systematically.
First, simplify the scenario. Reduce the geometry to a minimal case and use a simple particle and energy for which you have a clear physical expectation, such as a low energy electron that should stop within a small volume. Lower production cuts to near default minimal values so that low energy secondaries are tracked. Disable unnecessary user cuts or custom processes.
Next, enable verbose tracking or stepping output for a small number of events using macro commands. Follow the energy of a single track step by step, checking the total energy, kinetic energy, and energy deposit at each step. Geant4 allows you to see processes that act at each step, which helps to understand where energy goes.
Then, add temporary logging to your user actions. For example, print the values of E_prim, E_dep, and E_out per event for a handful of events and check them manually. Verify that per event variables are properly initialized in BeginOfEventAction and that they are filled consistently in SteppingAction or sensitive detectors.
After that, add or refine scoring of escaping energy. Implement a simple counter for the kinetic energy of any track that leaves the world or a specific volume. Check whether including this term closes the energy balance.
Finally, once you have a configuration that preserves energy within the expected tolerance, gradually reintroduce the complexity you need in geometry, physics lists, and production cuts. At each step confirm that the energy balance remains acceptable. If a change introduces a large deviation, you have identified the source to investigate further.
Key debugging habit: When you change geometry, physics, or cuts, re-check your basic energy balance on a small sample of events before trusting detailed analysis results.
By consistently applying these checks, you can gain confidence that your Geant4 simulation respects energy conservation to the extent allowed by its models, and that any residual discrepancies are understood and under control.
Views: 9
KAHIBARO