Import Geant4 10.7.0 source tree

This commit is contained in:
Gabriele Cosmo
2020-12-04 12:30:43 +01:00
parent 67ba86d073
commit dab42d2018
3770 changed files with 226369 additions and 286486 deletions
+76 -142
View File
@@ -38,19 +38,25 @@ using namespace G4Analysis;
//_____________________________________________________________________________
G4RootNtupleManager::G4RootNtupleManager(const G4AnalysisManagerState& state,
G4int nofMainManagers,
G4bool rowWise, G4bool rowMode)
: G4TNtupleManager<tools::wroot::ntuple>(state),
fCreateMode(G4NtupleCreateMode::kUndefined),
std::shared_ptr<G4NtupleBookingManager> bookingManger,
G4int nofMainManagers, G4int nofFiles,
G4bool rowWise, G4bool rowMode)
: G4TNtupleManager<tools::wroot::ntuple, G4RootFile>(state),
fFileManager(nullptr),
fNtupleDirectory(nullptr),
fMainNtupleManagers(),
fNtupleFile(nullptr),
fRowWise(rowWise),
fRowMode(rowMode)
{
for ( G4int i=0; i<nofMainManagers; ++i) {
auto fileNumber = i;
if ( (i == 0) && (nofFiles == 0) ) {
// the main ntuple file will be merged in the default file
fileNumber = -1;
}
fMainNtupleManagers.push_back(
new G4RootMainNtupleManager(this, rowWise, fState));
std::make_shared<G4RootMainNtupleManager>(
this, bookingManger.get(), rowWise, fileNumber, fState));
}
}
@@ -62,161 +68,65 @@ G4RootNtupleManager::~G4RootNtupleManager()
// private methods
//
//_____________________________________________________________________________
void G4RootNtupleManager::SetCreateMode()
{
// Set create mode if not yet defined, or reset it if ntuples are defined both
// before and after open file
#ifdef G4VERBOSE
if ( fState.GetVerboseL4() )
fState.GetVerboseL4()
->Message("set", "ntuple create mode", "");
#endif
G4String createMode;
if ( fCreateMode == G4NtupleCreateMode::kUndefined ) {
if ( fMainNtupleManagers.size() ) {
if ( fFileManager->GetNtupleFile(0) ) {
fCreateMode = G4NtupleCreateMode::kMainAfterOpen;
createMode = "G4NtupleCreateMode::kMainAfterOpen";
} else {
fCreateMode = G4NtupleCreateMode::kMainBeforeOpen;
createMode = "G4NtupleCreateMode::kMainBeforeOpen";
}
}
else {
if ( fNtupleDirectory ) {
fCreateMode = G4NtupleCreateMode::kNoMergeAfterOpen;
createMode = "G4NtupleCreateMode::kNoMergeAfterOpen";
} else {
fCreateMode = G4NtupleCreateMode::kNoMergeBeforeOpen;
createMode = "G4NtupleCreateMode::kNoMergeBeforeOpen";
}
}
}
if ( fCreateMode == G4NtupleCreateMode::kNoMergeBeforeOpen &&
fFileManager->GetNtupleFile(0) ) {
fCreateMode = G4NtupleCreateMode::kNoMergeAfterOpen;
createMode = "G4NtupleCreateMode::kNoMergeAfterOpen";
}
if ( fCreateMode == G4NtupleCreateMode::kMainBeforeOpen &&
fFileManager->GetNtupleFile(0) ) {
fCreateMode = G4NtupleCreateMode::kMainAfterOpen;
createMode = "G4NtupleCreateMode::kMainAfterOpen";
}
#ifdef G4VERBOSE
if ( fState.GetVerboseL2() )
fState.GetVerboseL2()
->Message("set", "ntuple create mode", createMode);
#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)
{
if ( ! fNtupleDirectory ) {
G4String inFunction = "G4RootNtupleManager::::CreateTNtuple";
G4ExceptionDescription description;
description << " "
<< "Cannot create ntuple. Ntuple directory does not exist." << G4endl;
G4Exception(inFunction, "Analysis_W002", JustWarning, description);
return;
}
ntupleDescription->fNtuple
= new tools::wroot::ntuple(
*fNtupleDirectory, ntupleDescription->fNtupleBooking, fRowWise);
auto basketSize = fFileManager->GetBasketSize();
ntupleDescription->fNtuple->set_basket_size(basketSize);
ntupleDescription->fIsNtupleOwner = false;
// ntuple object is deleted automatically when closing a file
fNtupleVector.push_back(ntupleDescription->fNtuple);
}
//_____________________________________________________________________________
void G4RootNtupleManager::CreateTNtupleFromBooking(
G4TNtupleDescription<tools::wroot::ntuple>* ntupleDescription)
RootNtupleDescription* ntupleDescription)
{
if ( fCreateMode == G4NtupleCreateMode::kNoMergeBeforeOpen ) {
if ( ! fMainNtupleManagers.size() ) {
// No merging
if ( ntupleDescription->fNtuple ) {
G4String inFunction = "G4RootNtupleManager::::CreateTNtupleFromBooking";
G4ExceptionDescription description;
description << "Cannot create ntuple. Ntuple already exists." << G4endl;
G4Exception(inFunction, "Analysis_W002", JustWarning, description);
return;
}
CreateTNtuple(ntupleDescription);
}
if ( fCreateMode == G4NtupleCreateMode::kMainBeforeOpen ) {
auto counter = 0;
// Create ntuple file from ntuple description
auto ntupleFile = fFileManager->CreateNtupleFile(ntupleDescription);
if ( ! ntupleFile ) {
G4String inFunction = "G4RootNtupleManager::::CreateTNtupleFromBooking";
G4ExceptionDescription description;
description << "Cannot create ntuple. Ntuple file does not exist." << G4endl;
G4Exception(inFunction, "Analysis_W002", JustWarning, description);
return;
}
auto directory = std::get<2>(*ntupleFile);
ntupleDescription->fNtuple
= new tools::wroot::ntuple(
*directory, ntupleDescription->fNtupleBooking, fRowWise);
auto basketSize = fFileManager->GetBasketSize();
ntupleDescription->fNtuple->set_basket_size(basketSize);
ntupleDescription->fIsNtupleOwner = false;
// ntuple object is deleted automatically when closing a file
fNtupleVector.push_back(ntupleDescription->fNtuple);
}
else {
// Merging activated
for ( auto manager : fMainNtupleManagers ) {
if ( ! manager->GetNtupleVector().size() ) {
// Create only once !!
manager->SetNtupleFile(fFileManager->GetNtupleFile(counter));
manager->SetNtupleDirectory(fFileManager->GetMainNtupleDirectory(counter++));
manager->CreateNtuplesFromBooking();
}
manager->CreateNtuple(ntupleDescription);
}
}
}
//_____________________________________________________________________________
void G4RootNtupleManager::FinishTNtuple(
G4TNtupleDescription<tools::wroot::ntuple>* ntupleDescription,
G4bool fromBooking)
RootNtupleDescription* /*ntupleDescription*/, G4bool /*fromBooking*/)
{
// Create main ntuples
// Set create mode if not yet defined
if ( ! fromBooking ) {
SetCreateMode();
}
// Create ntuple if file is open
if ( fCreateMode == G4NtupleCreateMode::kNoMergeAfterOpen ) {
CreateTNtuple(ntupleDescription);
}
// Create main ntuples if file is open
if ( fCreateMode == G4NtupleCreateMode::kMainAfterOpen ) {
auto counter = 0;
for ( auto manager : fMainNtupleManagers ) {
auto warn = true;
manager->SetNtupleFile(fFileManager->GetNtupleFile(counter));
manager->SetNtupleDirectory(fFileManager->GetMainNtupleDirectory(counter++));
manager->CreateNtuple(ntupleDescription->fNtupleBooking, warn);
}
}
// nothing to be done
}
//_____________________________________________________________________________
G4bool G4RootNtupleManager::Reset(G4bool deleteNtuple)
{
G4TNtupleManager<tools::wroot::ntuple> ::Reset(deleteNtuple);
G4TNtupleManager<tools::wroot::ntuple, G4RootFile> ::Reset(deleteNtuple);
// this will clear ntuple vector
if ( fCreateMode == G4NtupleCreateMode::kNoMergeAfterOpen ) {
// clear also ntuple description vector
fNtupleDescriptionVector.clear();
}
auto finalResult = true;
for ( auto manager : fMainNtupleManagers ) {
auto result = manager->Reset(false);
finalResult = result && finalResult;
@@ -239,7 +149,31 @@ G4bool G4RootNtupleManager::Merge()
}
//_____________________________________________________________________________
G4RootMainNtupleManager* G4RootNtupleManager::GetMainNtupleManager(G4int index) const
void G4RootNtupleManager::SetFileManager(std::shared_ptr<G4RootFileManager> fileManager)
{
fFileManager = fileManager;
for ( auto mainNtupleManager : fMainNtupleManagers) {
mainNtupleManager->SetFileManager(fileManager);
}
}
//_____________________________________________________________________________
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);
}
}
//_____________________________________________________________________________
std::shared_ptr<G4RootMainNtupleManager>
G4RootNtupleManager::GetMainNtupleManager(G4int index) const
{
if ( index < 0 || index >= G4int(fMainNtupleManagers.size()) ) {
G4String inFunction = "G4RootNtupleManager::::GetMainNtupleManager";