Import Geant4 10.5.0 source tree

This commit is contained in:
Gabriele Cosmo
2018-12-07 15:15:39 +01:00
parent 6aa23be517
commit db49709b53
11370 changed files with 187480 additions and 160142 deletions
@@ -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;
}