46.5. Changing Shield Thickness
Table of Contents
Understanding Shield Thickness in Simulation
In a radiation shielding simulation with GATE, the shield thickness is a controllable geometric parameter that directly affects how many photons are transmitted. In this chapter you focus on how to represent thickness in your geometry, how to change it in your Python script, and how to vary it systematically to study attenuation.
You already know how to create a source and a shield from earlier sections of this practical example. Here you will only adjust the size of the shield in the beam direction and reuse the rest of the setup.
Thickness as a Geometry Parameter
In GATE, the shield is typically implemented as a simple solid, for example a box volume. For a mono‑directional gamma beam, you usually orient the box so that one dimension is along the beam axis. That dimension is then interpreted as the shield thickness.
If your beam travels along the positive $z$ axis, a natural choice is:
- $x$ and $y$ define the lateral size of the shield, usually larger than the beam so that all photons cross the material.
- $z$ is the thickness, that is the distance the photons travel inside the shield.
In Geant4 and GATE, box sizes are given as half lengths. So if you want a thickness $t$ along $z$, you must set the half length to $t/2$. For example, a 5 cm thick lead plate centered at the origin has $z$ half length of $2.5\ \text{cm}$.
In GATE box geometry, the size you provide for each axis is the half length.
Required shield thickness $t$ along the beam axis:
Half length to set in the simulation: $t/2$.
This convention is a common source of confusion. Always check whether you are specifying total length or half length when you change thickness.
Implementing Thickness Changes in Python
In an OpenGATE Python simulation, you typically create the shield as a volume with a defined size. A simplified pattern for a box shield aligned with the $z$ axis is:
import opengate as gate
from opengate.units import mm
sim = gate.Simulation()
# ... world, source, physics, and actors already defined ...
shield = sim.add_volume("Box", "shield")
shield.mother = "world"
shield.size = [50 * mm, 50 * mm, 10 * mm] # half lengths in x, y, z
shield.translation = [0 * mm, 0 * mm, 0 * mm]
shield.material = "G4_Pb"
Here, the shield thickness along $z$ is $2 \times 10\ \text{mm} = 20\ \text{mm}$, that is 2 cm of lead. To change the thickness, you only adjust the third component of size.
To make this flexible and easy to modify, it is better to define a variable for the total thickness and compute the half length:
shield_thickness = 20 * mm # total thickness along z
half_thickness = shield_thickness / 2
shield.size = [50 * mm, 50 * mm, half_thickness]
Now you can change shield_thickness in one place and the geometry updates accordingly. This is especially helpful when you run multiple simulations with different thickness values.
Avoiding Unit and Position Mistakes
Since you work with multiple thickness values, it is important to be strict about units and placement.
First, always multiply by the correct unit when you define shield_thickness. If you intend 2 cm of lead, use:
shield_thickness = 2.0 * cm
and not 2.0 * mm.
Second, confirm that the shield is actually intersected by the beam. For a collimated beam along $+z$, centered at $x = y = 0$, a shield at the origin with translation [0, 0, 0] is fine. If you move the shield away from the origin, you must account for its half thickness so that the beam crosses material, for example:
shield.translation = [0 * mm, 0 * mm, 50 * mm] # center positionIf the beam source is at negative $z$ and the detector is at positive $z$, you can place the shield between them and then vary thickness without changing its center.
A simple consistency check is to visualize the geometry after changing thickness and verify that the beam path crosses the shield volume completely.
Systematic Studies with Multiple Thicknesses
To study attenuation, you typically simulate the same source and detector setup for several shield thickness values and record the transmitted photon counts. The easiest way to do this is to loop over a list of thicknesses and run one simulation per value.
A simple pattern is:
import numpy as np
from opengate.units import mm, cm
thickness_values = [0 * mm, 5 * mm, 10 * mm, 20 * mm, 30 * mm]
for t in thickness_values:
sim = gate.Simulation()
# configure world, source, physics, detector, actors ...
shield = sim.add_volume("Box", "shield")
shield.mother = "world"
shield_thickness = t
half_thickness = shield_thickness / 2
shield.size = [50 * mm, 50 * mm, half_thickness]
shield.translation = [0 * mm, 0 * mm, 0 * mm]
shield.material = "G4_Pb"
# set output directory or file name that encodes the thickness
sim.output_dir = f"results_thickness_{int(t / mm)}mm"
sim.run()For a more advanced setup, you might keep a common base configuration and only change the thickness and output directory. The important points are:
You do not change the source definition, the detector, or the scoring actor between runs, only the shield thickness. You label your output clearly so you can later relate transmitted counts to each thickness.
Once the simulations are finished, you will use the recorded number of transmitted photons to compute transmission and attenuation as a function of thickness. That analysis is covered in later sections of this practical example. Here the focus is to ensure that varying thickness in your geometry is well controlled and reproducible.
Relating Thickness to Attenuation
Although the detailed formulas are discussed in the chapter about attenuation, it is helpful to remember the basic exponential behavior. For a narrow gamma beam in a homogeneous material, the transmitted intensity $I$ as a function of thickness $x$ is:
$$
I(x) = I_0 \, e^{-\mu x},
$$
where $I_0$ is the unshielded intensity and $\mu$ is the linear attenuation coefficient of the material.
By changing the shield thickness in your simulation and measuring the transmitted intensity, you obtain pairs $(x, I(x))$. These data points will later allow you to compute transmission $T(x) = I(x) / I_0$ and compare your Monte Carlo results with the analytical exponential law.
Transmission through a homogeneous shield of thickness $x$ behaves approximately as
$$T(x) = \frac{I(x)}{I_0} = e^{-\mu x}.$$
Accurate thickness definition in your geometry is essential when comparing GATE results with this analytical model.
As long as you control the thickness parameter precisely and keep all other conditions fixed, your radiation shielding simulations will give you a clear picture of how material thickness reduces the photon fluence.
Views: 11
KAHIBARO