When I run with multiple threads, the program does not print out the information I set in the master thread, but runs directly to the end. This is my runaction.cc code
#include "RunAction.hh"
#include "PrimaryGeneratorAction.hh"
#include "DetectorConstruction.hh"
#include "DetectorConfig.hh"
#include "G4Run.hh"
#include "G4UnitsTable.hh"
#include "G4RunManager.hh"
#include <iomanip>
#include <string>
#include <vector>
#include <tuple>
#include <algorithm>
RunAction::RunAction(){
G4AccumulableManager* accumulableManager = G4AccumulableManager::Instance();
for (auto& accum : fTargetBinEdep){
accumulableManager->RegisterAccumulable(accum);
}
}
RunAction::~RunAction() {
}
void RunAction::BeginOfRunAction(const G4Run* run) {
G4cout<<"run start"<<G4endl;
G4RunManager::GetRunManager()->SetRandomNumberStore(false);
G4AccumulableManager* accumulableManager = G4AccumulableManager::Instance();
accumulableManager->Reset();
}
void RunAction::EndOfRunAction(const G4Run* run) {
G4AccumulableManager* accumulableManager = G4AccumulableManager::Instance();
accumulableManager->Merge();
if (IsMaster()) {
G4cout<<"end of global run"<<G4endl;
}
else {
G4cout<<"end fo local sum"<<G4endl;
}
}
And this is definition of fTargetBinEdep in the header file.
static const G4int fNbins = 19;
std::vector<G4Accumulable<G4double>> fTargetBinEdep = std::vector<G4Accumulable<G4double>>(fNbins, 0.0f);