相互作用したい(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を継承して、完全自作の相互作用モジュールを作ることができます。