This site refers to the latest GEMC project (version 3 and above). For CLAS12 simulations refer to this page.
A database-driven Geant4 simulation application with Python geometry workflows
GEMC is a Python-friendly wrapper around Geant4 that eliminates the C++/Geant4 learning curve. Users define geometry in Python, store it in a database, and GEMC handles the full simulation pipeline.
The goal is to lower the entry barrier for Geant4-based simulations, especially for users who want to prototype detector or radiation-transport setups without writing C++ code.
Highlights:
- Python API to create geometry and materials
ASCII,SQLiteGDML,CAD meshesvolume imports- Built-in
dosimeter,flux,particle_countersensitive types ASCII,CSV,JSON,ROOToutput formatspyvistageometry visualization- Geometry variations and run-number-dependent configurations
- CI-tested builds and Docker deployment
Latest News
GEMC Analyzer is available
GEMC now includes analyzer, a small Python package for reading GEMC output files and plotting variables by name.
Roadmap to GEMC 0.2
New features, improvements, and issue resolutions planned for the next release.
GEMC first release
This announcement corresponds to the 0.1 GEMC release.
Try GEMC in Your Browser
No installation needed. Click the badge to launch a live JupyterLab session:
| Creates a system with a simple detector and a target |
Other examples:
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.
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.
Databases
Detector definitions are stored in databases. A typical workflow looks like this:
Note
Running simulations does not require previous knowledge of C++ or Geant4. Basic Python knowledge helps organize complex setups. Users can also define their own hardware emulation routines - in this case basic C++ knowledge helps for complex digitizations.
Geometry Variations
A detector can be re-used in multiple experiments, with configuration changes such as component 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
Continuous Integration
GEMC is built, tested, and deployed as Docker images by GitHub CI on several platforms and on both arm64 and amd64 architectures.
| Deployment and Testing | |
| Doxygen | |
| Nightly Release | |
| Homepage | |
| Sanitizer | |
| Code QL |
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 License
The GEMC source code on GitHub is distributed under an open source license.