This site refers to the latest GEMC project (version 3 and above). For CLAS12 simulations refer to this page.
GEMC is a database-driven Monte Carlo simulation program based on Geant4.
Key features include:
- Python API to create geometry and materials
- Support for
ASCII,SQLiteGDML,CAD meshesvolume imports - Custom extensibility of digitization, output formats, electro-magnetic fields
- Built-in
dosimeter,flux,particle_countersensitive types - Built-in
ASCII,CSV,JSON,ROOToutput formats pyvista3D visualization
Databases
Databases are used to store detector definitions. A typical workflow looks like this:
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.
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
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 | |
| 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 Licence
The GEMC source code on GitHub is distributed under an open source license.