This site refers to the latest GEMC project (version 3 and above). For CLAS12 simulations refer to this page.

Database-driven architecture
GEant Monte-Carlo

GEMC is a database-driven Monte Carlo simulation program based on Geant4. Key features include:


Databases

Databases are used to store detector definitions. A typical workflow looks like this:

Database-driven architecture
Using the GEMC Python API, databases are filled with detector definitions.
GEMC takes care of the rest:
→ Geant4 world creation → Geant4 transport of tracks → Hits creation and collections → Digitizations → Output streams


Note

Running simulations does not require previous knowledge of C++ or Geant4. A basic Python knowledge would help organizing complex setups. Users can also define their own hardware emulation routines - in this case a basic C++ knowledge would help for complex digitizations.



Python API

Python is used to create and fill databases with the geometry, materials and mirrors definitions. GEMC uses these databases to create the Geant4 world and does not need to be re-compiled when the geometry is changed. The API supports pyvista visualization of the geometry.

Python API example
The code fills the database with the world volume, a liquid hydrogen target and a flux plane.
The pyvista option allows immediate visualization of the geometry.
In the GEMC simulation, hits are created from particles generated by a beam of protons impinging on the liquid hydrogen target.
flux_z = 50
flux_dx = 1
flux_dim = world_size * 0.8
gvolume = GVolume("FluxPlane")
gvolume.mother = "root"
gvolume.description = "Flux Scoring Plane"
gvolume.make_box(flux_dim * 0.5, flux_dim * 0.5, flux_dx * 0.5)
gvolume.material = "G4_AIR"
gvolume.color = "FAFAD2"
gvolume.set_position(0, 0, flux_z)
gvolume.digitization = "flux"
gvolume.set_identifier("flux_plane", 1)
gvolume.publish(cfg)

The code used to create the flux plane shown above, showcasing the Python API. Some utility functions, like `make_box` facilitate the creations of Geant4 solids (in this case G4Box).



Geometry Variations

A detector can be re-used in multiple experiments, with configuration changes such as components shifts, changes of materials, addition or removal of certain volumes. GEMC Supports these geometry versions using variations and/or run numbers to adapt to different simulation setups

Python API example
In the above animation two variations of the CLAS12 Central Detector are shown. The geometries are identical except for the position of the target. They can be selected by specifying a variation string or a run number in the configuration file or command line options.



Continuous Integration

Gemc is built, tested and deployed to docker images by a GitHub CI on several platforms and both arm64, amd64 architectures.

Deployment and Testing CI
Doxygen Docs
Nightly Release Nightly
Homepage Site
Sanitizer Sanitize
Code QL CodeQL



Reference

Please make sure to cite the following paper if you use GEMC:

M. Ungaro, Geant4 Monte-Carlo (GEMC) A database-driven simulation program, *EPJ Web of Conferences* 295, 05005 (2024)

Bibtex:

@INPROCEEDINGS{2024EPJWC.29505005U,
author = { {Ungaro}, Maurizio,
 title = "{Geant4 Monte-Carlo (GEMC) A database-driven simulation program}",
 booktitle = {European Physical Journal Web of Conferences},
 year = 2024,
 series = {European Physical Journal Web of Conferences},
 volume = {295},
 month = may,
 eid = {05005},
 pages = {05005},
 doi = {10.1051/epjconf/202429505005},
 adsurl = {https://ui.adsabs.harvard.edu/abs/2024EPJWC.29505005U},
 adsnote = {Provided by the SAO/NASA Astrophysics Data System}

Bibitem:

\bibitem{2024EPJWC.29505005U}
{Ungaro}, M.: Geant4 Monte-Carlo (GEMC) A database-driven simulation program.
\newblock European Physical Journal Web of Conferences \textbf{295}, 05005 (2024).
\newblock \doi{10.1051/epjconf/202429505005}



Source Code and Licence

The GEMC source code on GitHub is distributed under an open source license.