Manipulations du générateur


Utilisez GEMC 0.5 ou une version ultérieure pour ces exemples. Consultez le guide d’installation pour l’exécutable et l’environnement Python.

Onze cartes de pilotage indépendantes isolent la dispersion des vertex, les angles fixes et l’échantillonnage angulaire. Chacune génère un geantino de 1 GeV à l’intérieur de la même petite cible tubulaire pour représenter un événement dans la cible. Les graphiques ci-dessous proviennent de nouvelles simulations : 5 000 tirages par carte, vérifiés à partir des enregistrements des particules générées avant le tracé. Chaque cas comprend également sa propre vue GEMC de 100 événements.

Consultez le code source de l’exemple, comprenant la géométrie, les cartes YAML complètes et les vérifications automatisées.

Démarrage rapide

Copiez l’exemple depuis votre installation GEMC et générez sa géométrie ASCII :

cp -r "$GEMC_HOME/examples/basic/generator_manipulations" .
cd generator_manipulations
python generator_manipulations.py -f ascii
gemc uniform_z.yaml -gui

Générez des événements avec la commande beam-on de l’interface graphique, puis ouvrez l’Analyzer. Les cartes de dispersion XY préparent un seul graphique 2D de Y en fonction de X. La dispersion en Z et les angles fixes préparent trois histogrammes ; les autres cartes préparent quatre graphiques. Toutes les cartes activent l’accumulation entre les appels beam-on. Qt Charts est requis pour l’Analyzer de l’interface graphique. Exécutez n’importe quelle carte sans -gui pour produire à la place un échantillon CSV de 5 000 événements avec une graine aléatoire fixée :

gemc uniform_z.yaml

Chaque carte possède son propre préfixe de sortie. Par exemple, uniform_z produit les flux CSV des particules générées et des informations de vérité utilisés pour vérifier que la cible enregistre exactement les vertex tirés.

Géométrie et grandeurs enregistrées

Le volume monde sous vide contient un tube d’hydrogène liquide, centré à l’origine, de rayon 25 mm et de longueur totale 40 mm, affiché avec une opacité de 20 % pour que les trajectoires restent visibles à travers lui. Sa sensibilité flux enregistre les particules créées à l’intérieur. La dispersion représente les vertex de production des événements dans la cible. Les geantinos ne subissent pas de diffusion et ne créent pas de particules secondaires ; recordZeroEdep: true conserve leurs hits dans la cible. On obtient ainsi un hit par particule tirée pour ces configurations.

Geantinos originating at smeared vertices inside the transparent cylindrical target
The shared tube target with 100 events from the uniform-Z card, rendered by GEMC.

Les graphiques des vertex utilisent vx, vy et vz issus des informations de vérité de la cible, en mm. Il s’agit des vertex d’origine des trajectoires. Les champs avgx, avgy et avgz décrivent, quant à eux, les positions à l’intérieur de la cible. Les graphiques angulaires utilisent les composantes conservées de l’impulsion px, py et pz, en MeV/c.

Les figures du site web utilisent les fonctions de tracé de l’Analyzer de pygemc avec les variables et la disposition définies dans le bloc ganalysis de chaque carte. Ce sont des graphiques produits hors ligne à partir des mêmes champs de données que ceux affichés dans l’interface graphique. Les figures de dispersion en Z du site web placent X et Y au-dessus d’un histogramme de Z couvrant les deux colonnes ; la figure des angles fixes utilise une rangée de trois histogrammes. L’interface graphique utilise sa disposition à un seul panneau ou à quatre emplacements.

Cas de dispersion des vertex

Les cartes de dispersion utilisent le centre décalé (2, -3, 0) mm pour montrer que des décalages aléatoires sont ajoutés à la position nominale. La dispersion en Z utilise theta = 90 degrés ; les dispersions dans le plan XY et dans une sphère utilisent theta = 45 degrés. Toutes les cartes de dispersion des vertex utilisent phi = 90 degrés. Les dispersions uniforme et gaussienne dans le plan XY font varier les deux coordonnées transverses indépendamment et affichent des cartes 2D de Y en fonction de X. Des cartes distinctes de dispersion uniforme et gaussienne en Z isolent l’étalement longitudinal.

Uniform z

Uniform half-width in z; the other two coordinates stay fixed.

uniform_z.yaml complet

Paramètres de la particule
gparticle:
- name: geantino
  p: 1*GeV
  theta: 90*deg
  phi: 90*deg
  vx: 2*mm
  vy: -3*mm
  vz: 0*mm
  delta_vx: 0*mm
  delta_vy: 0*mm
  delta_vz: 20*mm
  randomVertexModel: uniform
Uniform z
GEMC : 100 événements pour Uniform z.
Uniform z
Uniform half-width in z; the other two coordinates stay fixed.

Uniform X and Y

Independent uniform x in [0, 4] mm and y in [-6, 0] mm; z = 0 mm.

uniform_xy.yaml complet

Paramètres de la particule
gparticle:
- name: geantino
  p: 1*GeV
  theta: 45*deg
  phi: 90*deg
  vx: 2*mm
  vy: -3*mm
  vz: 0*mm
  delta_vx: 2*mm
  delta_vy: 3*mm
  delta_vz: 0*mm
  randomVertexModel: uniform
Uniform X and Y
GEMC : 100 événements pour Uniform X and Y.
Uniform X and Y
Independent uniform x in [0, 4] mm and y in [-6, 0] mm; z = 0 mm.

Gaussian z

Gaussian sigma in z; the other two coordinates stay fixed.

gaussian_z.yaml complet

Paramètres de la particule
gparticle:
- name: geantino
  p: 1*GeV
  theta: 90*deg
  phi: 90*deg
  vx: 2*mm
  vy: -3*mm
  vz: 0*mm
  delta_vx: 0*mm
  delta_vy: 0*mm
  delta_vz: 3*mm
  randomVertexModel: gaussian
Gaussian z
GEMC : 100 événements pour Gaussian z.
Gaussian z
Gaussian sigma in z; the other two coordinates stay fixed.

Gaussian X and Y

Independent Gaussian x/y: means (2, -3) mm, sigmas (4, 5) mm; z = 0 mm.

gaussian_xy.yaml complet

Paramètres de la particule
gparticle:
- name: geantino
  p: 1*GeV
  theta: 45*deg
  phi: 90*deg
  vx: 2*mm
  vy: -3*mm
  vz: 0*mm
  delta_vx: 4*mm
  delta_vy: 5*mm
  delta_vz: 0*mm
  randomVertexModel: gaussian
Gaussian X and Y
GEMC : 100 événements pour Gaussian X and Y.
Gaussian X and Y
Independent Gaussian x/y: means (2, -3) mm, sigmas (4, 5) mm; z = 0 mm.

Sphere

Uniform sphere centered at (2, -3, 0) mm; radius = sqrt(1^2 + 2^2 + 2^2) = 3 mm.

sphere.yaml complet

Paramètres de la particule
gparticle:
- name: geantino
  p: 1*GeV
  theta: 45*deg
  phi: 90*deg
  vx: 2*mm
  vy: -3*mm
  vz: 0*mm
  delta_vx: 1*mm
  delta_vy: 2*mm
  delta_vz: 2*mm
  randomVertexModel: sphere
Sphere
GEMC : 100 événements pour Sphere.
Sphere
Uniform sphere centered at (2, -3, 0) mm; radius = sqrt(1^2 + 2^2 + 2^2) = 3 mm.

Cas angulaires

Les cartes angulaires fixent le vertex au centre de la cible, (0, 0, 0) mm. randomThetaModel prend en charge uniform, gaussian et cosine. Pour uniform, delta_theta est une demi-largeur ; pour gaussian, c’est un écart type. Le modèle cosine est uniforme en cos(theta) dans l’intervalle theta +/- delta_theta, ce qui donne une densité proportionnelle à sin(theta), restreinte à [0, 180] degrés. Les cartes de dispersion de theta utilisent delta_theta: 20*deg et une valeur nominale de theta de 2 degrés. L’échantillonnage uniforme couvre [-18, 22] degrés ; l’échantillonnage gaussien a une moyenne de 2 degrés et un écart type de 20 degrés. Un theta négatif inverse l’impulsion transverse : l’angle polaire reconstruit est positif ou nul, avec un azimut décalé de 180 degrés. L’échantillonnage selon le modèle cosinus couvre [0, 22] degrés, car ses tirages sont limités aux angles polaires physiques. Phi utilise toujours un échantillonnage uniforme de demi-largeur delta_phi ; il n’y a pas de randomPhiModel.

Pour une impulsion p, les composantes attendues sont :

px = p sin(theta) cos(phi)
py = p sin(theta) sin(phi)
pz = p cos(theta)

La carte à theta et phi fixes définit ces angles à 3 et 45 degrés, respectivement, et affiche uniquement les trois histogrammes d’impulsion. Les cartes de theta uniforme, gaussien et selon le modèle cosinus affichent px sur l’axe vertical en fonction de pz sur l’axe horizontal dans leurs graphiques 2D. Le cas de theta selon le modèle cosinus donne également une distribution uniforme de pz. Un theta fixe avec une dispersion de phi trace un arc dans la projection px/py. Le cas de passage par 360 degrés ne présente aucune discontinuité de l’impulsion. Les angles de la banque des particules générées sont stockés en radians ; les cartes de pilotage utilisent explicitement des degrés.

Fixed theta and phi

Fixed theta = 3 deg and phi = 45 deg.

fixed_theta_and_phi.yaml complet

Paramètres de la particule
gparticle:
- name: geantino
  p: 1*GeV
  theta: 3*deg
  delta_theta: 0*deg
  randomThetaModel: uniform
  phi: 45*deg
  delta_phi: 0*deg
  vx: 0*mm
  vy: 0*mm
  vz: 0*mm
  delta_vx: 0*mm
  delta_vy: 0*mm
  delta_vz: 0*mm
  randomVertexModel: uniform
Fixed theta and phi
GEMC : 100 événements pour Fixed theta and phi.
Fixed theta and phi
Fixed theta = 3 deg and phi = 45 deg.

Uniform theta

Theta uniform on [-18, 22] deg; phi = 0 deg.

uniform_theta.yaml complet

Paramètres de la particule
gparticle:
- name: geantino
  p: 1*GeV
  theta: 2*deg
  delta_theta: 20*deg
  randomThetaModel: uniform
  phi: 0*deg
  delta_phi: 0*deg
  vx: 0*mm
  vy: 0*mm
  vz: 0*mm
  delta_vx: 0*mm
  delta_vy: 0*mm
  delta_vz: 0*mm
  randomVertexModel: uniform
Uniform theta
GEMC : 100 événements pour Uniform theta.
Uniform theta
Theta uniform on [-18, 22] deg; phi = 0 deg.

Gaussian theta

Theta Gaussian with mean 2 deg and sigma 20 deg; phi = 0 deg.

gaussian_theta.yaml complet

Paramètres de la particule
gparticle:
- name: geantino
  p: 1*GeV
  theta: 2*deg
  delta_theta: 20*deg
  randomThetaModel: gaussian
  phi: 0*deg
  delta_phi: 0*deg
  vx: 0*mm
  vy: 0*mm
  vz: 0*mm
  delta_vx: 0*mm
  delta_vy: 0*mm
  delta_vz: 0*mm
  randomVertexModel: uniform
Gaussian theta
GEMC : 100 événements pour Gaussian theta.
Gaussian theta
Theta Gaussian with mean 2 deg and sigma 20 deg; phi = 0 deg.

Cosine theta

cos(theta) uniform between cos(22 deg) and cos(0 deg); phi = 0 deg.

cosine_theta.yaml complet

Paramètres de la particule
gparticle:
- name: geantino
  p: 1*GeV
  theta: 2*deg
  delta_theta: 20*deg
  randomThetaModel: cosine
  phi: 0*deg
  delta_phi: 0*deg
  vx: 0*mm
  vy: 0*mm
  vz: 0*mm
  delta_vx: 0*mm
  delta_vy: 0*mm
  delta_vz: 0*mm
  randomVertexModel: uniform
Cosine theta
GEMC : 100 événements pour Cosine theta.
Cosine theta
cos(theta) uniform between cos(22 deg) and cos(0 deg); phi = 0 deg.

Uniform phi

Phi uniform on [45, 135] deg at theta = 45 deg.

uniform_phi.yaml complet

Paramètres de la particule
gparticle:
- name: geantino
  p: 1*GeV
  theta: 45*deg
  delta_theta: 0*deg
  randomThetaModel: uniform
  phi: 90*deg
  delta_phi: 45*deg
  vx: 0*mm
  vy: 0*mm
  vz: 0*mm
  delta_vx: 0*mm
  delta_vy: 0*mm
  delta_vz: 0*mm
  randomVertexModel: uniform
Uniform phi
GEMC : 100 événements pour Uniform phi.
Uniform phi
Phi uniform on [45, 135] deg at theta = 45 deg.

Phi wraparound

Phi uniform on [330, 370] deg, crossing 360 deg, at theta = 45 deg.

phi_wraparound.yaml complet

Paramètres de la particule
gparticle:
- name: geantino
  p: 1*GeV
  theta: 45*deg
  delta_theta: 0*deg
  randomThetaModel: uniform
  phi: 350*deg
  delta_phi: 20*deg
  vx: 0*mm
  vy: 0*mm
  vz: 0*mm
  delta_vx: 0*mm
  delta_vy: 0*mm
  delta_vz: 0*mm
  randomVertexModel: uniform
Phi wraparound
GEMC : 100 événements pour Phi wraparound.
Phi wraparound
Phi uniform on [330, 370] deg, crossing 360 deg, at theta = 45 deg.

Vérifier et reproduire

Depuis une arborescence source GEMC configurée, exécutez les 11 vérifications :

meson test -C build --suite generator_manipulations --print-errorlogs

Les vérifications exigent que chaque vertex se trouve à l’intérieur de la cible et qu’il y ait un hit dans la cible par tirage. Elles vérifient la correspondance des identifiants d’événements et des vertex, comparent les composantes de l’impulsion, reconstruisent theta et phi modulo 360 degrés et testent les distributions de probabilité attendues. Les vérifications XY contrôlent aussi l’absence de corrélation entre les échantillons transverses. Les tests génèrent une nouvelle géométrie et de nouvelles données de sortie dans des répertoires temporaires, de sorte que chaque cas fonctionne également de manière isolée.

Pour régénérer les images et les paramètres des particules de cette page depuis le dépôt du site web :

python3 scripts/generate_example_assets.py generator_manipulations

Le guide des ressources du site web décrit les environnements locaux requis. Consultez aussi le guide du générateur interne.