Import Geant4 10.7.0 source tree
This commit is contained in:
@@ -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";
|
||||
|
||||
Reference in New Issue
Block a user