Exemple b1



Cet exemple reproduit l’exemple de base B1 de Geant4. Il utilise la numérisation dosimeter pour stocker la dose accumulée sur un détecteur.

Vous pouvez exécuter cet exemple dans votre navigateur : geant4 basic/b1


Démarrage rapide

Copiez l’exemple dans votre répertoire courant. Pour créer la géométrie, exécuter 10 événements et produire des fichiers de sortie ROOT et CSV :

cp -r $GEMC_HOME/examples/basic/b1 .
cd b1
./b1.py
gemc b1.yaml -n=10


Géométrie

La géométrie, illustrée ci-dessous, est définie dans b1.py.

Le monde (une boîte nommée root) contient :

Visualiseur interactif :


Liste de physique

QBBC est utilisée par défaut, sélectionnée dans le fichier YAML avec phys_list: QBBC.

phys_list

The physics list can be selected using the option

gemc -phys_list <value>

where <value> can be a combination of the Geant4 physics constructors separated by the + sign. For example

gemc -phys_list="FTFP_BERT + G4NeutronCrossSectionXS"

To see a list of the available Geant4 constructors:

gemc -showPhysics


Générateur

La cinématique des particules est définie dans le fichier YAML :

gparticle:
  - name: gamma
    p: 6*MeV
    vz: -15*cm
    delta_vx: 4*cm
    delta_vy: 4*cm
    multiplicity: 1

gparticle

The gparticle option controls the Geant4 particle gun. For the complete list of parameters: gemc help gparticle.

Common parameters:

  • name: particle name (mandatory), e.g. proton or e-
  • multiplicity: number of copies generated per event; copies are independently randomized when spread parameters such as delta_p or delta_theta are set
  • p: particle momentum with unit, e.g. 4*GeV or 4000*MeV
  • delta_p: momentum spread, centered on p
  • theta: polar angle with unit, e.g. 23*deg or 0.4*rad
  • delta_theta: polar-angle spread, centered on theta
  • phi: azimuthal angle with unit, e.g. 90*deg

Kinematic values accept an explicit Geant4 unit (value*unit). A plain number without a unit falls back to MeV for momentum, deg for angles, and cm for vertex coordinates, with a logged warning.

For example, to define a particle gun with one electron along z plus one proton at θ = 30° and φ = 90°:

  • Command line:

    -gparticle="[{name: e-, p: 5*GeV}, {name: proton, p: 2000*MeV, theta: 30*deg, phi: 90*deg}]"
    
  • YAML:

    gparticle:
      - name: e-
        p: 5*GeV
        multiplicity: 5
      - name: proton
        p: 2000*MeV
        theta: 30*deg
        phi: 90*deg
    

Voir aussi la documentation du générateur interne pour plus d’informations.


Numérisation

La sensibilité du volume Shape2 est spécifiée avec la numérisation dosimeter (l’une des routines GEMC prédéfinies disponibles) dans b1.py :

gvolume.digitization = 'dosimeter'
gvolume.set_identifier('mydosimeter', 1)

La numérisation dosimeter crée et accumule les variables etot et dose au fil des événements d’une exécution.

\[\mathrm{dose} = \frac{\mathrm{etot}}{\mathrm{mass}}\]

où etot est l’énergie totale déposée à chaque événement et mass est la masse de Shape2.

Ici, la chaîne personnalisée mydosimeter et le nombre 1 identifient l’élément sensible.

Les variables mydosimeter, etot et dose sont enregistrées dans la sortie.

Voir la documentation du dosimètre pour plus d’informations.


Utilisation

Construction du détecteur

Utilisez le script Python b1.py pour construire le détecteur. Par défaut, la configuration est stockée dans un fichier SQLite nommé gemc.db. Des options en ligne de commande permettent de définir le type de base de données, les variations et le numéro d’exécution.

python API

Pass -h for additional command line options:

options:
  -h, --help            show this help message and exit
  -f, --factory FACTORY
						ascii, sqlite
  -v, --variation VARIATION
                        Set variation name
  -r, --run RUN         Set run number
  -sql, --dbhost DBHOST
                        SQLite filename or MYSQL host
  -pv, --pyvista        Show geometry using pyvista (needs pyvista)
  -pvb, --pvb, --pyvista-background
                        Use PyVista BackgroundPlotter (needs pyqt6 pyvistaqt)
  -pvw, --width WIDTH   Set plotter width
  -pvh, --height HEIGHT
						Set plotter height
  -pvx, --x X           Set plotter x position
  -pvy, --y Y           Set plotter y position
  -axes, --add_axes_at_zero

If you have pyvista (see also install pyvista), you can use the -pv and -pvb options to display the setup without having to run GEMC

Voir aussi la construction de la géométrie pour plus d’informations.


Exécution de GEMC

Le fichier b1.yaml permet d’exécuter la simulation avec cette configuration. Ajoutez -gui pour exécuter GEMC de manière interactive :

gemc b1.yaml -gui

Les annotations et décorations de la scène se trouvent dans annotations.yaml afin que le même exemple puisse être rendu avec ou sans étiquettes :

gemc b1.yaml
gemc b1.yaml annotations.yaml

Modifiez b1.yaml ou la ligne de commande selon vos besoins, en particulier pour ajouter des particules, contrôler le nombre de threads ou changer la sortie.


Exécution des événements

b1 simulation: gamma rays showering in the water phantom and absorber.


Sortie

L’option gstreamer sélectionne le nom et le format de la sortie. Le fichier YAML écrit simultanément des flux CSV et ROOT :

gstreamer:
  - format: csv
    filename: b1

gstreamer

The gstreamer option selects the output name and format. Run gemc help gstreamer to check its documentation:

-gstreamer=<sequence> ......: define a gstreamer output

• filename: name of output file. Default value: NODFLT
• format: format of output file. Default value: NODFLT
• type: type of output fileDefault value: event


Define output formats and filenames. 
It can be used to select <events> or <frame> streams.
The file extension is added automatically based on the format.

Supported formats:
	
  - root
  - ascii
  - csv
  - json


Output types:

  - event: write events
  - stream: write frame time snapshots

Example that defines two gstreamer outputs:

 -gstreamer="[{format: root, filename: out}, {format: csv, filename: out}]"


The produced files structure depends on the accumulation method used:

  - event-based digitization (like <flux>) will have one file per 
    thread, with "_t<thread#>" appended to the filename
  - run-based digitization (like <dosimeter>) will have one output file

Voir aussi la documentation sur la sortie pour plus d’informations.


Tracé avec l’analyseur GEMC

Exécutez d’abord GEMC avec 20 événements. Le fichier YAML par défaut écrit les flux CSV de l’analyseur.

gemc b1.yaml -n=20

Tracez la dose accumulée :

gemc-analyzer b1_digitized.csv dose --kind csv

Dose accumulée dans b1