Import Geant4 10.6.0 source tree

This commit is contained in:
Gabriele Cosmo
2019-12-06 15:12:28 +01:00
parent b2a62ae692
commit 5baee230e9
2997 changed files with 141580 additions and 98673 deletions
@@ -72,7 +72,7 @@ G4RootAnalysisManager* G4RootAnalysisManager::Instance()
//_____________________________________________________________________________
G4bool G4RootAnalysisManager::IsInstance()
{
return ( fgInstance != 0 );
return ( fgInstance != nullptr );
}
//_____________________________________________________________________________
@@ -80,6 +80,7 @@ G4RootAnalysisManager::G4RootAnalysisManager(G4bool isMaster)
: G4ToolsAnalysisManager("Root", isMaster),
fNofNtupleFiles(0),
fNtupleRowWise(false),
fNtupleRowMode(true),
fNtupleMergeMode(G4NtupleMergeMode::kNone),
fNtupleManager(nullptr),
fSlaveNtupleManager(nullptr),
@@ -101,12 +102,13 @@ G4RootAnalysisManager::G4RootAnalysisManager(G4bool isMaster)
fFileManager = std::make_shared<G4RootFileManager>(fState);
SetFileManager(fFileManager);
fFileManager->SetBasketSize(fgkDefaultBasketSize);
fFileManager->SetBasketEntries(fgkDefaultBasketEntries);
// Do not merge ntuples by default
// Merging may require user code migration as analysis manager
// must be created both on master and workers.
auto mergeNtuples = false;
SetNtupleMergingMode(mergeNtuples, fNofNtupleFiles, fNtupleRowWise);
SetNtupleMergingMode(mergeNtuples, fNofNtupleFiles);
// Create ntuple managers
CreateNtupleManagers();
@@ -125,8 +127,7 @@ G4RootAnalysisManager::~G4RootAnalysisManager()
//_____________________________________________________________________________
void G4RootAnalysisManager::SetNtupleMergingMode(G4bool mergeNtuples,
G4int nofNtupleFiles,
G4bool rowWise)
G4int nofNtupleFiles)
{
#ifdef G4VERBOSE
@@ -172,7 +173,6 @@ void G4RootAnalysisManager::SetNtupleMergingMode(G4bool mergeNtuples,
else {
// Set the number of reduced ntuple files
fNofNtupleFiles = nofNtupleFiles;
fNtupleRowWise = rowWise;
// Check the number of reduced ntuple files
// if ( fNofNtupleFiles < 0 || fNofNtupleFiles > nofThreads ) {
@@ -260,7 +260,7 @@ void G4RootAnalysisManager::CreateNtupleManagers()
switch ( fNtupleMergeMode )
{
case G4NtupleMergeMode::kNone:
fNtupleManager = new G4RootNtupleManager(fState, 0, fNtupleRowWise);
fNtupleManager = new G4RootNtupleManager(fState, 0, fNtupleRowWise, fNtupleRowMode);
fNtupleManager->SetFileManager(fFileManager);
SetNtupleManager(fNtupleManager);
break;
@@ -269,7 +269,8 @@ void G4RootAnalysisManager::CreateNtupleManagers()
G4int nofMainManagers = fNofNtupleFiles;
if ( ! nofMainManagers ) nofMainManagers = 1;
// create one manager if merging required into the histos & profiles files
fNtupleManager = new G4RootNtupleManager(fState, nofMainManagers, fNtupleRowWise);
fNtupleManager
= new G4RootNtupleManager(fState, nofMainManagers, fNtupleRowWise, fNtupleRowMode);
fNtupleManager->SetFileManager(fFileManager);
SetNtupleManager(fNtupleManager);
break;
@@ -280,7 +281,8 @@ void G4RootAnalysisManager::CreateNtupleManagers()
// The master class is used only in Get* functions
auto mainNtupleManager
= fNtupleManager->GetMainNtupleManager(GetNtupleFileNumber());
fSlaveNtupleManager = new G4RootPNtupleManager(mainNtupleManager, fState);
fSlaveNtupleManager
= new G4RootPNtupleManager(mainNtupleManager, fState, fNtupleRowWise, fNtupleRowMode);
SetNtupleManager(fSlaveNtupleManager);
break;
}
@@ -682,16 +684,11 @@ G4bool G4RootAnalysisManager::CloseFileImpl(G4bool reset)
//_____________________________________________________________________________
void G4RootAnalysisManager::SetNtupleMerging(G4bool mergeNtuples,
G4int nofNtupleFiles,
G4bool rowWise,
unsigned int basketSize)
G4int nofNtupleFiles)
{
// Keep basketSize in file manager
fFileManager->SetBasketSize(basketSize);
// Set ntuple merging mode
SetNtupleMergingMode(mergeNtuples, nofNtupleFiles, rowWise);
SetNtupleMergingMode(mergeNtuples, nofNtupleFiles);
// Clear existing managers
ClearNtupleManagers();
@@ -701,17 +698,50 @@ void G4RootAnalysisManager::SetNtupleMerging(G4bool mergeNtuples,
}
//_____________________________________________________________________________
void G4RootAnalysisManager::SetNtupleRowWise(G4bool rowWise)
void G4RootAnalysisManager::SetNtupleRowWise(G4bool rowWise, G4bool rowMode)
{
#ifdef G4VERBOSE
// Print info even when setting makes no effect
// (as we do not get printed the default setting in the output)
G4String rowWiseMode;
if ( rowWise ) {
rowWiseMode = "row-wise with extra branch";
}
else if ( rowMode ) {
rowWiseMode = "row-wise";
}
else {
rowWiseMode = "column-wise";
}
if ( fState.GetVerboseL1() )
fState.GetVerboseL1()
->Message("set", "ntuple merging row mode", rowWiseMode);
#endif
// Do nothing if the mode is not changed
if ( fNtupleRowWise == rowWise ) return;
if ( fNtupleRowWise == rowWise && fNtupleRowMode == rowMode ) return;
fNtupleRowWise = rowWise;
fNtupleRowMode = rowMode;
// Clear existing managers
ClearNtupleManagers();
if ( fNtupleManager ) {
fNtupleManager->SetNtupleRowWise(rowWise, rowMode);
}
// Re-create managers
CreateNtupleManagers();
if ( fSlaveNtupleManager ) {
fSlaveNtupleManager->SetNtupleRowWise(rowWise, rowMode);
}
}
//_____________________________________________________________________________
void G4RootAnalysisManager::SetBasketSize(unsigned int basketSize)
{
fFileManager->SetBasketSize(basketSize);
}
//_____________________________________________________________________________
void G4RootAnalysisManager::SetBasketEntries(unsigned int basketEntries)
{
fFileManager->SetBasketEntries(basketEntries);
}
@@ -47,7 +47,8 @@ G4RootFileManager::G4RootFileManager(const G4AnalysisManagerState& state)
fNofNtupleFiles(0),
fNtupleFiles(),
fMainNtupleDirectories(),
fBasketSize(0)
fBasketSize(0),
fBasketEntries(0)
{}
//_____________________________________________________________________________
@@ -39,13 +39,14 @@ using namespace G4Analysis;
//_____________________________________________________________________________
G4RootNtupleManager::G4RootNtupleManager(const G4AnalysisManagerState& state,
G4int nofMainManagers,
G4bool rowWise)
G4bool rowWise, G4bool rowMode)
: G4TNtupleManager<tools::wroot::ntuple>(state),
fCreateMode(G4NtupleCreateMode::kUndefined),
fFileManager(nullptr),
fNtupleDirectory(nullptr),
fMainNtupleManagers(),
fRowWise(rowWise)
fRowWise(rowWise),
fRowMode(rowMode)
{
for ( G4int i=0; i<nofMainManagers; ++i) {
fMainNtupleManagers.push_back(
@@ -114,6 +115,20 @@ void G4RootNtupleManager::SetCreateMode()
#endif
}
//_____________________________________________________________________________
void G4RootNtupleManager::SetNtupleRowWise(G4bool rowWise, G4bool rowMode)
{
// Set rowWise mode and propagate it to main ntuple managers
fRowWise = rowWise;
fRowMode = rowMode;
for (auto& mainNtupleManager : fMainNtupleManagers ) {
mainNtupleManager->SetRowWise(rowWise);
}
}
//_____________________________________________________________________________
void G4RootNtupleManager::CreateTNtuple(
G4TNtupleDescription<tools::wroot::ntuple>* ntupleDescription)
@@ -251,3 +266,16 @@ unsigned int G4RootNtupleManager::GetBasketSize() const
return fFileManager->GetBasketSize();
}
//_____________________________________________________________________________
unsigned int G4RootNtupleManager::GetBasketEntries() const
{
if ( ! fFileManager ) {
G4String inFunction = "G4RootNtupleManager::::GetBasketEntries";
G4ExceptionDescription description;
description << " " << "File manager must be defined first.";
G4Exception(inFunction, "Analysis_W011", JustWarning, description);
return 0;
}
return fFileManager->GetBasketEntries();
}
@@ -41,11 +41,14 @@ namespace {
//_____________________________________________________________________________
G4RootPNtupleManager::G4RootPNtupleManager(G4RootMainNtupleManager* main,
const G4AnalysisManagerState& state)
const G4AnalysisManagerState& state,
G4bool rowWise, G4bool rowMode)
: G4BaseNtupleManager(state),
fCreateMode(G4PNtupleCreateMode::kUndefined),
fMainNtupleManager(main),
fNtupleVector()
fNtupleVector(),
fRowWise(rowWise),
fRowMode(rowMode)
{}
//_____________________________________________________________________________
@@ -142,15 +145,13 @@ void G4RootPNtupleManager::CreateNtuple(G4RootPNtupleDescription* ntupleDescript
auto rfile = fMainNtupleManager->GetNtupleFile();
// auto directory = fMainNtupleManager->GetNtupleDirectory();
// Get parameters from main ntuple
auto mainBranch = mainNtuple->get_row_wise_branch();
auto rowWise = mainBranch ? true : false;
// Get parameters from ntupleDescription
ntupleDescription->fFile = rfile.get();
mainNtuple->get_branches(ntupleDescription->fMainBranches);
G4bool verbose = true;
if ( rowWise ) {
if ( fRowWise ) {
auto mainBranch = mainNtuple->get_row_wise_branch();
tools::wroot::mt_ntuple_row_wise* mtNtuple
= new tools::wroot::mt_ntuple_row_wise(
G4cout, rfile->byte_swap(), rfile->compression(),
@@ -168,13 +169,15 @@ void G4RootPNtupleManager::CreateNtuple(G4RootPNtupleDescription* ntupleDescript
tools_vforcit(tools::wroot::branch*, ntupleDescription->fMainBranches, it) {
basketSizes.push_back((*it)->basket_size());
}
auto basketEntries = fMainNtupleManager->GetBasketEntries();
tools::wroot::mt_ntuple_column_wise* mtNtuple =
new tools::wroot::mt_ntuple_column_wise(
G4cout, rfile->byte_swap(), rfile->compression(),
mainNtuple->dir().seek_directory(),
ntupleDescription->fMainBranches, basketSizes,
ntupleDescription->fNtupleBooking, verbose);
ntupleDescription->fNtupleBooking,
fRowMode, basketEntries, verbose);
ntupleDescription->fNtuple
= static_cast<tools::wroot::imt_ntuple*>(mtNtuple);
@@ -498,3 +501,9 @@ G4bool G4RootPNtupleManager::IsEmpty() const
return ! fNtupleDescriptionVector.size();
}
//_____________________________________________________________________________
void G4RootPNtupleManager::SetNtupleRowWise(G4bool rowWise, G4bool rowMode)
{
fRowWise = rowWise;
fRowMode = rowMode;
}