Teaching Computational Skills with GEANT4

I wrote a set of open GEANT4 radiation labs while teaching, and half-taught them a few times before I left for Such Software. The framing matters: these are not really radiation-physics labs. They are computational-skills labs that happen to use radiation transport as the subject. The intent for PHE 101 students was to get them through the mechanics that no one in an intro course ever actually shows you:

  • Compile software from source. Configure, build, deal with a missing dependency, end up with a binary that runs. For a lot of students this is the first time code is a thing you build rather than a thing that magically exists.
  • Run a CLI program. Arguments, flags, an input file in, an output file out. No GUI, no hand-holding.
  • Parse data out of an output file. Real tools emit text, not a tidy spreadsheet. Reading a results file and pulling numbers out of it is half of computational work.
  • Plot with matplotlib. Turn those numbers into a figure you can reason about.
  • Analyze with pandas. Load, filter, group, and summarize, instead of doing it by hand.

The radiation simulation gives all of that a concrete, non-toy payoff: you set up a source and a target, run it, parse the output, and an attenuation curve falls out that you then fit. The skills transfer to anything; the physics makes them stick.

A GEANT4 visualization window showing simulated particle tracks passing through the example detector geometry.
A GEANT4 visualization from the labs: simulated particle tracks through the example geometry. The student compiles this, runs it, and watches the physics they just built.
A GEANT4 visualization window showing simulated particle tracks passing through the example detector geometry.
A GEANT4 visualization from the labs: simulated particle tracks through the example geometry. The student compiles this, runs it, and watches the physics they just built.
A matplotlib histogram of energy deposited per event, generated by parsing the GEANT4 simulation's output file with pandas.
The other end of the same lab: parse the simulation's output file and plot it with pandas and matplotlib. That data handling, not the physics, is the actual lesson.
A matplotlib histogram of energy deposited per event, generated by parsing the GEANT4 simulation's output file with pandas.
The other end of the same lab: parse the simulation's output file and plot it with pandas and matplotlib. That data handling, not the physics, is the actual lesson.

Why GEANT4

GEANT4 (GEometry ANd Tracking) is CERN's open-source C++ toolkit for simulating particles through matter. Same fundamental job as MCNP, different constraints. The reason I reached for it in a classroom is mundane: it is open source and installs on a student laptop. MCNP is export-controlled and distributed through RSICC, which makes handing it to a room of undergraduates a non-starter. Neither tool is "better." MCNP has the validation pedigree for criticality and reactor work; GEANT4 is the one you can actually put in a student's hands.

The C++ toolkit model also helps the teaching goal. Because you build geometry, source, physics list, and scoring as code rather than a fixed input deck, the lab is already a programming exercise. The student is compiling and running something real, not filling in a form.

Use them

The labs are open. If you teach intro physics, health physics, or anything that should include a first real taste of computational work, take them, fork them, and tell me what is missing. The background that taught me this is on my Google Scholar page. I wrote about leaving teaching for the studio in Founder Mode (Again).