34 #include "tools/wroot/file"
35 #include "tools/wroot/ntuple"
49 fMainNtupleManager(main),
57 delete ntupleDescription;
73 G4String inFunction =
"G4RootPNtupleManager::";
74 inFunction += functionName;
76 description <<
" " <<
"ntuple " <<
id <<
" does not exist.";
90 if ( ! ntupleDescription )
return nullptr;
92 if ( ! ntupleDescription->fNtuple ) {
94 G4String inFunction =
"G4RootPNtupleManager::";
95 inFunction += functionName;
97 description <<
" " <<
"ntupleId " <<
id <<
" does not exist.";
102 return ntupleDescription->fNtuple;
106 tools::wroot::ntuple*
110 auto& mainNtupleVector
114 if ( index < 0 || index >=
G4int(mainNtupleVector.size()) ) {
116 G4String inFunction =
"G4RootPNtupleManager::";
117 inFunction += functionName;
119 description <<
" " <<
"main ntuple " <<
id <<
" does not exist.";
125 return mainNtupleVector[index];
135 tools::wroot::ntuple* mainNtuple)
140 ->
Message(
"create from main",
"pntuple", mainNtuple->name());
147 ntupleDescription->
fFile = rfile.get();
150 std::vector<tools::uint32> basketSizes;
151 tools_vforcit(tools::wroot::branch*, ntupleDescription->
fMainBranches, it) {
152 basketSizes.push_back((*it)->basket_size());
158 =
new tools::wroot::pntuple(
159 G4cout, rfile->byte_swap(), rfile->compression(),
160 directory->seek_directory(), basketSizes,
170 ->
Message(
"create from main",
"pntuple", mainNtuple->name());
193 auto& mainNtupleVector
197 for (
auto mainNtuple : mainNtupleVector ) {
199 auto& ntupleDescription
231 ntupleDescription->fNtupleBooking.set_name(name);
232 ntupleDescription->fNtupleBooking.set_title(title);
239 description << name <<
" ntupleId " << index +
fFirstId;
251 return CreateNtupleTColumn<int>(
name, vector);
258 return CreateNtupleTColumn<float>(
name, vector);
265 return CreateNtupleTColumn<double>(
name, vector);
272 return CreateNtupleTColumn<std::string>(
name,
nullptr);
286 return CreateNtupleTColumn<int>(ntupleId,
name, vector);
293 return CreateNtupleTColumn<float>(ntupleId,
name, vector);
301 return CreateNtupleTColumn<double>(ntupleId,
name, vector);
308 return CreateNtupleTColumn<std::string>(ntupleId,
name,
nullptr);
318 auto ntupleDescription
320 if ( ! ntupleDescription )
return;
323 if ( ! mainNtuple )
return;
333 return FillNtupleTColumn<int>(columnId, value);
340 return FillNtupleTColumn<float>(columnId, value);
347 return FillNtupleTColumn<double>(columnId, value);
354 return FillNtupleTColumn<std::string>(columnId, value);
367 return FillNtupleTColumn<int>(ntupleId, columnId, value);
374 return FillNtupleTColumn<float>(ntupleId, columnId, value);
381 return FillNtupleTColumn<double>(ntupleId, columnId, value);
388 return FillNtupleTColumn<std::string>(ntupleId, columnId, value);
402 description <<
" ntupleId " << ntupleId;
408 if ( ! ntupleDescription )
return false;
411 mutex toolsLock(lock);
413 = ntupleDescription->fNtuple
414 ->add_row(toolsLock, *ntupleDescription->fFile, ntupleDescription->fMainBranches);
418 description <<
" " <<
" ntupleId " << ntupleId
419 <<
"adding row has failed.";
420 G4Exception(
"G4RootPNtupleManager::AddNtupleRow()",
427 description <<
" ntupleId " << ntupleId;
441 if ( ! ntupleDescription->fActivation )
continue;
446 ->
Message(
"merge",
"pntuple", ntupleDescription->fNtupleBooking.name());
451 mutex toolsLock(lock);
453 = ntupleDescription->fNtuple
454 ->end_fill(toolsLock, *ntupleDescription->fFile, ntupleDescription->fMainBranches);
458 description <<
" " <<
" ntuple " << ntupleDescription->fNtupleBooking.name()
459 <<
"end fill has failed.";
464 delete ntupleDescription->fNtuple;
465 ntupleDescription->fNtuple =
nullptr;
470 ->
Message(
"merge",
"pntuple", ntupleDescription->fNtupleBooking.name());
482 if ( deleteNtuple ) {
483 delete ntupleDescription->fNtuple;
485 ntupleDescription->fNtuple =
nullptr;
499 ntupleDescription->fActivation = activation;
509 if ( ! ntupleDescription )
return;
511 ntupleDescription->fActivation = activation;
516 G4int ntupleId)
const
519 if ( ! ntupleDescription )
return false;
521 return ntupleDescription->fActivation;
void CreateNtuplesFromMain()
void Message(const G4String &action, const G4String &object, const G4String &objectName, G4bool success=true) const
std::vector< tools::wroot::pntuple * > fNtupleVector
std::ostringstream G4ExceptionDescription
std::vector< G4RootPNtupleDescription * > fNtupleDescriptionVector
virtual G4bool GetActivation(G4int ntupleId) const final
std::shared_ptr< tools::wroot::file > GetNtupleFile() const
virtual G4int CreateNtupleDColumn(const G4String &name, std::vector< double > *vector) override
virtual G4bool Reset(G4bool deleteNtuple) final
std::vector< tools::wroot::branch * > fMainBranches
const char * name(G4int ptype)
virtual void FinishNtuple() override
virtual G4bool AddNtupleRow() final
#define G4MUTEX_INITIALIZER
void CreateNtuple(G4RootPNtupleDescription *ntupleDescription, tools::wroot::ntuple *mainNtuple)
const G4AnalysisVerbose * GetVerboseL2() const
const std::vector< tools::wroot::ntuple * > & GetNtupleVector()
virtual void SetActivation(G4bool activation) final
const G4AnalysisVerbose * GetVerboseL3() const
G4GLOB_DLL std::ostream G4cout
virtual G4bool FillNtupleSColumn(G4int columnId, const G4String &value) final
tools::wroot::pntuple * GetNtupleInFunction(G4int id, G4String function, G4bool warn=true) const
const G4AnalysisVerbose * GetVerboseL4() const
virtual G4int GetNofNtuples() const final
G4RootMainNtupleManager * fMainNtupleManager
G4RootPNtupleDescription * GetNtupleDescriptionInFunction(G4int id, G4String function, G4bool warn=true) const
virtual G4int CreateNtupleSColumn(const G4String &name) override
virtual G4bool IsEmpty() const final
G4PNtupleCreateMode fCreateMode
int main(int argc, char **argv)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
tools::wroot::file * fFile
tools::ntuple_booking fNtupleBooking
virtual G4int CreateNtupleIColumn(const G4String &name, std::vector< int > *vector) override
tools::wroot::directory * GetNtupleDirectory() const
virtual G4bool FillNtupleFColumn(G4int columnId, G4float value) final
tools::wroot::ntuple * GetMainNtupleInFunction(G4int id, G4String function, G4bool warn=true) const
virtual G4int CreateNtupleFColumn(const G4String &name, std::vector< float > *vector) override
virtual G4bool FillNtupleDColumn(G4int columnId, G4double value) final
G4RootPNtupleManager(G4RootMainNtupleManager *main, const G4AnalysisManagerState &state)
virtual G4bool FillNtupleIColumn(G4int columnId, G4int value) final
tools::wroot::pntuple * fNtuple
G4bool GetIsActivation() const
const G4AnalysisManagerState & fState
virtual G4bool Merge() final