#include "RunAction.hh" #include "G4RootAnalysisManager.hh" #include "G4VUserPrimaryGeneratorAction.hh" #include "DetectorConstruction.hh" #include "G4LogicalVolume.hh" #include "G4RunManager.hh" #include "G4Run.hh" #include "primarygenerator.hh" #include "G4AccumulableManager.hh" RunAction::RunAction() {auto man = G4RootAnalysisManager::Instance(); man->SetVerboseLevel(1); man->SetNtupleMerging(true); man->CreateNtuple("Hits", "pos and edep"); man->CreateNtupleDColumn("edep"); man->CreateNtupleDColumn("FX"); man->CreateNtupleDColumn("FY"); man->CreateNtupleDColumn("FZ");man->CreateNtupleDColumn("dose"); man->FinishNtuple(0); G4AccumulableManager* accumulableManager = G4AccumulableManager::Instance(); accumulableManager->RegisterAccumulable(fEdep); } RunAction::~RunAction() {} void RunAction::BeginOfRunAction(const G4Run*) { //inform the runManager to save random number seed G4RunManager::GetRunManager()->SetRandomNumberStore(false); // reset accumulables to their initial values G4AccumulableManager* accumulableManager = G4AccumulableManager::Instance(); accumulableManager->Reset(); auto man = G4RootAnalysisManager::Instance(); G4String fileName = "B4.root"; man->OpenFile(fileName); } void RunAction::EndOfRunAction(const G4Run* run) { G4int nofEvents = run->GetNumberOfEvent(); if (nofEvents == 0) return; // Merge accumulables G4AccumulableManager* accumulableManager = G4AccumulableManager::Instance(); accumulableManager->Merge(); // Compute dose = total energy deposit in a run and its variance // G4double edep = fEdep.GetValue(); const auto detConstruction = static_cast( G4RunManager::GetRunManager()->GetUserDetectorConstruction()); G4double mass = detConstruction->GetScoringVolume()->GetMass(); G4double dose = edep/mass; // G4cout <<"dose"<Write(); man->CloseFile(false); } void RunAction::AddEdep(G4double edep) { fEdep += edep; }