ランアクションしたい(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はランの終わりに実行されるメソッドです。 すべてのイベントのデータを集計して、ランサマリーを表示できたりします。