B1したい(examples/basic/B1/)

basic/B1は、Geant4アプリケーションの最小構成を示すサンプルです。
簡単な検出器の形状を定義し、一次粒子を入射させ、物質中でのエネルギー損失を記録する、という基本的な流れを確認できます。
まず、B1サンプルをビルドして実行し、
マクロファイルを編集して、粒子の種類やエネルギーを変更してみるとよいです。
ビルドしたい(cmake)
$ cd B1
(B1) $ mkdir build
(B1) $ cd build
(B1/build) $ cmake ..
(B1/build) $ make
(B1/build) $ ./exampleB1 run1.mac
(B1/build) $ ./exampleB1 run2.mac
cmakeでビルドし、exampleB1という実行ファイルを作成します。
まず、examples/basic/B1/の下にビルド用ディレクトリ(build)を作成し、その中で``cmake …とmakeを実行します。 ./exampleB1を実行するときにマクロファイル(run1.mac`など)を指定します。
メイン(exampleB1.cc)
1//////////////////////////////////////////////////
2// exampleB1.cc
3//////////////////////////////////////////////////
4auto *runManager = G4RunManagerFactory::CreateRunManager(G4RunManagerType::Default)
5// Detector construction
6runManager->SetUserInitialization(new DetectorConstruction());
7
8// Physics list
9G4VModularPhysicsList* physicsList = new QBBC;
10physicsList->SetVerboseLevel(1);
11runManager->SetUserInitialization(physicsList);
12
13// User action initialization
14runManager->SetUserInitialization(new ActionInitialization());
15
16G4UIExecutive *ui = new G4UIExecutive(argc, argv);
17G4VisManager *visManager = new G4VisExecutive;
18G4UImanager *uiManager = G4UImanager::GetUIpointer();
メインプログラムはexampleB1.ccです。
ここでは、Geant4アプリケーション全体を制御するための各種マネージャーが生成・設定されています。
まず
G4RunManagerFactoryによってランマネージャーが作成され、
検出器(DetectorConstruction)、
物理リスト、
ユーザーアクション(ActionInitialization)
が登録されます。
その後、
G4UIExecutiveやG4VisManagerなど、
UIや可視化を担当するマネージャーが初期化されます。
これらのマネージャーにより、マクロコマンドの入力や、
イベント・検出器の表示が可能になります。
このように
exampleB1では、
シミュレーションを構成する各要素を組み立て、
実行を開始する準備を行なっています。
検出器したい(DetectorConstruction)
検出器の形状や材料はDetectorConstructionクラスで定義します。
basic/B1では、
シミュレーション空間全体を表すWorldボリュームを作成し、
その内部に検出器となる単純な箱形状のボリュームを配置しています。
また、エネルギー損失を記録するためのScoring Volumeもここで設定しています。
注釈
basic/B1はSensitive Detectorを使いません。
Sensitive Detectorを使ったヒット情報の扱いは、
basic/B2などのサンプルを参照してください。
物理リストしたい(QBBC)
basic/B1では、Geant4標準のモジュール型物理リストにあるQBBCモデルを使っています。
QBBCは、電磁相互作用、ハドロン相互作用、崩壊過程などを含んだ汎用的で安全な物理リストです。
入射粒子したい(PrimaryGeneratorAction)
basic/B1の入射粒子は、
PrimaryGeneratorActionでG4ParticleGunを使って定義されています。
初期状態では、電子を6 MeVで +Z方向に入射しています。
入射粒子の設定はマクロで変更できます。 粒子の種類やエネルギー、イベント数などをマクロファイルで指定できるため、再ビルドせずに条件を切り替えて試すことができます。
ディレクトリ構造
$ tree B1 -L 2
B1
├── CMakeLists.txt
├── GNUmakefile
├── History
├── README
├── exampleB1.cc
├── include
│ ├── ActionInitialization.hh
│ ├── DetectorConstruction.hh
│ ├── EventAction.hh
│ ├── PrimaryGeneratorAction.hh
│ ├── RunAction.hh
│ └── SteppingAction.hh
├── src
│ ├── ActionInitialization.cc
│ ├── DetectorConstruction.cc
│ ├── EventAction.cc
│ ├── PrimaryGeneratorAction.cc
│ ├── RunAction.cc
│ └── SteppingAction.cc
├── init_vis.mac
├── vis.mac
├── exampleB1.in
├── exampleB1.out
├── run1.mac
├── run2.mac
└── tsg_offscreen.mac
B1のディレクトリ構造は上のようになっています。
メインのプログラムはexampleB1.ccで、include/*.hhとsrc/*.ccに関係するソースコードが格納されています。
*.macは実行ファイルの引数に指定できるマクロファイルです。
exampleB1.inもマクロファイルです。
これを読み込んだときの出力がexampleB1.outです。