ランアクションしたい(G4UserRunAction
)
ランごとのデータを収集したい場合は、
G4UserRunAction
クラスを継承したクラスを作成します。
親クラス
1G4UserRunAction();
2virtual ~G4UserRunAction() = default;
3virtual void BeginOfRunAction(const G4Run* /*aRun*/) {};
4virtual void EndOfRunAction(const G4Run* /*aRun*/) {}
親クラスのメンバー関数を抜粋しました。
コンストラクターとデストラクターは、この設定を引き継げばよさそうです。
BeginOfRunAction()
は、ランの開始時に実行される関数です。
EndOfRunAction()
は、ランの終了時に実行される関数です。
どちらも仮想関数になっているため、設定は必須ではありません。
必要に応じて自作クラスでoverrideします。
RunActionクラス
1// include/RunAction.hh
2
3#ifndef RunAction_h
4#define RunAction_h 1
5
6#include "G4UserRunAction.hh"
7#include "G4Run.hh"
8
9namespace ToyMC
10{
11
12class RunAction: public G4UserRunAction
13{
14 public:
15 RunAction();
16 ~RunAction() = default;
17
18 void BeginOfRunAction(const G4Run *aRun) override;
19 void EndOfRunAction(const G4Run *aRun) override;
20};
21
22}; // namespace ToyMC
23
24#endif
初期化したい(RunAction
)
1RunAction::RunAction()
2{
3 auto am = G4AnalysisManager::Instance();
4 am->SetFilename("ファイル名");
5 am->SetDefaultFileType("csv");
6}
ラン開始したい(BeginOfRunAction
)
1void RunAction::BeginOfRunAction(const G4Run *aRun)
2{
3 // G4Runに対する操作
4 G4int run_id = aRun->GetRunID();
5 G4int n_events = aRun->GetNumberOfEvents();
6 auto events = aRun->GetEventVector();
7 G4String random_status = aRun->GetRandomNumberStatus();
8
9 // 保存ファイルの作成
10 auto am = G4AnalysisManager::Instance();
11 am->OpenFile();
12
13 // 内部変数の初期化
14 fEnergyDeposit = 0;
15
16}
BeginOfRunAction
はラン開始に実行されるメソッドです。
ランごとのデータを初期化したり、
保存先のファイルの設定をするとよいです。
ラン終了したい(EndOfRunAction
)
1void RunAction::EndOfRunAction(const G4Run *aRun)
2{
3 // G4Runに対する操作
4 G4int run_id = aRun->GetRunID();
5 G4int n_events = aRun->GetNumberOfEvents();
6 auto events = aRun->GetEventVector();
7 G4String random_status = aRun->GetRandomNumberStatus();
8
9 auto am = G4AnalysisManager::Instance();
10 am->Write();
11 am->CloseFile();
12}
EndOfRunAction
はランの終わりに実行されるメソッドです。
すべてのイベントのデータを集計して、ランサマリーを表示できたりします。