Import Geant4 11.1.0 source tree
This commit is contained in:
@@ -53,6 +53,7 @@ G4RootMpiAnalysisManager::G4RootMpiAnalysisManager(G4bool /*isMaster*/)
|
||||
|
||||
// Ntuple file manager
|
||||
fNtupleFileManager = std::make_shared<G4RootMpiNtupleFileManager>(fState);
|
||||
SetNtupleFileManager(fNtupleFileManager);
|
||||
fNtupleFileManager->SetFileManager(fFileManager);
|
||||
fNtupleFileManager->SetBookingManager(fNtupleBookingManager);
|
||||
}
|
||||
@@ -99,62 +100,56 @@ G4bool G4RootMpiAnalysisManager::OpenFileImpl(const G4String& fileName)
|
||||
SetNtupleManager(fNtupleFileManager->CreateNtupleManager());
|
||||
}
|
||||
|
||||
auto finalResult = true;
|
||||
auto result = true;
|
||||
|
||||
// Open file
|
||||
// In difference from base class a file is open also on slave ranks
|
||||
auto result = fFileManager->OpenFile(fileName);
|
||||
finalResult = finalResult && result;
|
||||
result &= fFileManager->OpenFile(fileName);
|
||||
|
||||
// Open ntuple file(s) and create ntuples from bookings
|
||||
result = fNtupleFileManager->ActionAtOpenFile(fFileManager->GetFullFileName());
|
||||
finalResult = finalResult && result;
|
||||
result &= fNtupleFileManager->ActionAtOpenFile(fFileManager->GetFullFileName());
|
||||
|
||||
return finalResult;
|
||||
return result;
|
||||
}
|
||||
|
||||
//_____________________________________________________________________________
|
||||
G4bool G4RootMpiAnalysisManager::WriteImpl()
|
||||
{
|
||||
|
||||
auto finalResult = true;
|
||||
auto result = true;
|
||||
|
||||
// Call base class method
|
||||
auto result = G4RootAnalysisManager::WriteImpl();
|
||||
finalResult = finalResult && result;
|
||||
result &= G4ToolsAnalysisManager::WriteImpl();
|
||||
|
||||
// Write file also on Slave
|
||||
// (skipped in base class)
|
||||
if ( fNtupleFileManager->GetMergeMode() == G4NtupleMergeMode::kSlave ) {
|
||||
// write all open files
|
||||
result = fFileManager->WriteFiles();
|
||||
finalResult = finalResult && result;
|
||||
result &= fFileManager->WriteFiles();
|
||||
}
|
||||
|
||||
Message(kVL2, "write", "slave files", "", finalResult);
|
||||
Message(kVL2, "write", "slave files", "", result);
|
||||
|
||||
return finalResult;
|
||||
return result;
|
||||
}
|
||||
|
||||
//_____________________________________________________________________________
|
||||
G4bool G4RootMpiAnalysisManager::CloseFileImpl(G4bool reset)
|
||||
{
|
||||
auto finalResult = true;
|
||||
auto result = true;
|
||||
|
||||
// Call base class method
|
||||
auto result = G4RootAnalysisManager::CloseFileImpl(reset);
|
||||
finalResult = finalResult && result;
|
||||
result &= G4RootAnalysisManager::CloseFileImpl(reset);
|
||||
|
||||
// Close file also on Slave
|
||||
// (skipped in base class)
|
||||
if ( fNtupleFileManager->GetMergeMode() == G4NtupleMergeMode::kSlave ) {
|
||||
// close all open files
|
||||
result = fFileManager->CloseFiles();
|
||||
finalResult = finalResult && result;
|
||||
result &= fFileManager->CloseFiles();
|
||||
}
|
||||
|
||||
Message(kVL2, "close", "slave files", "", finalResult);
|
||||
Message(kVL2, "close", "slave files", "", result);
|
||||
|
||||
return finalResult;
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
@@ -184,8 +184,6 @@ std::shared_ptr<G4VNtupleManager> G4RootMpiNtupleFileManager::CreateNtupleManage
|
||||
//_____________________________________________________________________________
|
||||
G4bool G4RootMpiNtupleFileManager::ActionAtOpenFile(const G4String& fileName)
|
||||
{
|
||||
auto finalResult = true;
|
||||
|
||||
// No MPI merging, call base class
|
||||
if ( fNtupleMergeMode == G4NtupleMergeMode::kNone ) {
|
||||
return G4RootNtupleFileManager::ActionAtOpenFile(fileName);
|
||||
@@ -218,7 +216,7 @@ G4bool G4RootMpiNtupleFileManager::ActionAtOpenFile(const G4String& fileName)
|
||||
fNtupleBooked = true;
|
||||
}
|
||||
|
||||
return finalResult;
|
||||
return true;
|
||||
}
|
||||
|
||||
//_____________________________________________________________________________
|
||||
@@ -229,7 +227,7 @@ G4bool G4RootMpiNtupleFileManager::ActionAtWrite()
|
||||
return G4RootNtupleFileManager::ActionAtWrite();
|
||||
}
|
||||
|
||||
auto finalResult = true;
|
||||
auto result = true;
|
||||
|
||||
G4String ntupleType;
|
||||
if ( fNtupleMergeMode == G4NtupleMergeMode::kMain ) ntupleType = "main ntuples";
|
||||
@@ -238,50 +236,32 @@ G4bool G4RootMpiNtupleFileManager::ActionAtWrite()
|
||||
Message(kVL4, "merge", ntupleType);
|
||||
|
||||
if ( fNtupleMergeMode == G4NtupleMergeMode::kMain ) {
|
||||
auto result = fNtupleManager->Merge();
|
||||
finalResult = result && finalResult;
|
||||
result &= fNtupleManager->Merge();
|
||||
}
|
||||
|
||||
if ( fNtupleMergeMode == G4NtupleMergeMode::kSlave ) {
|
||||
auto result = fMpiSlaveNtupleManager->Merge();
|
||||
finalResult = result && finalResult;
|
||||
result &= fMpiSlaveNtupleManager->Merge();
|
||||
}
|
||||
|
||||
Message(kVL1, "merge", ntupleType, "", finalResult);
|
||||
Message(kVL1, "merge", ntupleType, "", result);
|
||||
|
||||
return finalResult;
|
||||
return result;
|
||||
}
|
||||
|
||||
//_____________________________________________________________________________
|
||||
G4bool G4RootMpiNtupleFileManager::ActionAtCloseFile(G4bool reset)
|
||||
{
|
||||
G4bool G4RootMpiNtupleFileManager::ActionAtCloseFile()
|
||||
{
|
||||
// No MPI merging, call base class
|
||||
if ( fNtupleMergeMode == G4NtupleMergeMode::kNone ) {
|
||||
return G4RootNtupleFileManager::ActionAtCloseFile(reset);
|
||||
return G4RootNtupleFileManager::ActionAtCloseFile();
|
||||
}
|
||||
|
||||
auto finalResult = true;
|
||||
|
||||
// reset data
|
||||
if ( reset ) {
|
||||
auto result = Reset();
|
||||
if ( ! result ) {
|
||||
G4ExceptionDescription description;
|
||||
description << " " << "Resetting data failed";
|
||||
G4Exception("G4RootNtupleFileManager::Write()",
|
||||
"Analysis_W021", JustWarning, description);
|
||||
}
|
||||
finalResult = finalResult && result;
|
||||
if ( fNtupleMergeMode == G4NtupleMergeMode::kSlave) {
|
||||
fMpiSlaveNtupleManager->SetNewCycle(false);
|
||||
return true;
|
||||
}
|
||||
|
||||
// close files
|
||||
if ( fNtupleMergeMode != G4NtupleMergeMode::kSlave ) {
|
||||
auto result = CloseNtupleFiles();
|
||||
finalResult = finalResult && result;
|
||||
}
|
||||
|
||||
// MT not yet supported - no files clean-up
|
||||
return finalResult;
|
||||
return CloseNtupleFiles();
|
||||
}
|
||||
|
||||
//_____________________________________________________________________________
|
||||
@@ -294,17 +274,15 @@ G4bool G4RootMpiNtupleFileManager::Reset()
|
||||
return G4RootNtupleFileManager::Reset();
|
||||
}
|
||||
|
||||
auto finalResult = true;
|
||||
auto result = true;
|
||||
|
||||
if ( fNtupleMergeMode == G4NtupleMergeMode::kMain ) {
|
||||
auto result = fNtupleManager->Reset();
|
||||
finalResult = result && finalResult;
|
||||
result &= fNtupleManager->Reset();
|
||||
}
|
||||
|
||||
if ( fNtupleMergeMode == G4NtupleMergeMode::kSlave ) {
|
||||
auto result = fMpiSlaveNtupleManager->Reset(false);
|
||||
finalResult = result && finalResult;
|
||||
result &= fMpiSlaveNtupleManager->Reset(false);
|
||||
}
|
||||
|
||||
return finalResult;
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -76,7 +76,7 @@ G4bool G4RootMpiNtupleManager::Send(G4int id, RootNtupleDescription* ntupleDescr
|
||||
// G4cout << "ntuple: " << ntupleDescription->fNtuple << G4endl;
|
||||
|
||||
// Get ntuple
|
||||
auto ntuple = ntupleDescription->fNtuple;
|
||||
auto ntuple = ntupleDescription->GetNtuple();
|
||||
|
||||
// Get basket sizes
|
||||
std::vector<tools::wroot::branch*> mainBranches;
|
||||
@@ -166,7 +166,7 @@ G4bool G4RootMpiNtupleManager::InitializeRanks()
|
||||
for ( auto ntupleDescription : fNtupleDescriptionVector ) {
|
||||
|
||||
// Do not create ntuple if it is inactivated
|
||||
if ( fState.GetIsActivation() && ( ! ntupleDescription->fActivation ) ) continue;
|
||||
if ( fState.GetIsActivation() && ( ! ntupleDescription->GetActivation() ) ) continue;
|
||||
|
||||
auto result = Send(counter++, ntupleDescription);
|
||||
finalResult = finalResult && result;
|
||||
@@ -329,10 +329,10 @@ G4bool G4RootMpiNtupleManager::Merge()
|
||||
for ( auto ntupleDescription : fNtupleDescriptionVector ) {
|
||||
|
||||
// Do not create ntuple if it is inactivated
|
||||
if ( fState.GetIsActivation() && ( ! ntupleDescription->fActivation ) ) continue;
|
||||
if ( fState.GetIsActivation() && ( ! ntupleDescription->GetActivation() ) ) continue;
|
||||
|
||||
// G4cout << "Go to call merge_number_of_entries" << G4endl;
|
||||
ntupleDescription->fNtuple->merge_number_of_entries();
|
||||
ntupleDescription->GetNtuple()->merge_number_of_entries();
|
||||
}
|
||||
|
||||
return finalResult;
|
||||
|
||||
@@ -116,7 +116,7 @@ tools::wroot::base_pntuple* G4RootMpiPNtupleManager::GetNtupleInFunction(
|
||||
void G4RootMpiPNtupleManager::CreateNtuple(G4RootMpiPNtupleDescription* ntupleDescription)
|
||||
{
|
||||
Message(kVL4, "create from booking", "mpi pntuple",
|
||||
ntupleDescription->fDescription.fNtupleBooking.name());
|
||||
ntupleDescription->fDescription.GetNtupleBooking().name());
|
||||
|
||||
// Wait for the ntuple data from main
|
||||
|
||||
@@ -206,27 +206,27 @@ void G4RootMpiPNtupleManager::CreateNtuple(G4RootMpiPNtupleDescription* ntupleDe
|
||||
tools::wroot::mpi_ntuple_row_wise* ntuple
|
||||
= new tools::wroot::mpi_ntuple_row_wise(
|
||||
mainNtupleId, G4cout, byteSwap, compression, seekDirectory,
|
||||
basketSize, ntupleDescription->fDescription.fNtupleBooking, verbose);
|
||||
basketSize, ntupleDescription->fDescription.GetNtupleBooking(), verbose);
|
||||
ntupleDescription->fNtuple = ntuple;
|
||||
ntupleDescription->fBasePNtuple = ntuple;
|
||||
} else {
|
||||
tools::wroot::mpi_ntuple_column_wise* ntuple
|
||||
= new tools::wroot::mpi_ntuple_column_wise(
|
||||
mainNtupleId, G4cout, byteSwap, compression, seekDirectory,
|
||||
basketSizes, ntupleDescription->fDescription.fNtupleBooking,
|
||||
basketSizes, ntupleDescription->fDescription.GetNtupleBooking(),
|
||||
rowMode, basketEntries, verbose);
|
||||
ntupleDescription->fNtuple = ntuple;
|
||||
ntupleDescription->fBasePNtuple = ntuple;
|
||||
}
|
||||
|
||||
ntupleDescription->fDescription.fIsNtupleOwner = true;
|
||||
ntupleDescription->fDescription.SetIsNtupleOwner(true);
|
||||
ntupleDescription->fImpi = fImpi;
|
||||
// should be not needed
|
||||
// pntuple object is not deleted automatically
|
||||
fNtupleVector.push_back(ntupleDescription->fNtuple);
|
||||
|
||||
Message(kVL3, "create from booking", "mpi pntuple",
|
||||
ntupleDescription->fDescription.fNtupleBooking.name());
|
||||
ntupleDescription->fDescription.GetNtupleBooking().name());
|
||||
}
|
||||
|
||||
//_____________________________________________________________________________
|
||||
@@ -252,13 +252,13 @@ void G4RootMpiPNtupleManager::CreateNtuplesFromBooking(
|
||||
for ( auto ntupleDescription : fNtupleDescriptionVector ) {
|
||||
|
||||
// Do not create ntuple if it is inactivated
|
||||
if ( fState.GetIsActivation() && ( ! ntupleDescription->fDescription.fActivation ) ) continue;
|
||||
if ( fState.GetIsActivation() && ( ! ntupleDescription->fDescription.GetActivation() ) ) continue;
|
||||
|
||||
// Do not create ntuple if it already exists
|
||||
if ( ntupleDescription->fNtuple ) continue;
|
||||
|
||||
Message(kVL4, "create from booking", "mpi pntuple",
|
||||
ntupleDescription->fDescription.fNtupleBooking.name());
|
||||
ntupleDescription->fDescription.GetNtupleBooking().name());
|
||||
|
||||
// create ntuple
|
||||
CreateNtuple(ntupleDescription);
|
||||
@@ -268,7 +268,7 @@ void G4RootMpiPNtupleManager::CreateNtuplesFromBooking(
|
||||
// FinishTNtuple(ntupleDescription);
|
||||
|
||||
Message(kVL3, "create from booking", "mpi pntuple",
|
||||
ntupleDescription->fDescription.fNtupleBooking.name());
|
||||
ntupleDescription->fDescription.GetNtupleBooking().name());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -353,13 +353,13 @@ G4bool G4RootMpiPNtupleManager::Merge()
|
||||
for ( auto ntupleDescription : fNtupleDescriptionVector) {
|
||||
|
||||
// skip inactivated ntuples
|
||||
if ( ! ntupleDescription->fDescription.fActivation ) continue;
|
||||
if ( ! ntupleDescription->fDescription.GetActivation() ) continue;
|
||||
|
||||
// skip if ntuple was already merged and deleted
|
||||
// (this happend when the main rank re-opens a new file for merged data)
|
||||
if ( ! ntupleDescription->fNtuple ) continue;
|
||||
|
||||
Message(kVL4, "merge", "pntuple", ntupleDescription->fDescription.fNtupleBooking.name());
|
||||
Message(kVL4, "merge", "pntuple", ntupleDescription->fDescription.GetNtupleBooking().name());
|
||||
|
||||
// G4cout << "call end_fill " << fImpi
|
||||
// << " to rank " << ntupleDescription->fMainNtupleRank
|
||||
@@ -370,7 +370,7 @@ G4bool G4RootMpiPNtupleManager::Merge()
|
||||
|
||||
if ( ! result ) {
|
||||
G4ExceptionDescription description;
|
||||
description << " " << " ntuple " << ntupleDescription->fDescription.fNtupleBooking.name()
|
||||
description << " " << " ntuple " << ntupleDescription->fDescription.GetNtupleBooking().name()
|
||||
<< "end fill has failed.";
|
||||
G4Exception("G4RootMpiPNtupleManager::Merge()",
|
||||
"Analysis_W002", JustWarning, description);
|
||||
@@ -379,12 +379,28 @@ G4bool G4RootMpiPNtupleManager::Merge()
|
||||
delete ntupleDescription->fNtuple;
|
||||
ntupleDescription->fNtuple = nullptr;
|
||||
|
||||
Message(kVL3, "merge", "pntuple", ntupleDescription->fDescription.fNtupleBooking.name());
|
||||
Message(kVL3, "merge", "pntuple", ntupleDescription->fDescription.GetNtupleBooking().name());
|
||||
}
|
||||
|
||||
return finalResult;
|
||||
}
|
||||
|
||||
//_____________________________________________________________________________
|
||||
G4bool G4RootMpiPNtupleManager::Reset()
|
||||
{
|
||||
// Reset ntuple description, this will delete ntuple if present and
|
||||
// we have its ownership.
|
||||
// The ntuples will be recreated with new cycle or new open file.
|
||||
|
||||
for ( auto ntupleDescription : fNtupleDescriptionVector ) {
|
||||
ntupleDescription->fDescription.Reset();
|
||||
}
|
||||
|
||||
fNtupleVector.clear();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
//_____________________________________________________________________________
|
||||
void G4RootMpiPNtupleManager::Clear()
|
||||
{
|
||||
@@ -420,7 +436,7 @@ void G4RootMpiPNtupleManager::SetActivation(
|
||||
G4bool activation)
|
||||
{
|
||||
for ( auto ntupleDescription : fNtupleDescriptionVector ) {
|
||||
ntupleDescription->fDescription.fActivation = activation;
|
||||
ntupleDescription->fDescription.SetActivation(activation);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -432,7 +448,7 @@ void G4RootMpiPNtupleManager::SetActivation(
|
||||
auto ntupleDescription = GetNtupleDescriptionInFunction(ntupleId, "SetActivation");
|
||||
if ( ! ntupleDescription ) return;
|
||||
|
||||
ntupleDescription->fDescription.fActivation = activation;
|
||||
ntupleDescription->fDescription.SetActivation(activation);
|
||||
}
|
||||
|
||||
//_____________________________________________________________________________
|
||||
@@ -442,7 +458,19 @@ G4bool G4RootMpiPNtupleManager::GetActivation(
|
||||
auto ntupleDescription = GetNtupleDescriptionInFunction(ntupleId, "GetActivation");
|
||||
if ( ! ntupleDescription ) return false;
|
||||
|
||||
return ntupleDescription->fDescription.fActivation;
|
||||
return ntupleDescription->fDescription.GetActivation();
|
||||
}
|
||||
|
||||
//_____________________________________________________________________________
|
||||
void G4RootMpiPNtupleManager::SetNewCycle(G4bool value)
|
||||
{
|
||||
fNewCycle = value;
|
||||
}
|
||||
|
||||
//_____________________________________________________________________________
|
||||
G4bool G4RootMpiPNtupleManager::GetNewCycle() const
|
||||
{
|
||||
return fNewCycle;
|
||||
}
|
||||
|
||||
//_____________________________________________________________________________
|
||||
@@ -450,3 +478,10 @@ G4int G4RootMpiPNtupleManager::GetNofNtuples() const
|
||||
{
|
||||
return fNtupleVector.size();
|
||||
}
|
||||
|
||||
//_____________________________________________________________________________
|
||||
G4bool G4RootMpiPNtupleManager::List(std::ostream& /*output*/, G4bool /*onlyIfActive*/)
|
||||
{
|
||||
Warn("Not implemented.", fkClass, "List");
|
||||
return false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user