相互作用したい(G4VModularPhysicsList

粒子と物質の相互作用を定義するクラスは、必須クラスのひとつです。 Geant4で用意されているReference Physics Listを利用するのが簡単です。 このPhysicsListはG4VModularPhysicsListを継承したクラスです。

親クラス

  • G4VModularPhysicsList

1G4VModularPhysicsList()
2~G4VModularPhysicsList() override;
3void ConstructParticle() override;
4void ConstructProcess() override;
5void RegisterPhysics(G4VPhysicsConstructor*);

G4VModularPhysicsListG4VUserPhysicListを継承したクラスです。 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;