Manipolazioni del generatore


Usa GEMC 0.5 o versioni successive per questi esempi. Consulta la guida all’installazione per l’eseguibile e l’ambiente Python.

Undici steering card indipendenti isolano lo smearing del vertice, gli angoli fissi e il campionamento angolare. Ciascuna genera un geantino da 1 GeV all’interno dello stesso piccolo bersaglio tubolare per rappresentare un evento sul bersaglio. I grafici seguenti provengono da nuove simulazioni: 5.000 lanci per card, verificati confrontandoli con i record delle particelle generate prima di creare i grafici. Ogni caso include inoltre una propria vista GEMC di 100 eventi.

Esplora l’esempio sorgente, inclusi la geometria, le card YAML complete e i controlli automatici.

Avvio rapido

Copia l’esempio dalla tua installazione di GEMC e genera la sua geometria ASCII:

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

Genera gli eventi con il controllo beam-on della GUI, poi apri l’Analyzer. Le card di smearing XY preparano un unico grafico 2D di Y in funzione di X. Lo smearing Z e gli angoli fissi preparano tre istogrammi; le altre card preparano quattro grafici. Tutte le card abilitano l’accumulo tra le chiamate beam-on. Qt Charts è necessario per l’Analyzer della GUI. Esegui una qualsiasi card senza -gui per produrre invece un campione CSV di 5.000 eventi con seed fissato:

gemc uniform_z.yaml

Ogni card ha il proprio prefisso di output. Per esempio, uniform_z produce i flussi CSV delle particelle generate e delle informazioni di verità usati per verificare che il bersaglio registri esattamente i vertici generati.

Geometria e grandezze registrate

Il volume mondo in vuoto contiene un tubo di idrogeno liquido, centrato nell’origine, con raggio 25 mm e lunghezza totale 40 mm, visualizzato con opacità del 20% per mantenere visibili le traiettorie attraverso il bersaglio. La sua sensibilità flux registra le particelle che hanno origine al suo interno. Lo smearing rappresenta i vertici di produzione degli eventi sul bersaglio. I geantini non subiscono scattering né creano particelle secondarie; recordZeroEdep: true conserva i loro hit sul bersaglio. Questo produce un hit per particella lanciata in queste configurazioni.

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.

I grafici dei vertici usano vx, vy e vz dalle informazioni di verità del bersaglio, in mm. Questi sono i vertici originali delle tracce. I campi avgx, avgy e avgz descrivono invece le posizioni all’interno del bersaglio. I grafici angolari usano le componenti conservate della quantità di moto px, py e pz, in MeV/c.

Le figure del sito web usano le funzioni di tracciamento dei grafici dell’Analyzer di pygemc con le variabili e la disposizione definiti nel blocco ganalysis di ciascuna card. Sono grafici offline degli stessi campi di dati mostrati nella GUI. Le figure di smearing Z del sito web dispongono X e Y sopra un istogramma Z che occupa entrambe le colonne; la figura ad angoli fissi usa una riga di tre istogrammi. La GUI usa la propria disposizione a pannello singolo o a quattro riquadri.

Casi dei vertici

Le card di smearing usano il centro spostato (2, -3, 0) mm per mostrare che gli scostamenti casuali vengono aggiunti alla posizione nominale. Lo smearing Z usa theta = 90 gradi; gli smearing XY e sferico usano theta = 45 gradi. Tutte le card di smearing del vertice usano phi = 90 gradi. Gli smearing XY uniforme e gaussiano variano entrambe le coordinate trasversali in modo indipendente e visualizzano mappe 2D di Y in funzione di X. Card separate per lo smearing Z uniforme e gaussiano isolano la dispersione longitudinale.

Uniform z

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

File completo uniform_z.yaml

Impostazioni della particella
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 eventi per 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.

File completo uniform_xy.yaml

Impostazioni della particella
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 eventi per 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.

File completo gaussian_z.yaml

Impostazioni della particella
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 eventi per 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.

File completo gaussian_xy.yaml

Impostazioni della particella
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 eventi per 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.

File completo sphere.yaml

Impostazioni della particella
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 eventi per Sphere.
Sphere
Uniform sphere centered at (2, -3, 0) mm; radius = sqrt(1^2 + 2^2 + 2^2) = 3 mm.

Casi angolari

Le card angolari fissano il vertice al centro del bersaglio, (0, 0, 0) mm. randomThetaModel supporta uniform, gaussian e cosine. Per uniform, delta_theta è una semiampiezza; per gaussian è una deviazione standard. Il modello cosine è uniforme in cos(theta) nell’intervallo theta +/- delta_theta, con una densità proporzionale a sin(theta), limitata a [0, 180] gradi. Le card di smearing di theta usano delta_theta: 20*deg e theta nominale = 2 gradi. Il campionamento uniforme copre [-18, 22] gradi; il campionamento gaussiano ha media 2 gradi e sigma 20 gradi. Un theta negativo inverte la quantità di moto trasversale: l’angolo polare ricostruito è non negativo, con l’azimut spostato di 180 gradi. Il campionamento secondo il modello coseno copre [0, 22] gradi perché le estrazioni sono limitate agli angoli polari fisici. Phi usa sempre il campionamento uniforme con semiampiezza delta_phi; non esiste un randomPhiModel.

Per una quantità di moto p, le componenti attese sono:

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

La card con theta e phi fissi imposta i due angoli rispettivamente a 3 e 45 gradi e mostra solo i tre istogrammi della quantità di moto. I casi con theta uniforme, gaussiano e secondo il modello coseno mostrano px sull’asse verticale e pz sull’asse orizzontale nei grafici 2D. Il caso con theta secondo il modello coseno produce anche una distribuzione uniforme di pz. Theta fisso con una dispersione di phi traccia un arco nella proiezione px/py. Il caso di wraparound attraversa 360 gradi senza discontinuità nella quantità di moto. Gli angoli del banco delle particelle generate sono memorizzati in radianti; le steering card usano gradi espliciti.

Fixed theta and phi

Fixed theta = 3 deg and phi = 45 deg.

File completo fixed_theta_and_phi.yaml

Impostazioni della particella
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 eventi per 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.

File completo uniform_theta.yaml

Impostazioni della particella
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 eventi per 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.

File completo gaussian_theta.yaml

Impostazioni della particella
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 eventi per 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.

File completo cosine_theta.yaml

Impostazioni della particella
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 eventi per 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.

File completo uniform_phi.yaml

Impostazioni della particella
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 eventi per 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.

File completo phi_wraparound.yaml

Impostazioni della particella
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 eventi per Phi wraparound.
Phi wraparound
Phi uniform on [330, 370] deg, crossing 360 deg, at theta = 45 deg.

Verifica e riproduzione

Da un albero dei sorgenti GEMC configurato, esegui tutti gli 11 controlli:

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

I controlli richiedono che ogni vertice sia all’interno del bersaglio e che ci sia un hit sul bersaglio per lancio. Verificano la corrispondenza degli ID degli eventi e dei vertici, confrontano le componenti della quantità di moto, ricostruiscono theta e phi modulo 360 gradi e verificano le distribuzioni di probabilità attese. I controlli XY verificano anche che i campioni trasversali siano non correlati. I test generano nuovi dati di geometria e output in directory temporanee, quindi ogni caso funziona anche singolarmente.

Per rigenerare le immagini e le impostazioni delle particelle di questa pagina dal repository del sito web:

python3 scripts/generate_example_assets.py generator_manipulations

La guida agli asset del sito web documenta gli ambienti locali richiesti. Vedi anche la guida al generatore interno.