35#ifndef G4RootMpiPNtupleManager_h
36#define G4RootMpiPNtupleManager_h 1
38#include "G4BaseNtupleManager.hh"
40#include "G4AnalysisManagerState.hh"
41#include "G4AnalysisUtilities.hh"
44#include "tools/wroot/base_pntuple"
67 tools::impi* impi, G4int mpiRank, G4int destinationRank);
73 void SetFileManager(std::shared_ptr<G4RootFileManager> fileManager);
85 using G4BaseNtupleManager::FillNtupleIColumn;
86 using G4BaseNtupleManager::FillNtupleFColumn;
87 using G4BaseNtupleManager::FillNtupleDColumn;
88 using G4BaseNtupleManager::FillNtupleSColumn;
89 using G4BaseNtupleManager::AddNtupleRow;
91 virtual G4bool
FillNtupleIColumn(G4int ntupleId, G4int columnId, G4int value)
final;
92 virtual G4bool
FillNtupleFColumn(G4int ntupleId, G4int columnId, G4float value)
final;
93 virtual G4bool
FillNtupleDColumn(G4int ntupleId, G4int columnId, G4double value)
final;
97 virtual G4bool
Merge() final;
100 virtual G4bool
Reset() final;
101 virtual
void Clear() final;
104 G4bool
Delete(G4int
id) final;
109 virtual
void SetActivation(G4int ntupleId, G4bool activation) final;
122 tools::wroot::base_pntuple*
125 template <typename T>
129 static constexpr
std::string_view
fkClass {
"G4RootMpiPNtupleManager" };
151 G4int ntupleId, G4int columnId,
const std::string& value)
153 if ( fState.GetIsActivation() && ( !
GetActivation(ntupleId) ) ) {
154 G4cout <<
"Skipping FillNtupleIColumn for " << ntupleId << G4endl;
158 if ( IsVerbose(G4Analysis::kVL4) ) {
159 Message(G4Analysis::kVL4,
"fill",
"pntuple T column",
160 " ntupleId " + to_string(ntupleId) +
" columnId " + to_string(columnId) +
161 " value " + G4Analysis::ToString(value));
165 if ( ! ntuple )
return false;
167 auto index = columnId - fFirstNtupleColumnId;
168 if ( index < 0 || index >= G4int(ntuple->columns().size()) ) {
169 G4ExceptionDescription description;
170 description <<
" " <<
"ntupleId " << ntupleId
171 <<
" columnId " << columnId <<
" does not exist.";
172 G4Exception(
"G4RootNtupleManager::FillNtupleTColumn()",
173 "Analysis_W011", JustWarning, description);
177 auto icolumn = ntuple->columns()[index];
178 auto column =
dynamic_cast<tools::wroot::base_pntuple::column_string*
>(icolumn);
180 G4ExceptionDescription description;
181 description <<
" Column type does not match: "
182 <<
" ntupleId " << ntupleId
183 <<
" columnId " << columnId <<
" value " << value;
184 G4Exception(
"G4RootNtupleManager:FillNtupleColumn",
185 "Analysis_W011", JustWarning, description);
191 if ( IsVerbose(G4Analysis::kVL4) ) {
192 Message(G4Analysis::kVL4,
"done fill",
"pntuple T column",
193 " ntupleId " + to_string(ntupleId) +
194 " columnId " + to_string(columnId) +
204 G4int ntupleId, G4int columnId,
const T& value)
206 if ( fState.GetIsActivation() && ( !
GetActivation(ntupleId) ) ) {
207 G4cout <<
"Skipping FillNtupleIColumn for " << ntupleId << G4endl;
211 if ( IsVerbose(G4Analysis::kVL4) ) {
212 Message(G4Analysis::kVL4,
"fill",
"pntuple T column",
213 " ntupleId " + to_string(ntupleId) +
214 " columnId " + to_string(columnId) +
215 " value " + G4Analysis::ToString(value));
220 if ( ! ntuple )
return false;
223 auto index = columnId - fFirstNtupleColumnId;
224 if ( index < 0 || index >= G4int(ntuple->columns().size()) ) {
225 G4ExceptionDescription description;
226 description <<
" " <<
"ntupleId " << ntupleId
227 <<
" columnId " << columnId <<
" does not exist.";
228 G4Exception(
"G4TNtupleManager::FillNtupleTColumn()",
229 "Analysis_W011", JustWarning, description);
232 auto icolumn = ntuple->columns()[index];
235 auto column =
dynamic_cast<tools::wroot::base_pntuple::column<T>*
>(icolumn);
237 G4ExceptionDescription description;
238 description <<
" Column type does not match: "
239 <<
" ntupleId " << ntupleId
240 <<
" columnId " << columnId <<
" value " << value;
241 G4Exception(
"G4TNtupleManager:FillNtupleTColumn",
242 "Analysis_W011", JustWarning, description);
248 if ( IsVerbose(G4Analysis::kVL4) ) {
249 Message(G4Analysis::kVL4,
"done fill",
"pntuple T column",
250 " ntupleId " + to_string(ntupleId) +
251 " columnId " + to_string(columnId) +
252 " value " + G4Analysis::ToString(value));
virtual G4bool GetActivation(G4int ntupleId) const final
static constexpr std::string_view fkClass
void SetFileManager(std::shared_ptr< G4RootFileManager > fileManager)
virtual G4bool FillNtupleDColumn(G4int ntupleId, G4int columnId, G4double value) final
virtual G4bool Reset() final
G4bool GetNewCycle() const final
virtual G4bool AddNtupleRow(G4int ntupleId) final
virtual G4bool FillNtupleIColumn(G4int ntupleId, G4int columnId, G4int value) final
std::vector< tools::wroot::impi_ntuple * > fNtupleVector
tools::wroot::base_pntuple * GetNtupleInFunction(G4int id, G4String function, G4bool warn=true) const
void CreateNtuple(G4RootMpiPNtupleDescription *ntupleDescription)
virtual void Clear() final
G4RootMpiPNtupleDescription * GetNtupleDescriptionInFunction(G4int id, G4String function, G4bool warn=true) const
virtual G4bool FillNtupleSColumn(G4int ntupleId, G4int columnId, const G4String &value) final
virtual G4bool Merge() final
virtual G4bool FillNtupleFColumn(G4int ntupleId, G4int columnId, G4float value) final
virtual void SetActivation(G4bool activation) final
std::vector< G4RootMpiPNtupleDescription * > fNtupleDescriptionVector
std::shared_ptr< G4RootFileManager > fFileManager
virtual G4int GetNofNtuples() const final
G4bool FillNtupleTColumn(G4int ntupleId, G4int columnId, const T &value)
~G4RootMpiPNtupleManager()
void SetNewCycle(G4bool value) final
void CreateNtuplesFromBooking(const std::vector< G4NtupleBooking * > &ntupleBookings)