Geant4 is a free software package composed of tools which can be used to accurately simulate the passage of particles through matter. All aspects of the simulation process have been included in the toolkit:
the geometry of the system,
the materials involved,
the fundamental particles of interest,
the generation of primary events,
the tracking of particles through materials and electromagnetic fields,
the physics processes governing particle interactions,
the response of sensitive detector components,
the generation of event data,
the storage of events and tracks,
the visualization of the detector and particle trajectories, and
the capture and analysis of simulation data at different levels of detail and refinement.
Users may construct stand-alone applications or applications built upon another object-oriented framework. In either case the toolkit will support them from the initial problem definition to the production of results and graphics for publication. To this end, the toolkit includes:
built-in steering routines, and
which operate at every level of the simulation.
At the heart of Geant4 is an abundant set of physics models to handle the interactions of particles with matter across a very wide energy range. Data and expertise have been drawn from many sources around the world and in this respect, Geant4 acts as a repository which incorporates a large part of all that is known about particle interactions.
Geant4 is written in C++ and exploits advanced software-engineering techniques and object-oriented technology to achieve transparency. For example, the way in which cross sections are input or computed is separated from the way in which they are used or accessed. The user can overload both of these features. Similarly, the computation of the final state can be divided into alternative or complementary models, according to the energy range, the particle type, and the material. To build a specific application the user-physicist chooses from among these options and implements code in user action classes supplied by the toolkit. A serious problem with previous simulation codes was the difficulty of adding new or variant physics models; development was difficult due to the increased size, complexity and interdependency of the procedure-based code. In contrast, object-oriented methods help manage complexity and limit dependencies by defining a uniform interface and common organizational principles for all physics models. Within this framework the functionality of models can be more easily recognized and understood, and the creation and addition of new models is a well-defined procedure that entails little or no modification to the existing code.