Geant4-11
Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | Private Attributes | Static Private Attributes | Friends
G4RootNtupleFileManager Class Reference

#include <G4RootNtupleFileManager.hh>

Inheritance diagram for G4RootNtupleFileManager:
G4VNtupleFileManager

Public Member Functions

virtual G4bool ActionAtCloseFile (G4bool reset) override
 
virtual G4bool ActionAtOpenFile (const G4String &fileName) override
 
virtual G4bool ActionAtWrite () override
 
virtual std::shared_ptr< G4VNtupleManagerCreateNtupleManager () override
 
 G4RootNtupleFileManager ()=delete
 
 G4RootNtupleFileManager (const G4AnalysisManagerState &state)
 
G4String GetFileType () const
 
G4NtupleMergeMode GetMergeMode () const
 
std::shared_ptr< G4RootNtupleManagerGetNtupleManager () const
 
virtual G4bool IsNtupleMergingSupported () const override
 
virtual G4bool Reset () override
 
virtual void SetBasketEntries (unsigned int basketEntries) override
 
virtual void SetBasketSize (unsigned int basketSize) override
 
virtual void SetBookingManager (std::shared_ptr< G4NtupleBookingManager > bookingManager)
 
void SetFileManager (std::shared_ptr< G4RootFileManager > fileManager)
 
virtual void SetNtupleMerging (G4bool mergeNtuples, G4int nofReducedNtupleFiles=0) override
 
virtual void SetNtupleRowWise (G4bool rowWise, G4bool rowMode=true) override
 
virtual ~G4RootNtupleFileManager ()
 

Protected Member Functions

void Message (G4int level, const G4String &action, const G4String &objectType, const G4String &objectName="", G4bool success=true) const
 

Protected Attributes

std::shared_ptr< G4NtupleBookingManagerfBookingManager { nullptr }
 
G4String fFileType
 
const G4AnalysisManagerStatefState
 

Private Member Functions

G4bool CloseNtupleFiles ()
 
G4int GetNtupleFileNumber ()
 
void SetNtupleMergingMode (G4bool mergeNtuples, G4int nofNtupleFiles)
 

Private Attributes

std::shared_ptr< G4RootFileManagerfFileManager { nullptr }
 
G4bool fIsInitialized { false }
 
G4int fNofNtupleFiles { 0 }
 
std::shared_ptr< G4RootNtupleManagerfNtupleManager { nullptr }
 
G4NtupleMergeMode fNtupleMergeMode { G4NtupleMergeMode::kNone }
 
G4bool fNtupleRowMode { true }
 
G4bool fNtupleRowWise { false }
 
std::shared_ptr< G4RootPNtupleManagerfSlaveNtupleManager { nullptr }
 

Static Private Attributes

static G4RootNtupleFileManagerfgMasterInstance = nullptr
 
static constexpr std::string_view fkClass { "G4RootNtupleFileManager" }
 

Friends

class G4RootMpiNtupleFileManager
 

Detailed Description

Definition at line 51 of file G4RootNtupleFileManager.hh.

Constructor & Destructor Documentation

◆ G4RootNtupleFileManager() [1/2]

G4RootNtupleFileManager::G4RootNtupleFileManager ( const G4AnalysisManagerState state)
explicit

Definition at line 50 of file G4RootNtupleFileManager.cc.

51 : G4VNtupleFileManager(state, "root")
52{
54
55 // Do not merge ntuples by default
56 // Merging may require user code migration as analysis manager
57 // must be created both on master and workers.
58 auto mergeNtuples = false;
60}
static G4RootNtupleFileManager * fgMasterInstance
void SetNtupleMergingMode(G4bool mergeNtuples, G4int nofNtupleFiles)
G4VNtupleFileManager()=delete
G4bool IsMasterThread()
Definition: G4Threading.cc:124

References fgMasterInstance, fNofNtupleFiles, G4Threading::IsMasterThread(), and SetNtupleMergingMode().

◆ G4RootNtupleFileManager() [2/2]

G4RootNtupleFileManager::G4RootNtupleFileManager ( )
delete

◆ ~G4RootNtupleFileManager()

G4RootNtupleFileManager::~G4RootNtupleFileManager ( )
virtual

Definition at line 63 of file G4RootNtupleFileManager.cc.

64{
65 if ( fState.GetIsMaster() ) fgMasterInstance = nullptr;
66}
const G4AnalysisManagerState & fState

References fgMasterInstance, G4VNtupleFileManager::fState, and G4AnalysisManagerState::GetIsMaster().

Member Function Documentation

◆ ActionAtCloseFile()

G4bool G4RootNtupleFileManager::ActionAtCloseFile ( G4bool  reset)
overridevirtual

Implements G4VNtupleFileManager.

Definition at line 346 of file G4RootNtupleFileManager.cc.

347{
348 auto result = true;
349
350 // close files
352 result &= CloseNtupleFiles();
353 }
354
355 if ( ! reset ) {
356 // The ntuples must be always reset when closing file)
357 if ( ! Reset() ) {
358 Warn("Resetting data failed", fkClass, "ActionAtCloseFile");
359 result = false;
360 }
361 }
362
363 return result;
364}
static constexpr std::string_view fkClass
virtual G4bool Reset() override
void Warn(const G4String &message, const std::string_view inClass, const std::string_view inFunction)

References CloseNtupleFiles(), fkClass, fNtupleMergeMode, kSlave, Reset(), and G4Analysis::Warn().

◆ ActionAtOpenFile()

G4bool G4RootNtupleFileManager::ActionAtOpenFile ( const G4String fileName)
overridevirtual

Implements G4VNtupleFileManager.

Definition at line 288 of file G4RootNtupleFileManager.cc.

289{
290 // Check if fNtupleBookingManager is set
291
294
295 G4String objectType = "analysis file";
297 objectType = "main analysis file";
298 }
299 Message(kVL4, "open", objectType, fileName);
300
301 // Creating files is triggered from CreateNtuple
302 fNtupleManager->CreateNtuplesFromBooking(
303 fBookingManager->GetNtupleBookingVector());
304
305 Message(kVL1, "open", objectType, fileName);
306 }
307
308 // Creating ntuples from main is triggered from the first Fill call
309 // if ( fNtupleMergeMode == G4NtupleMergeMode::kSlave ) {
310 // // G4cout << "Going to create slave ntuples from main" << G4endl;
311 // fSlaveNtupleManager->CreateNtuplesFromMain();
312 // }
313
314 return true;
315}
std::shared_ptr< G4RootNtupleManager > fNtupleManager
std::shared_ptr< G4NtupleBookingManager > fBookingManager
void Message(G4int level, const G4String &action, const G4String &objectType, const G4String &objectName="", G4bool success=true) const
constexpr G4int kVL1
constexpr G4int kVL4

References G4VNtupleFileManager::fBookingManager, fNtupleManager, fNtupleMergeMode, kMain, kNone, G4Analysis::kVL1, G4Analysis::kVL4, and G4VNtupleFileManager::Message().

◆ ActionAtWrite()

G4bool G4RootNtupleFileManager::ActionAtWrite ( )
overridevirtual

Implements G4VNtupleFileManager.

Definition at line 318 of file G4RootNtupleFileManager.cc.

319{
321 return true;
322 }
323
324 auto result = true;
325
326 G4String ntupleType;
327 if ( fNtupleMergeMode == G4NtupleMergeMode::kMain ) ntupleType = "main ntuples";
328 if ( fNtupleMergeMode == G4NtupleMergeMode::kSlave ) ntupleType = "slave ntuples";
329
330 Message(kVL4, "merge", ntupleType);
331
333 result &= fNtupleManager->Merge();
334 }
335
337 result &= fSlaveNtupleManager->Merge();
338 }
339
340 Message(kVL1, "merge", ntupleType, "", result);
341
342 return result;
343}
std::shared_ptr< G4RootPNtupleManager > fSlaveNtupleManager

References fNtupleManager, fNtupleMergeMode, fSlaveNtupleManager, kMain, kNone, kSlave, G4Analysis::kVL1, G4Analysis::kVL4, and G4VNtupleFileManager::Message().

◆ CloseNtupleFiles()

G4bool G4RootNtupleFileManager::CloseNtupleFiles ( )
private

Definition at line 143 of file G4RootNtupleFileManager.cc.

144{
145 // Close ntuple files
146
147 auto result = true;
148 auto ntupleVector = fNtupleManager->GetNtupleDescriptionVector();
149 for ( auto ntupleDescription : ntupleVector) {
150 result &= fFileManager->CloseNtupleFile(ntupleDescription);
151 }
152
153 return result;
154}
std::shared_ptr< G4RootFileManager > fFileManager

References fFileManager, and fNtupleManager.

Referenced by ActionAtCloseFile().

◆ CreateNtupleManager()

std::shared_ptr< G4VNtupleManager > G4RootNtupleFileManager::CreateNtupleManager ( )
overridevirtual

Implements G4VNtupleFileManager.

Definition at line 223 of file G4RootNtupleFileManager.cc.

224{
225// Create and return ntuple manager.
226// If ntuple merging is activated, managers of different types are created
227// on master/worker.
228
229 Message(kVL4, "create", "ntuple manager");
230
231 // Check that file manager and anaysis manager are set !
232
233 std::shared_ptr<G4VNtupleManager> activeNtupleManager = nullptr;
234 switch ( fNtupleMergeMode )
235 {
238 = make_shared<G4RootNtupleManager>(
240 fNtupleManager->SetFileManager(fFileManager);
241 activeNtupleManager = fNtupleManager;
242 break;
243
245 G4int nofMainManagers = fNofNtupleFiles;
246 if ( ! nofMainManagers ) nofMainManagers = 1;
247 // create one manager if merging required into the histos & profiles files
249 = make_shared<G4RootNtupleManager>(
251 fNtupleManager->SetFileManager(fFileManager);
252 activeNtupleManager = fNtupleManager;
253 break;
254 }
255
258 // The master class is used only in Get* functions
259 auto mainNtupleManager
260 = fNtupleManager->GetMainNtupleManager(GetNtupleFileNumber());
262 = make_shared<G4RootPNtupleManager>(
264 activeNtupleManager = fSlaveNtupleManager;
265 break;
266 }
267
268 G4String mergeMode;
269 switch ( fNtupleMergeMode ) {
271 mergeMode = "";
272 break;
274 mergeMode = "main ";
275 break;
277 mergeMode = "slave ";
278 break;
279 }
280 Message(kVL3, "create", mergeMode + "ntuple manager");
281
282 fIsInitialized = true;
283
284 return activeNtupleManager;
285}
int G4int
Definition: G4Types.hh:85
constexpr G4int kVL3

References G4VNtupleFileManager::fBookingManager, fFileManager, fgMasterInstance, fIsInitialized, fNofNtupleFiles, fNtupleManager, fNtupleMergeMode, fNtupleRowMode, fNtupleRowWise, fSlaveNtupleManager, G4VNtupleFileManager::fState, GetNtupleFileNumber(), kMain, kNone, kSlave, G4Analysis::kVL3, G4Analysis::kVL4, and G4VNtupleFileManager::Message().

◆ GetFileType()

G4String G4VNtupleFileManager::GetFileType ( ) const
inlineinherited

Definition at line 107 of file G4VNtupleFileManager.hh.

107 {
108 return fFileType;
109}

References G4VNtupleFileManager::fFileType.

◆ GetMergeMode()

G4NtupleMergeMode G4RootNtupleFileManager::GetMergeMode ( ) const
inline

Definition at line 107 of file G4RootNtupleFileManager.hh.

108{ return fNtupleMergeMode; }

References fNtupleMergeMode.

◆ GetNtupleFileNumber()

G4int G4RootNtupleFileManager::GetNtupleFileNumber ( )
private

Definition at line 131 of file G4RootNtupleFileManager.cc.

132{
133 if ( ! fNofNtupleFiles ) return 0;
134
135 G4int nofMainManagers = fNofNtupleFiles;
136 if ( ! nofMainManagers ) nofMainManagers = 1;
137
138 auto fileNumber = G4Threading::G4GetThreadId() % nofMainManagers;
139 return fileNumber;
140}
G4int G4GetThreadId()
Definition: G4Threading.cc:122

References fNofNtupleFiles, and G4Threading::G4GetThreadId().

Referenced by CreateNtupleManager().

◆ GetNtupleManager()

std::shared_ptr< G4RootNtupleManager > G4RootNtupleFileManager::GetNtupleManager ( ) const
inline

Definition at line 113 of file G4RootNtupleFileManager.hh.

114{ return fNtupleManager; }

References fNtupleManager.

◆ IsNtupleMergingSupported()

G4bool G4RootNtupleFileManager::IsNtupleMergingSupported ( ) const
inlineoverridevirtual

Reimplemented from G4VNtupleFileManager.

Definition at line 110 of file G4RootNtupleFileManager.hh.

111{ return true; }

◆ Message()

void G4VNtupleFileManager::Message ( G4int  level,
const G4String action,
const G4String objectType,
const G4String objectName = "",
G4bool  success = true 
) const
inlineprotectedinherited

Definition at line 111 of file G4VNtupleFileManager.hh.

114{
115 fState.Message(level, action, objectType, objectName, success);
116}
void Message(G4int level, const G4String &action, const G4String &objectType, const G4String &objectName="", G4bool success=true) const

References geant4_check_module_cycles::action, G4VNtupleFileManager::fState, and G4AnalysisManagerState::Message().

Referenced by ActionAtOpenFile(), ActionAtWrite(), CreateNtupleManager(), SetNtupleMergingMode(), and SetNtupleRowWise().

◆ Reset()

G4bool G4RootNtupleFileManager::Reset ( )
overridevirtual

Implements G4VNtupleFileManager.

Definition at line 367 of file G4RootNtupleFileManager.cc.

368{
369// Reset ntuples
370
371 auto result = true;
372
375 result &= fNtupleManager->Reset();
376 }
377
378 return result;
379}

References fNtupleManager, fNtupleMergeMode, kMain, and kNone.

Referenced by ActionAtCloseFile().

◆ SetBasketEntries()

void G4RootNtupleFileManager::SetBasketEntries ( unsigned int  basketEntries)
overridevirtual

Reimplemented from G4VNtupleFileManager.

Definition at line 217 of file G4RootNtupleFileManager.cc.

218{
219 fFileManager->SetBasketEntries(basketEntries);
220}

References fFileManager.

◆ SetBasketSize()

void G4RootNtupleFileManager::SetBasketSize ( unsigned int  basketSize)
overridevirtual

Reimplemented from G4VNtupleFileManager.

Definition at line 211 of file G4RootNtupleFileManager.cc.

212{
213 fFileManager->SetBasketSize(basketSize);
214}

References fFileManager.

◆ SetBookingManager()

void G4VNtupleFileManager::SetBookingManager ( std::shared_ptr< G4NtupleBookingManager bookingManager)
inlinevirtualinherited

Definition at line 99 of file G4VNtupleFileManager.hh.

101{ fBookingManager = bookingManager; }

References G4VNtupleFileManager::fBookingManager.

◆ SetFileManager()

void G4RootNtupleFileManager::SetFileManager ( std::shared_ptr< G4RootFileManager fileManager)
inline

Definition at line 103 of file G4RootNtupleFileManager.hh.

105{ fFileManager = fileManager; }

References fFileManager.

◆ SetNtupleMerging()

void G4RootNtupleFileManager::SetNtupleMerging ( G4bool  mergeNtuples,
G4int  nofReducedNtupleFiles = 0 
)
overridevirtual

Reimplemented from G4VNtupleFileManager.

Definition at line 161 of file G4RootNtupleFileManager.cc.

164{
165 if ( fIsInitialized ) {
166 Warn("Cannot change merging mode.\n"
167 "The function must be called before OpenFile().",
168 fkClass, "SetNtupleMerging");
169 return;
170 }
171
172 // Set ntuple merging mode
173 SetNtupleMergingMode(mergeNtuples, nofNtupleFiles);
174}

References fIsInitialized, fkClass, SetNtupleMergingMode(), and G4Analysis::Warn().

◆ SetNtupleMergingMode()

void G4RootNtupleFileManager::SetNtupleMergingMode ( G4bool  mergeNtuples,
G4int  nofNtupleFiles 
)
private

Definition at line 73 of file G4RootNtupleFileManager.cc.

76{
77 Message(kVL4, "set", "ntuple merging mode");
78
79 auto canMerge = true;
80
81 // Illegal situations
82 if ( mergeNtuples && ( ! G4Threading::IsMultithreadedApplication() ) ) {
83 Warn("Merging ntuples is not applicable in sequential application.\n"
84 "Setting was ignored.",
85 fkClass, "SetNtupleMergingMode");
86 canMerge = false;
87 }
88
89 // Illegal situations
90 if ( mergeNtuples && G4Threading::IsMultithreadedApplication() &&
91 ( ! fgMasterInstance ) ) {
92 Warn("Merging ntuples requires G4AnalysisManager instance on master.\n"
93 "Setting was ignored.",
94 fkClass, "SetNtupleMergingMode");
95 canMerge = false;
96 }
97
98 G4String mergingMode;
99 if ( ( ! mergeNtuples ) || ( ! canMerge ) ) {
101 mergingMode = "G4NtupleMergeMode::kNone";
102 }
103 else {
104 // Set the number of reduced ntuple files
105 fNofNtupleFiles = nofNtupleFiles;
106
107 // Check the number of reduced ntuple files
108 if ( fNofNtupleFiles < 0 ) {
109 Warn("Number of reduced files must be [0, nofThreads].\n"
110 "Cannot set " + to_string(nofNtupleFiles) +" files.\n" +
111 "Setting was ignored.",
112 fkClass, "SetNtupleMergingMode");
113 fNofNtupleFiles = 0;
114 }
115
116 // Forced merging mode
117 G4bool isMaster = ! G4Threading::IsWorkerThread();
118 if ( isMaster ) {
120 mergingMode = "G4NtupleMergeMode::kMain";
121 } else {
123 mergingMode = "G4NtupleMergeMode::kSlave";
124 }
125 }
126
127 Message(kVL2, "set", "ntuple merging mode", mergingMode);
128}
bool G4bool
Definition: G4Types.hh:86
constexpr G4int kVL2
G4bool IsWorkerThread()
Definition: G4Threading.cc:123
G4bool IsMultithreadedApplication()
Definition: G4Threading.cc:130

References fgMasterInstance, fkClass, fNofNtupleFiles, fNtupleMergeMode, G4Threading::IsMultithreadedApplication(), G4Threading::IsWorkerThread(), kMain, kNone, kSlave, G4Analysis::kVL2, G4Analysis::kVL4, G4VNtupleFileManager::Message(), and G4Analysis::Warn().

Referenced by G4RootNtupleFileManager(), and SetNtupleMerging().

◆ SetNtupleRowWise()

void G4RootNtupleFileManager::SetNtupleRowWise ( G4bool  rowWise,
G4bool  rowMode = true 
)
overridevirtual

Reimplemented from G4VNtupleFileManager.

Definition at line 177 of file G4RootNtupleFileManager.cc.

178{
179
180 // Print info even when setting makes no effect
181 // (as we do not get printed the default setting in the output)
182 G4String rowWiseMode;
183 if ( rowWise ) {
184 rowWiseMode = "row-wise with extra branch";
185 }
186 else if ( rowMode ) {
187 rowWiseMode = "row-wise";
188 }
189 else {
190 rowWiseMode = "column-wise";
191 }
192
193 Message(kVL1, "set", "ntuple merging row mode", rowWiseMode);
194
195 // Do nothing if the mode is not changed
196 if ( fNtupleRowWise == rowWise && fNtupleRowMode == rowMode ) return;
197
198 fNtupleRowWise = rowWise;
199 fNtupleRowMode = rowMode;
200
201 if ( fNtupleManager ) {
202 fNtupleManager->SetNtupleRowWise(rowWise, rowMode);
203 }
204
205 if ( fSlaveNtupleManager ) {
206 fSlaveNtupleManager->SetNtupleRowWise(rowWise, rowMode);
207 }
208}

References fNtupleManager, fNtupleRowMode, fNtupleRowWise, fSlaveNtupleManager, G4Analysis::kVL1, and G4VNtupleFileManager::Message().

Friends And Related Function Documentation

◆ G4RootMpiNtupleFileManager

friend class G4RootMpiNtupleFileManager
friend

Definition at line 53 of file G4RootNtupleFileManager.hh.

Field Documentation

◆ fBookingManager

std::shared_ptr<G4NtupleBookingManager> G4VNtupleFileManager::fBookingManager { nullptr }
protectedinherited

◆ fFileManager

std::shared_ptr<G4RootFileManager> G4RootNtupleFileManager::fFileManager { nullptr }
private

◆ fFileType

G4String G4VNtupleFileManager::fFileType
protectedinherited

◆ fgMasterInstance

G4RootNtupleFileManager * G4RootNtupleFileManager::fgMasterInstance = nullptr
staticprivate

◆ fIsInitialized

G4bool G4RootNtupleFileManager::fIsInitialized { false }
private

Definition at line 93 of file G4RootNtupleFileManager.hh.

Referenced by CreateNtupleManager(), and SetNtupleMerging().

◆ fkClass

constexpr std::string_view G4RootNtupleFileManager::fkClass { "G4RootNtupleFileManager" }
staticconstexprprivate

◆ fNofNtupleFiles

G4int G4RootNtupleFileManager::fNofNtupleFiles { 0 }
private

◆ fNtupleManager

std::shared_ptr<G4RootNtupleManager> G4RootNtupleFileManager::fNtupleManager { nullptr }
private

◆ fNtupleMergeMode

G4NtupleMergeMode G4RootNtupleFileManager::fNtupleMergeMode { G4NtupleMergeMode::kNone }
private

◆ fNtupleRowMode

G4bool G4RootNtupleFileManager::fNtupleRowMode { true }
private

Definition at line 96 of file G4RootNtupleFileManager.hh.

Referenced by CreateNtupleManager(), and SetNtupleRowWise().

◆ fNtupleRowWise

G4bool G4RootNtupleFileManager::fNtupleRowWise { false }
private

Definition at line 95 of file G4RootNtupleFileManager.hh.

Referenced by CreateNtupleManager(), and SetNtupleRowWise().

◆ fSlaveNtupleManager

std::shared_ptr<G4RootPNtupleManager> G4RootNtupleFileManager::fSlaveNtupleManager { nullptr }
private

Definition at line 99 of file G4RootNtupleFileManager.hh.

Referenced by ActionAtWrite(), CreateNtupleManager(), and SetNtupleRowWise().

◆ fState

const G4AnalysisManagerState& G4VNtupleFileManager::fState
protectedinherited

The documentation for this class was generated from the following files: