ジェネレータの操作


これらの例では GEMC 0.5 以降を使用してください。 実行ファイルと Python 環境については、インストールガイドを参照してください。

11 個の独立したステアリングカードで、頂点スメアリング、固定角度、角度サンプリングを個別に扱います。 各カードは、同じ小さなチューブ状ターゲット内に 1 GeV の geantino を生成し、ターゲットイベントを表現します。 以下のプロットは、新たに実行したシミュレーションから得られたものです。 カードごとに 5,000 回の生成を行い、プロット前に生成粒子の記録と照合しています。各ケースには、 100 イベントを表示した GEMC ビューも含まれています。

ジオメトリ、完全な YAML カード、自動チェックを含むサンプルのソースを参照できます。

クイックスタート

GEMC のインストール先からサンプルをコピーし、ASCII ジオメトリを生成します。

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

GUI の beam-on コントロールでイベントを生成し、Analyzer を開きます。XY スメアリングカードでは、 Y 対 X の 2D プロットを 1 つ用意します。Z スメアリングと固定角度のカードではヒストグラムを 3 つ、 その他のカードではプロットを 4 つ用意します。 すべてのカードで、複数の beam-on 呼び出しにわたる蓄積が有効になっています。GUI Analyzer には Qt Charts が必要です。 -gui なしで任意のカードを実行すると、代わりに乱数シードを設定した 5,000 イベントの CSV サンプルが生成されます。

gemc uniform_z.yaml

各カードには固有の出力プレフィックスがあります。たとえば uniform_z は、生成時の頂点がターゲットに 正確に記録されていることを確認するための、生成情報と真値情報の CSV ストリームを出力します。

ジオメトリと記録される物理量

真空のワールドには、原点を中心とする半径 25 mm、全長 40 mm の液体水素チューブが 1 つ配置されています。 内部を通る軌跡が見えるように、不透明度 20% で表示されます。 flux の感度設定により、内部で発生した粒子が記録されます。スメアリングは、ターゲットイベントの 生成頂点を表現します。 geantino は散乱せず、二次粒子も生成しません。recordZeroEdep: true により、ターゲット内でのヒットが保持されます。 これらの設定では、生成粒子 1 個につき 1 ヒットが得られます。

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.

頂点プロットでは、ターゲットの真値情報に含まれる vx、vy、vz を mm 単位で使用します。 これらは元のトラックの生成頂点です。一方、avgx、avgy、avgz はターゲット内部の位置を表します。 角度プロットでは、保持された運動量成分 px、py、pz を MeV/c 単位で使用します。

ウェブサイトの図は、各カードの ganalysis ブロックで定義された変数とレイアウトを用いて、 pygemc Analyzer のプロット関数で作成されています。GUI に表示されるものと同じデータフィールドを オフラインでプロットしたものです。ウェブサイトの Z スメアリングの図では、X と Y の下に、 2 列にまたがる Z ヒストグラムを配置します。固定角度の図では、3 つのヒストグラムを横 1 列に配置します。 GUI では、単一パネルまたは 4 枠のレイアウトを使用します。

頂点のケース

スメアリングカードでは、中心を (2, -3, 0) mm にずらし、公称位置にランダムなオフセットが 加算されることを示します。Z スメアリングでは theta = 90 度、XY および球内のスメアリングでは theta = 45 度を使用します。 すべての頂点スメアリングカードで phi = 90 度を使用します。 一様分布およびガウス分布による XY スメアリングでは、2 つの横方向座標を独立に変化させ、 Y 対 X の 2D マップを表示します。別々の uniform-Z カードと Gaussian-Z カードで、縦方向の広がりを個別に扱います。

Uniform z

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

uniform_z.yaml の全内容

粒子設定
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 イベント(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 の全内容

粒子設定
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 イベント(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 の全内容

粒子設定
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 イベント(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 の全内容

粒子設定
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 イベント(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 の全内容

粒子設定
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 イベント(Sphere)。
Sphere
Uniform sphere centered at (2, -3, 0) mm; radius = sqrt(1^2 + 2^2 + 2^2) = 3 mm.

角度のケース

角度カードでは、頂点をターゲット中心 (0, 0, 0) mm に固定します。randomThetaModel は uniform、 gaussian、cosine をサポートします。 uniform では delta_theta は分布の半幅、gaussian では標準偏差です。 cosine モデルでは、theta +/- delta_theta の範囲を [0, 180] 度に制限し、その範囲内で cos(theta) を 一様にサンプリングするため、theta の確率密度は sin(theta) に比例します。 theta スメアリングカードでは delta_theta: 20*deg と公称 theta = 2 度を使用します。一様サンプリングの範囲は [-18, 22] 度で、ガウスサンプリングは平均 2 度、sigma 20 度です。負の theta は横方向の運動量を反転させます。 再構成された極角は非負となり、方位角は 180 度ずれます。 cosine サンプリングでは、サンプリング範囲が物理的な極角に制限されるため、範囲は [0, 22] 度になります。 phi には常に半幅 delta_phi の一様サンプリングを使用します。randomPhiModel はありません。

運動量 p に対して、期待される成分は次のとおりです。

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

theta と phi を固定するカードでは、それぞれの角度を 3 度と 45 度に設定し、3 つの運動量ヒストグラムのみを 表示します。一様分布、ガウス分布、cosine モデルによる theta サンプリングでは、2D プロットの縦軸に px、 横軸に pz を表示します。cosine-theta のケースでは、 pz 分布も一様になります。theta を固定して phi に広がりを持たせると、 px/py 平面への射影は円弧を描きます。ラップアラウンドのケースでは、運動量に不連続を生じることなく 360 度をまたぎます。 生成粒子バンクの角度はラジアンで保存されます。ステアリングカードでは、単位を明示して度を使用します。

Fixed theta and phi

Fixed theta = 3 deg and phi = 45 deg.

fixed_theta_and_phi.yaml の全内容

粒子設定
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 イベント(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 の全内容

粒子設定
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 イベント(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 の全内容

粒子設定
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 イベント(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 の全内容

粒子設定
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 イベント(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 の全内容

粒子設定
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 イベント(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 の全内容

粒子設定
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 イベント(Phi wraparound)。
Phi wraparound
Phi uniform on [330, 370] deg, crossing 360 deg, at theta = 45 deg.

検証と再現

設定済みの GEMC ソースツリーから、11 個すべてのチェックを実行します。

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

これらのチェックでは、すべての頂点がターゲット内にあり、生成 1 回につきターゲットヒットが 1 つあることを 確認します。イベント ID と頂点を照合し、運動量成分を比較し、theta と phi を 360 度を法として再構成し、 期待される確率分布を検定します。 XY のチェックでは、横方向のサンプル間に相関がないことも確認します。テストは一時ディレクトリ内に 新しいジオメトリと出力を生成するため、各ケースは単独でも動作します。

このページの画像と粒子設定をウェブサイトリポジトリから再生成するには、次を実行します。

python3 scripts/generate_example_assets.py generator_manipulations

必要なローカル環境については、ウェブサイトのアセットガイドに記載されています。 内部ジェネレータガイドも参照してください。