- Runマネージャを構築
- ユーザが構築した環境等のクラスのお決まりの初期化手続(てゆうか、「SetUserInitialization」)
- ユーザが定めたActionのお決まりの実行(てゆうか、「SetUserAction」)
- G4カーネルの初期化
- UIマネージャと交信してパラメータ設定したり、Runマネージャと交信してRunを実施(≡粒子を飛ばして追跡)したりする
- 終了手続(≡Runマネージャの削除)
こんな感じに読める。
『2.1.1 A Sample main() Method』節の要点
- main()はあくまでも使用用途に応じてそれを唯一知っているユーザが用意しなければならない。
- 最も単純な最低限の例(初心者例題01)の提示。main()メソッドは、2つの toolkitクラス G4RunManager, G4UImanager と、3つの(ユーザが書いた)クラス ExN01DetectorConstruction, ExN01PhysicsList, ExN01PrimaryGeneratorAction (いずれも toolkitクラスより派生)で成り立っている。
『2.1.2 G4RunManager』節の要点
Runマネージャの生成
main() が真っ先にやらなければならないことは、 G4RunManager クラスのインスタンスを生成することだ。
G4RunManager* runManager = new G4RunManager;
G4RunManager クラス とは…
・ユーザのmain()の中で明示的に構築される唯一の Geant4 カーネル のマネージャクラスである。
・プログラムのフローを制御し、1 Run 中のイベントループを管理する。
・G4RunManager クラスが生成される時他の主要なクラスも生成され、それらはG4RunManagerが削除される際に同時に自動削除される。
初期化
Runマネージャは初期化手続の管理も扱い、これにはユーザ作成クラスの初期化も含まれる。このため、次に挙げるような、シミュレーションに必要な全情報が与えられなくてはならない。
- 検出器のジオメトリ
- 取扱う全ての粒子種とそれらの間にはたらく物理過程
- 1イベント毎の入射粒子の初期状態
- その他、あらゆる付加条件
・検出器ジオメトリ
runManager->SetUserInitialization(new ExN01DetectorConstruction);
ユーザ初期化クラスExN01DetectorConstructionの派生元:G4VUserDetectorConstruction
検出器設定情報の完全な記述が必要。
- ジオメトリ
- 材質
- 有感領域の定義
- 有感領域のシグナルの読み出し方法の計画
・物理過程
runManager->SetUserInitialization(new ExN01PhysicsList);
ユーザ定義クラスExN01PhysicsListの派生元:G4VUserPhysicsList
ユーザが定義しなくてはいけないもの
- シミュレーションに用いられる粒子種
- 各粒子のレンジカット(range cuts)
- シミュレートする全ての物理過程
入射粒子の発生
runManager->SetUserAction(new ExN01PrimaryGeneratorAction);
ユーザActionクラスExN01PrimaryGeneratorActionの派生元:G4VUserPrimaryGeneratorAction
ここでユーザはいちばん初めのイベントにおける初期状態を記述しなくてはならない。
※このクラスには「generatePrimaries()」という“public virtual”なメソッドがあって、各イベントの開始時に呼び出されることになっている。【注;Geant4では初期イベント生成時においていかなる暗黙の操作も行なわれない。⇒従ってユーザが与えてやらないといけない。】
カーネル初期化
runManager->initialize();
performs the detector construction, creates the physics processes, calculates cross sections and otherwise sets up the run.
Runとは…
一旦Runが始まると、検出器設定や物理過程は変わらない。
UIマネージャ:G4UImanager
Runマネージャ生成と同時に自動生成される管理クラスの一つ。
main() 内で使用する際は、次のようにしてポインタを取得する。
G4UImanager* UI = G4UImanager::getUIpointer();