Import Geant4 10.5.0 source tree
This commit is contained in:
@@ -28,6 +28,7 @@
|
||||
|
||||
#include "HadrontherapyRunAction.hh"
|
||||
#include "HadrontherapyEventAction.hh"
|
||||
#include "HadrontherapyAnalysis.hh"
|
||||
#include "G4Run.hh"
|
||||
#include "G4RunManager.hh"
|
||||
#include "G4UImanager.hh"
|
||||
@@ -36,48 +37,125 @@
|
||||
#include "G4SDManager.hh"
|
||||
#include "G4Timer.hh"
|
||||
#include "HadrontherapyRunAction.hh"
|
||||
|
||||
#include "HadrontherapyMatrix.hh"
|
||||
#include "HadrontherapyRBE.hh"
|
||||
#include "G4UnitsTable.hh"
|
||||
#include "G4SystemOfUnits.hh"
|
||||
|
||||
#include <G4AccumulableManager.hh>
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
HadrontherapyRunAction::HadrontherapyRunAction()
|
||||
{
|
||||
|
||||
G4AccumulableManager* accumulableManager = G4AccumulableManager::Instance();
|
||||
accumulableManager->RegisterAccumulable(&fRBEAccumulable);
|
||||
|
||||
// Create analysis manager
|
||||
// The choice of analysis technology is done via selectin of a namespace
|
||||
// in Analysis.hh
|
||||
auto analysisManager =G4AnalysisManager::Instance();
|
||||
G4cout << "Using " << analysisManager -> GetType() << G4endl;
|
||||
|
||||
analysisManager->SetVerboseLevel(1);
|
||||
analysisManager->SetFirstHistoId(1);
|
||||
|
||||
// Comment out the following line to generate an N-tuple
|
||||
analysisManager-> SetFirstNtupleId(2);
|
||||
|
||||
// Creating the histograms of primary kinetic
|
||||
// energy (Ekin) and of the energy deposited (Edep)
|
||||
// in the first voxel/slice of the water phantom
|
||||
analysisManager -> CreateH1("Ekin","Ekin the voxel", 400,20*MeV, 60*MeV);
|
||||
analysisManager -> CreateH1("Edep","Edep the voxel", 200, -10, 10*MeV);
|
||||
|
||||
// Example of how to create an Ntuple (comment-out, if needed)
|
||||
//analysisManager->CreateNtuple("NYUPLA", "Edep and TrackL");
|
||||
//analysisManager->CreateNtupleDColumn("Ekin");
|
||||
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
HadrontherapyRunAction::~HadrontherapyRunAction()
|
||||
{
|
||||
|
||||
delete G4AnalysisManager::Instance();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
void HadrontherapyRunAction::BeginOfRunAction(const G4Run* aRun)
|
||||
{
|
||||
|
||||
// Get analysis manager
|
||||
auto analysisManager = G4AnalysisManager::Instance();
|
||||
|
||||
// Open an output file
|
||||
//
|
||||
G4String fileName = "Hadrontherapy";
|
||||
analysisManager->OpenFile(fileName);
|
||||
|
||||
G4AccumulableManager* accumulableManager = G4AccumulableManager::Instance();
|
||||
accumulableManager->Reset();
|
||||
|
||||
G4RunManager::GetRunManager()-> SetRandomNumberStore(true);
|
||||
G4cout << "Run " << aRun -> GetRunID() << " starts ..." << G4endl;
|
||||
|
||||
HadrontherapyRBE *rbe = HadrontherapyRBE::GetInstance();
|
||||
if (rbe->IsCalculationEnabled() && IsMaster() && rbe->GetVerboseLevel() > 0)
|
||||
{
|
||||
rbe->PrintParameters();
|
||||
}
|
||||
|
||||
electromagnetic = 0;
|
||||
hadronic = 0;
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
void HadrontherapyRunAction::EndOfRunAction(const G4Run*)
|
||||
{
|
||||
auto analysisManager = G4AnalysisManager::Instance();
|
||||
|
||||
//G4cout << " Summary of Run " << aRun -> GetRunID() <<" :"<< G4endl;
|
||||
//G4cout << "Number of electromagnetic processes of primary particles in the phantom:"
|
||||
// << electromagnetic << G4endl;
|
||||
//G4cout << "Number of hadronic processes of primary particles in the phantom:"
|
||||
// << hadronic << G4endl;
|
||||
G4AccumulableManager* accumulableManager = G4AccumulableManager::Instance();
|
||||
accumulableManager->Merge();
|
||||
|
||||
// Tell the RBE class what we have accumulated...
|
||||
HadrontherapyRBE *rbe = HadrontherapyRBE::GetInstance();
|
||||
if (rbe->IsCalculationEnabled() && IsMaster())
|
||||
{
|
||||
if (rbe->IsAccumulationEnabled())
|
||||
{
|
||||
rbe->AddAlphaNumerator(fRBEAccumulable.GetAlphaNumerator());
|
||||
rbe->AddBetaNumerator(fRBEAccumulable.GetBetaNumerator());
|
||||
rbe->AddDenominator(fRBEAccumulable.GetDenominator());
|
||||
rbe->AddEnergyDeposit(fRBEAccumulable.GetEnergyDeposit());
|
||||
}
|
||||
else
|
||||
{
|
||||
rbe->SetAlphaNumerator(fRBEAccumulable.GetAlphaNumerator());
|
||||
rbe->SetBetaNumerator(fRBEAccumulable.GetBetaNumerator());
|
||||
rbe->SetDenominator(fRBEAccumulable.GetDenominator());
|
||||
rbe->SetEnergyDeposit(fRBEAccumulable.GetEnergyDeposit());
|
||||
}
|
||||
|
||||
rbe->StoreAlphaAndBeta();
|
||||
rbe->StoreRBE();
|
||||
}
|
||||
|
||||
analysisManager->Write();
|
||||
analysisManager->CloseFile();
|
||||
|
||||
}
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
void HadrontherapyRunAction::AddEMProcess()
|
||||
{
|
||||
electromagnetic += 1;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
void HadrontherapyRunAction::AddHadronicProcess()
|
||||
{
|
||||
hadronic += 1;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user