Locked History Actions

Geant4_Structure

Geant4 の構造

検出器のモンテカルロシミュレーション

  • 例えば、検出器にガンマ線を打ち込むと、そのガンマ線は検出器に吸収されるときもあれば、そのまま通り抜けるときもある。即ち、反応過程は確率的に決定される。このような過程をプログラムでシミュレーションする場合、検出器のどこで、どのような反応をするかを乱数を振って決定する。さらに、1000 個、または 10000 個といった多数の粒子に対してプログラムを走らせ、どのような反応がどこで起きやすいかを判断する。また、検出器の応答も観察する。このような、"乱数を振って"、多くのイベントの"積算結果"を出力するシミュレーションをモンテカルロシミュレーションと呼ぶ。
  •  

  • ガンマ線源を用いてガンマ線検出器の検出効率 (ガンマ線が検出器に入射したときに、ガンマ線を検出できる割合) を見積もる場合、以下のようなモンテカルロシミュレーションプログラムを書くことになる。
    1. 検出器の物質、形、位置を定義。
    2. 線源から放出されるガンマ線のエネルギーや方向を指定。方向は乱数を振って指定。ここから、1イベントが開始される。
    3. ガンマ線が検出器に入射した場合、検出器内の飛程を微小区間(ステップ)に分割。
    4. 各ステップでガンマ線が検出器と反応するか、光電効果、コンプトン散乱、対生成の断面積をもとに、乱数を振って決定。
    5. 光電効果、コンプトン散乱、対生成によって生成(放出)される電子(陽電子)の検出器内での飛程を微小区間(ステップ)に分割。
    6. 各ステップでのエネルギー損失を計算。検出器内でのエネルギー損失の総和を計算するための変数に、各ステップのエネルギーを足し込む。
    7. 各イベントの終了後、データを出力、またはヒストグラムなどに保存。
    8. 2. に戻り、次のイベントを開始。
    9.  

  • これを実現するプログラムを作成する場合、以下のような流れのコードになる(他にも書き方はある)。
    • 1. 検出器の物質、形、位置を定義。
    • 2. 入射粒子の種類、性質を決定し、イベントのループ開始。
      • 3. 粒子が検出器内に入射した場合、飛程をステップに分割する。
      • 4. 各ステップ毎のループ開始。
        • 5. エネルギー損失などの計算。
        • 6. 出力データの回収。
        • 7. 新たな粒子が生成した場合、その粒子を入射粒子として、3. のプロセス (新たな粒子の入射) に移行。
        • 8. 1 ステップ の処理を終了。粒子がまだ残っていれば、4. のプロセス (次のステップ) に移行。
      • 9. 他に粒子があれば、3. のプロセス (新たな粒子の入射) に移行。
      • 10. 粒子がすべて停止、又は消滅していれば、1 イベントの処理を終了。2. のプロセス (次のイベント) に移行。
    •  

Geant4 が提供する機能

  • 上述のようなシミュレーションプログラムを汎用的に作ろうとする場合、"プログラムごとに異なる部分" (検出器の形、位置の指定など) と"共通化できる部分" (ループ処理など) に分けることができる。Geant4 はこの"共通化できるの部分"を提供する。一方で、"プログラムごとに異なる部分"はシミュレーションを行う人しか知らない部分であるため、Geant4 が提供することはできない。この"プログラムごとに異なる部分"は、ユーザーが Geant4 に登録 (入力) する情報となる。Geant4 へ登録する情報と、Geant4 が持つ機能および情報は以下のようにまとめられる。
    • Geant4 へ登録する情報

      • 検出器のジオメトリ (形、位置、物質など)
      • 入射粒子のプロパティ (粒子の種類、速度、方向など)
      • 使用する物理プロセス
      • 出力結果の取り出し方法の指定
    • Geant4 が持つ機能および情報

      • ループ処理、ステップごとのループ処理、シミュレーション中に新たに生成される各粒子に対するループ処理を行うための機能(フレームワーク)
      • 物理データ (粒子の質量、粒子の生成、崩壊プロセスについての情報、粒子と物質の相互作用断面積など、シミュレーションを行う上で必要なほぼすべての物理情報)
  • 言い換えれば、Geant4 のユーザーはほぼ必要最低限の情報をGeant4に登録すれば、後はGeant4がそれらの情報をもとにシミュレーションを行う。よって、自分でイベントや、ステップごとのループ処理などを書く必要はない。ただし、シミュレーションで考慮する物理プロセスも、ユーザーが指定しなければならない。これは、シミュレーションのパフォーマンスの為に、このような仕様になっているのだろう。さらに、通常はデータの出力処理も書く必要がある。

使い方

Geant4 が出来ること

https://www.microsoft.com/msj/archive/S3F6.aspx