相互作用したい(G4VModularPhysicsList
)
G4VModularPhysicsList
は、シミュレーションで使用する物理モデルを
モジュール形式で構成できるようにするための基底クラスです。
v4.8.0で導入されました。
この枠組みにより、ユーザーはGeant4が提供するReference Physics Listを 選んで柔軟に物理モデルを構築できます。
注釈
v4.8.0以前は
G4VUserPhysicList
を継承して、ユーザー自身がすべての粒子と
物理過程を定義する必要があったそうです。
この方法はコードの可読性・保守性に乏しく、
物理モデルの再利用も困難だったため、
モジュール形式のG4VModularPhysicsList
が導入されたようです。
親クラス(G4VModularPhysicsList
)
1class G4VModularPhysicsList {
2 public:
3 G4VModularPhysicsList();
4 virtual ~G4VModularPhysicsList() override;
5
6 public:
7 virtual void ConstructParticle() override;
8 virtual void ConstructProcess() override;
9 void RegisterPhysics(G4VPhysicsConstructor*);
10}
親クラス(G4VModularPhyisicsList
)の主要なメンバー関数を抜粋しました。
RegisterPhysics
で、
Geant4が提供している物理モデルや、
他のリファレンス物理モデル(G4VPhysicsConstructor
を継承した自作クラス)を簡単に追加できます。
モデルの名前と内容はGuide for Physics Listsで確認できます。 モデル名は、利用している相互作用モデルを使った命名規則になっています。
メイン関数(main
)
1// プロジェクト名.cc(ここではToyMC.cc)
2
3
4// Geant4のクラス
5#include "FTFP_BERT.hh"
6#include "G4OpticalPhysics.hh"
7#include "G4RunManagerFactory.hh"
8
9int main(int argc, char** argv)
10{
11 auto rm = G4RunManagerFactory::CreateRunManager();
12
13 // ジオメトリの設定(省略)
14 // 物理モデルの設定
15
16 auto physics = new FTFP_BERT{};
17 physics->RegisterPhysics(new G4OpticalPhysics{});
18 rm->SetUserInitialization(physics);
19
20 // ユーザーアクションの設定(省略)
21
22 // 実験開始(省略)
23 rm->Initialize();
24 rm->BeamOn();
25 delete rm;
26 return 0;
27}
メイン関数で物理モデルを設定する最小構成です。
FTFPモデル(FTFP_BERT
)に
光学モデル(G4OpticalPhysics
)を追加し、
SetUserInitialization
を使ってRunManagerに登録しています。
また、G4VUserPhysicsConstructor
を継承して、完全自作の相互作用モジュールを作ることができます。