ユーザーアクションしたい(G4VUserActionInitialization

 1// include/ActionInitialization.hh
 2#ifndef ActionInitialization_H
 3#define ActionInitialization_H 1
 4
 5#include "G4VUserActionInitialization.hh"
 6
 7namespace プロジェクト名
 8{
 9class ActionInitialization : public G4VUserActionInitialization
10{
11    public:
12        ActionInitialization();
13        virtual ~ActionInitialization();
14        virtual void BuildForMaster() const;
15        virtual void Build() const;
16
17}
18}  // プロジェクト名
19#endif

ユーザーアクションはG4VUserActionInitializationを継承したクラスを自作します。 そのメンバーには仮想関数としてBuildForMasterBuildを定義します。

BuildForMasterはマルチスレッドモードのマスタースレッド用のユーザーアクションです。 とくに追加設定は必要はありません。

Buildはワーカースレッド用のユーザーアクションです。 こちらはカスタマイズ設定が必要です。

 1// src/ActionInitialization.cc
 2#include "ActionInitialization.hh"   // <-- G4VUserActionInitializationを継承した自作クラス
 3
 4#include "PrimaryGeneratorAction.hh"  // <-- G4VUserPrimaryGeneratorActionを継承した自作クラス
 5#include "EventAction.hh"             // <-- G4UserEventActionを継承した自作クラス
 6#include "TrackingAction.hh"          // <-- G4UserTrackingActionを継承した自作クラス
 7#include "SteppingAction.hh"          // <-- G4UserSteppingActionを継承した自作クラス
 8
 9namespace プロジェクト名
10{
11
12ActionInitialization::ActionInitialization() {;}
13ActionInitialization::~ActionInitialization() {;}
14
15////////////////////////////////////////////////////////////////////////////////
16void ActionInitialization::BuildForMaster() const {;}
17
18////////////////////////////////////////////////////////////////////////////////
19void ActionInitialization::Build() const
20{
21    // 必須の設定
22    SetUserAction(new PrimaryGeneratorAction);
23    // 任意の設定
24    SetUserAction(new RunAction);
25    SetUserAction(new EventAction);
26    SetUserAction(new TrackingAction);
27    SetUserAction(new SteppingAction);
28    SetUserAction(new StackingAction);
29}
30
31}

ユーザーアクションはBuildメソッドに追加すればよいです。 それぞれ自作クラスで定義してSetUserActionを使って渡します。

PrimaryGeneratorActionの設定は必須です。 その他のアクション設定は任意です。

 1// プロジェクト名.cc
 2#include "G4RunManagerFactory.hh"
 3
 4#include "ActionInitialization.hh"  // <-- 自作クラス
 5
 6int main()
 7{
 8    auto *runManager = G4RunManagerFactory::CreateRunManager();
 9    runManager->SetUserInitialization(new ActionInitialization);
10}

main関数の中でユーザーアクションはSetUserInitializationを使ってランマネージャーに登録します。