Geant4 の構造
検出器のモンテカルロシミュレーション
- 例えば、検出器にガンマ線を打ち込むと、そのガンマ線は検出器に吸収されるときもあれば、そのまま通り抜けるときもある。即ち、反応過程は確率的に決定される。このような過程をプログラムでシミュレーションする場合、検出器のどこで、どのような反応をするかを乱数を振って決定する。さらに、1000 個、または 10000 個といった多数の粒子に対してプログラムを走らせ、どのような反応がどこで起きやすいかを判断する。また、検出器の応答も観察する。このような、"乱数を振って"、多くのイベントの"積算結果"を出力するシミュレーションをモンテカルロシミュレーションと呼ぶ。
- ガンマ線源を用いてガンマ線検出器の検出効率 (ガンマ線が検出器に入射したときに、ガンマ線を検出できる割合) を見積もる場合、以下のようなモンテカルロシミュレーションプログラムを書くことになる。
- 検出器の物質、形、位置を定義。
- 線源から放出されるガンマ線のエネルギーや方向を指定。方向は乱数を振って指定。ここから、1イベントが開始される。
- ガンマ線が検出器に入射した場合、検出器内の飛程を微小区間(ステップ)に分割。
- 各ステップでガンマ線が検出器と反応するか、光電効果、コンプトン散乱、対生成の断面積をもとに、乱数を振って決定。
- 光電効果、コンプトン散乱、対生成によって生成(放出)される電子(陽電子)の検出器内での飛程を微小区間(ステップ)に分割。
- 各ステップでのエネルギー損失を計算。検出器内でのエネルギー損失の総和を計算するための変数に、各ステップのエネルギーを足し込む。
- 各イベントの終了後、データを出力、またはヒストグラムなどに保存。
- 2. に戻り、次のイベントを開始。
- これを実現するプログラムを作成する場合、以下のような流れのコードになる(他にも書き方はある)。
- 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 が出来ること