ユーザーアクションしたい(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
を継承したクラスを自作します。
そのメンバーには仮想関数としてBuildForMaster
とBuild
を定義します。
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
を使ってランマネージャーに登録します。