84 fNtupleManager(nullptr),
85 fSlaveNtupleManager(nullptr),
92 <<
"G4RootAnalysisManager already exists."
93 <<
"Cannot create another instance.";
94 G4Exception(
"G4RootAnalysisManager::G4RootAnalysisManager()",
108 auto mergeNtuples =
false;
128 G4int nofNtupleFiles)
134 ->
Message(
"set",
"ntuple merging mode",
"");
137 auto canMerge =
true;
141 if ( nofNtupleFiles > 0 ) {
144 <<
" " <<
"Merging ntuples is not applicable in sequential application."
146 <<
" " <<
"Setting was ignored.";
147 G4Exception(
"G4RootAnalysisManager::SetNtupleMergingMode()",
158 <<
" " <<
"Merging ntuples requires G4AnalysisManager instance on master."
160 <<
" " <<
"Setting was ignored.";
161 G4Exception(
"G4RootAnalysisManager::SetNtupleMergingMode()",
167 if ( ( ! mergeNtuples ) || ( ! canMerge ) ) {
169 mergingMode =
"G4NtupleMergeMode::kNone";
181 <<
" " <<
"Number of reduced files must be [0, nofThreads]."
183 <<
" " <<
"Cannot set " << nofNtupleFiles
186 <<
" " <<
"Ntuples will be merged in a single file.";
187 G4Exception(
"G4RootAnalysisManager::SetNtupleMergingMode()",
213 mergingMode =
"G4NtupleMergeMode::kMain";
216 mergingMode =
"G4NtupleMergeMode::kSlave";
223 ->
Message(
"set",
"ntuple merging mode", mergingMode);
269 if ( ! nofMainManagers ) nofMainManagers = 1;
280 auto mainNtupleManager
299 if ( ! nofMainManagers ) nofMainManagers = 1;
302 G4cout <<
"In GetNtupleFileNumber: "
315 if ( ! h1Vector.size() )
return true;
321 result =
WriteT(h1Vector, hnVector, directory,
"h1");
340 if ( ! h2Vector.size() )
return true;
346 result =
WriteT(h2Vector, hnVector, directory,
"h2");
365 if ( ! h3Vector.size() )
return true;
371 result =
WriteT(h3Vector, hnVector, directory,
"h3");
390 if ( ! p1Vector.size() )
return true;
396 result =
WriteT(p1Vector, hnVector, directory,
"p1");
415 if ( ! p2Vector.size() )
return true;
421 result =
WriteT(p2Vector, hnVector, directory,
"p2");
439 auto finalResult =
true;
452 finalResult = result && finalResult;
457 finalResult = result && finalResult;
473 auto finalResult =
true;
476 finalResult = finalResult && result;
481 finalResult = result && finalResult;
484 finalResult = finalResult && result;
496 auto finalResult =
true;
498 finalResult = finalResult && result;
509 finalResult = finalResult && result;
531 finalResult = finalResult && result;
553 auto finalResult =
true;
561 <<
" " <<
"No master G4RootAnalysisManager instance exists."
563 <<
" " <<
"Histogram/profile data will not be merged.";
570 finalResult = finalResult && result;
574 finalResult = finalResult && result;
578 finalResult = finalResult && result;
582 finalResult = finalResult && result;
586 finalResult = finalResult && result;
590 finalResult = finalResult && result;
595 finalResult = finalResult && result;
601 finalResult = finalResult && result;
610 auto finalResult =
true;
613 auto result =
Reset();
616 description <<
" " <<
"Resetting data failed";
620 finalResult = finalResult && result;
636 G4int nofNtupleFiles,
637 unsigned int basketSize)
virtual G4bool OpenFileImpl(const G4String &fileName) final
void CreateNtuplesFromMain()
void Message(const G4String &action, const G4String &object, const G4String &objectName, G4bool success=true) const
static G4RootAnalysisManager * fgMasterInstance
G4bool WriteT(const std::vector< T * > &htVector, const std::vector< G4HnInformation * > &hnVector, tools::wroot::directory *directory, const G4String &hnType)
std::ostringstream G4ExceptionDescription
void ClearNtupleManagers()
G4int GetNumberOfRunningWorkerThreads()
void SetFileManager(std::shared_ptr< G4RootFileManager > fileManager)
const char * name(G4int ptype)
static G4ThreadLocal G4RootAnalysisManager * fgInstance
virtual G4bool CloseFileImpl() final
void CreateNtuplesFromBooking()
static G4bool IsInstance()
#define G4MUTEX_INITIALIZER
const G4AnalysisVerbose * GetVerboseL2() const
void CreateNtupleManagers()
const G4AnalysisVerbose * GetVerboseL3() const
G4GLOB_DLL std::ostream G4cout
G4RootNtupleManager * fNtupleManager
G4RootMainNtupleManager * GetMainNtupleManager(G4int index) const
const G4AnalysisVerbose * GetVerboseL4() const
G4RootAnalysisManager(G4bool isMaster=true)
G4int GetNtupleFileNumber()
virtual ~G4RootAnalysisManager()
G4bool IsMultithreadedApplication()
void SetNtupleMergingMode(G4bool mergeNtuples, G4int nofNtupleFiles)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
void SetFileManager(std::shared_ptr< G4VFileManager > fileManager)
virtual G4bool WriteImpl() final
void SetNtupleMerging(G4bool mergeNtuples, G4int nofReducedNtupleFiles=0, unsigned int basketSize=fgkDefaultBasketSize)
static G4RootAnalysisManager * Instance()
static constexpr unsigned int fgkDefaultBasketSize
G4bool GetIsMaster() const
virtual G4bool Reset(G4bool deleteNtuple)
G4RootPNtupleManager * fSlaveNtupleManager
G4NtupleMergeMode fNtupleMergeMode
G4AnalysisManagerState fState
const G4AnalysisVerbose * GetVerboseL1() const
void SetNtupleManager(G4VNtupleManager *ntupleManager)
std::shared_ptr< G4RootFileManager > fFileManager
void SetNtupleDirectory(tools::wroot::directory *directory)
G4bool WriteAscii(const G4String &fileName)
virtual G4bool Merge() final