This page explains how I came to have a high-energy physics publication, and gives a brief description of Geant4. Although my main subjects are now primarily nanoscience, condensed matter physics, and materials science, the common feature in all of my work has remained the same: using computer simulation to help understand the "real world".
Geant (GEometry ANd Tracking) is a simulation toolkit for tracking interacting particles through matter - "a detector simulation toolkit". Although primarily used for the design and simulation of the detectors used in high-energy physics, the toolkit has also been used to simulate the effects of radiation on satellites and in medical physics.
Geant was originally written in Fortran. Although the only practical choice at the time, after many years of development the code had grown to many hundreds of thousands of lines, and was becoming increasingly difficult to extend and maintain. A research and development project (RD44) was launched at CERN in the mid-1990s to redesign and rewrite the code in C++ using modern object-oriented techniques. (This paper has a description of the aims, algorithms, and applications of the toolkit.)
The BaBar detector. Geant simulates length scales from metres (the size of this detector) to microns (thinner than a human hair).
I became involved early in RD44. As a beginning technical student at CERN (12 months, through Bath University's placement scheme) I was selected to join Simone Giani's group just as the project was starting. The project began from scratch, with a thorough investigation of GEANT's current capabilities. Significantly, few of the algorithms were documented, which meant that they would have to be reinvented or reverse engineered.
My contribution was to develop the algorithms and code to describe the detectors using a "Russian doll" or "LEGO"-like construction, as well as code to shoot particles through the various "bricks" describing the detector. In most cases it was quicker and easier to reinvent the algorithms than re-engineer and verify the existing code. In computer graphics or CAD terms, the tracking part of the toolkit is essentially a constructive solid geometry ray tracer, except that the physics is such that the rays may split (particle decay) or turn (charged particles in a magnetic field). I also wrote the code for "smart voxels", the tracking optimization algorithm. In total, these developments were sufficient for timing test runs and verification against the old GEANT. The new code won. Note however, that the full toolkit required the contributions of a great many people, working on the critical physics parameterisations, a user interface, visualization, etc.
For those familiar with the toolkit, I wrote G4Navigator, the logical/physical volume classes, the constructive solid geometry primitives (G4Box, G4Tubs etc.), as well as the voxel code. This was enough to shoot a geantino (an invented non-interacting particle) through e.g. a basic silicon vertex detector. Every particle tracked by Geant uses this code. Since none of the Geant4 infrastructure existed at the time, I also had to write fundamental classes such as the affine transforms, as well as more complex classes such as the "touchables". Looking over the CVS logs for the current version, I am fairly happy with the bug count for my code and algorithms - particularly for the huge number of conditional sections in G4Navigator and related classes. Most of the bugs were in sections of the code that I always had nagging doubts about (e.g. G4Sphere), but could never find bugs in!
Thanks to Simone Giani, Gabriele Cosmo, and all the others at CERN.