相互作用したい(G4VModularPhysicsList
)
粒子と物質の相互作用を定義するクラスは、必須クラスのひとつです。
Geant4で用意されているReference Physics Listを利用するのが簡単です。
このPhysicsListはG4VModularPhysicsList
を継承したクラスです。
親クラス
G4VModularPhysicsList
1G4VModularPhysicsList()
2~G4VModularPhysicsList() override;
3void ConstructParticle() override;
4void ConstructProcess() override;
5void RegisterPhysics(G4VPhysicsConstructor*);
G4VModularPhysicsList
はG4VUserPhysicList
を継承したクラスです。
RegisterPhysics
で、他のリファレンス物理モデル(G4VPhysicsConstructor
)を追加できます。
モデルの名前と内容はGuide for Physics Listsで確認できます。 モデル名は、利用している相互作用モデルを使った命名規則になっています。
メイン関数
1#include "FTFP_BERT.hh"
2
3int main(int argc, char** argv)
4{
5 auto rm = G4RunManagerFactory::CreateRunManager();
6
7 auto physics = new FTFP_BERT{};
8 rm->SetUserInitialization(physics);
9
10}
メイン関数で Reference Physics Listを作成してRunManagerに追加します。
カスタムしたい(G4VUserPhysicsList
)
定義されていない相互作用(やその組み合わせ)が必要な場合はG4VUserPhysicsList
クラスを継承してユーザーがカスタムできるようになっています。
G4VUserPhysicsList
1G4VUserPhysicList();
2virtual ~G4VUserPhysicList();
3virtual void ConstructParticle() = 0;
4virtual void ConstructProcess() = 0;
5virtual void SetCuts();
親クラスのメンバー関数を抜粋しました。
コンストラクターとデストラクターは、この設定を引き継げばよさそうです。
ConstructParticle()
とConstructProcess()
は、純粋仮想関数になっているため、自作クラスでoverrideが必要です。
SetCuts()
は、粒子輸送の閾値を設定する仮想関数です。
overrideして閾値をカスタマイズできます。
1G4VUserPhysicList() = default;
2~G4VUserPhysicList() = default;
3void ConstructParticle() override;
4void ConstructProcess() override;
5void SetCuts() override;