Loading...
Searching...
No Matches
Public Member Functions | Private Member Functions | Private Attributes | List of all members
G4RootMpiNtupleFileManager Class Reference

#include <G4RootMpiNtupleFileManager.hh>

Inheritance diagram for G4RootMpiNtupleFileManager:
G4RootNtupleFileManager G4VNtupleFileManager

Public Member Functions

 G4RootMpiNtupleFileManager (const G4AnalysisManagerState &state)
 
virtual ~G4RootMpiNtupleFileManager ()
 
void SetMpiNtupleMerging (tools::impi *impi, G4int mpiRank, G4int mpiSize, G4int nofReducedNtupleFiles=0)
 
virtual G4bool ActionAtOpenFile (const G4String &fileName) final
 
virtual G4bool ActionAtWrite () final
 
virtual G4bool ActionAtCloseFile () final
 
virtual G4bool Reset () final
 
virtual std::shared_ptr< G4VNtupleManagerCreateNtupleManager () override
 
std::shared_ptr< G4RootMpiNtupleManagerGetMpiNtupleManager () const
 

Private Member Functions

void SetMpiNtupleMergingMode (G4int nofNtupleFiles)
 
void CreateMpiNtupleManagers (tools::impi *impi, G4int mpiRank, G4int mpiSize)
 

Private Attributes

tools::impi * fImpi
 
G4int fMpiRank
 
G4int fMpiSize
 
std::shared_ptr< G4RootMpiPNtupleManagerfMpiSlaveNtupleManager
 
G4bool fNtupleBooked
 

Detailed Description

Definition at line 45 of file G4RootMpiNtupleFileManager.hh.

Constructor & Destructor Documentation

◆ G4RootMpiNtupleFileManager()

G4RootMpiNtupleFileManager::G4RootMpiNtupleFileManager ( const G4AnalysisManagerState state)
explicit

◆ ~G4RootMpiNtupleFileManager()

G4RootMpiNtupleFileManager::~G4RootMpiNtupleFileManager ( )
virtual

Definition at line 50 of file G4RootMpiNtupleFileManager.cc.

51{}

Member Function Documentation

◆ SetMpiNtupleMerging()

void G4RootMpiNtupleFileManager::SetMpiNtupleMerging ( tools::impi *  impi,
G4int  mpiRank,
G4int  mpiSize,
G4int  nofReducedNtupleFiles = 0 
)

Definition at line 107 of file G4RootMpiNtupleFileManager.cc.

110{
111 if ( fIsInitialized ) {
112 G4ExceptionDescription description;
113 description
114 << "Cannot change merging mode." << G4endl
115 << "The function must be called before OpenFile().";
116 G4Exception("G4RootMpiNtupleFileManager::SetMpiNtupleMerging",
117 "Analysis_W013", JustWarning, description);
118 return;
119 }
120
121 // Save MPI merging parameters
122 fImpi = impi;
123 fMpiRank = mpiRank;
124 fMpiSize = mpiSize;
125
126 // Set ntuple merging mode
127 SetMpiNtupleMergingMode(nofNtupleFiles);
128}
void SetMpiNtupleMergingMode(G4int nofNtupleFiles)

◆ ActionAtOpenFile()

G4bool G4RootMpiNtupleFileManager::ActionAtOpenFile ( const G4String fileName)
finalvirtual

Definition at line 184 of file G4RootMpiNtupleFileManager.cc.

185{
186 // No MPI merging, call base class
187 if ( fNtupleMergeMode == G4NtupleMergeMode::kNone ) {
188 return G4RootNtupleFileManager::ActionAtOpenFile(fileName);
189 }
190
191 if ( ! fNtupleBooked ) {
192
193 G4String objectType = "analysis file";
194 if ( fNtupleMergeMode == G4NtupleMergeMode::kMain ) {
195 objectType = "main analysis file";
196 }
197 Message(kVL4, "open", objectType, fileName);
198
199
200 if ( fNtupleMergeMode == G4NtupleMergeMode::kMain ) {
201 // Creating files is triggered from CreateNtuple
202 fNtupleManager->CreateNtuplesFromBooking(
203 fBookingManager->GetNtupleBookingVector());
204 }
205
206 if ( fNtupleMergeMode == G4NtupleMergeMode::kSlave ) {
207 // G4cout << "Slave: Go to create ntuples from booking" << G4endl;
208 // No file is open by Slave manager
209 fMpiSlaveNtupleManager->CreateNtuplesFromBooking(
210 fBookingManager->GetNtupleBookingVector());
211 }
212
213 Message(kVL1, "open", objectType, fileName);
214
215 fNtupleBooked = true;
216 }
217
218 return true;
219}

◆ ActionAtWrite()

G4bool G4RootMpiNtupleFileManager::ActionAtWrite ( )
finalvirtual

Definition at line 222 of file G4RootMpiNtupleFileManager.cc.

223{
224 // No MPI merging, call base class
225 if ( fNtupleMergeMode == G4NtupleMergeMode::kNone ) {
226 return G4RootNtupleFileManager::ActionAtWrite();
227 }
228
229 auto result = true;
230
231 G4String ntupleType;
232 if ( fNtupleMergeMode == G4NtupleMergeMode::kMain ) ntupleType = "main ntuples";
233 if ( fNtupleMergeMode == G4NtupleMergeMode::kSlave ) ntupleType = "slave ntuples";
234
235 Message(kVL4, "merge", ntupleType);
236
237 if ( fNtupleMergeMode == G4NtupleMergeMode::kMain ) {
238 result &= fNtupleManager->Merge();
239 }
240
241 if ( fNtupleMergeMode == G4NtupleMergeMode::kSlave ) {
242 result &= fMpiSlaveNtupleManager->Merge();
243 }
244
245 Message(kVL1, "merge", ntupleType, "", result);
246
247 return result;
248}

◆ ActionAtCloseFile()

G4bool G4RootMpiNtupleFileManager::ActionAtCloseFile ( )
finalvirtual

Definition at line 251 of file G4RootMpiNtupleFileManager.cc.

252{
253 // No MPI merging, call base class
254 if ( fNtupleMergeMode == G4NtupleMergeMode::kNone ) {
255 return G4RootNtupleFileManager::ActionAtCloseFile();
256 }
257
258 if ( fNtupleMergeMode == G4NtupleMergeMode::kSlave) {
259 fMpiSlaveNtupleManager->SetNewCycle(false);
260 return true;
261 }
262
263 return CloseNtupleFiles();
264}

◆ Reset()

G4bool G4RootMpiNtupleFileManager::Reset ( )
finalvirtual

Definition at line 267 of file G4RootMpiNtupleFileManager.cc.

268{
269// Reset ntuples
270
271 // No MPI merging, call base class
272 if ( fNtupleMergeMode == G4NtupleMergeMode::kNone ) {
273 return G4RootNtupleFileManager::Reset();
274 }
275
276 auto result = true;
277
278 if ( fNtupleMergeMode == G4NtupleMergeMode::kMain ) {
279 result &= fNtupleManager->Reset();
280 }
281
282 if ( fNtupleMergeMode == G4NtupleMergeMode::kSlave ) {
283 result &= fMpiSlaveNtupleManager->Reset();
284 }
285
286 return result;
287}

◆ CreateNtupleManager()

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

Definition at line 131 of file G4RootMpiNtupleFileManager.cc.

132{
133 Message(kVL4, "create", "mpi ntuple manager");
134
135 std::shared_ptr<G4VNtupleManager> activeNtupleManager = nullptr;
136 switch ( fNtupleMergeMode )
137 {
138 case G4NtupleMergeMode::kNone:
139 fNtupleManager
140 = make_shared<G4RootNtupleManager>(fState, fBookingManager,
141 0, 0, fNtupleRowWise, fNtupleRowMode);
142 fNtupleManager->SetFileManager(fFileManager);
143 activeNtupleManager = fNtupleManager;
144 break;
145
146 case G4NtupleMergeMode::kMain: {
147 fNtupleManager
148 = make_shared<G4RootMpiNtupleManager>(fState, fBookingManager,
149 fNtupleRowWise, fNtupleRowMode, fImpi, fMpiSize);
150 fNtupleManager->SetFileManager(fFileManager);
151 activeNtupleManager = fNtupleManager;
152 break;
153 }
154
155 case G4NtupleMergeMode::kSlave: {
156 auto destinationRank = fMpiSize;
158 = make_shared<G4RootMpiPNtupleManager>(fState, fImpi, fMpiRank, destinationRank);
159 activeNtupleManager = fMpiSlaveNtupleManager;
160 break;
161 }
162 }
163
164 G4String mergeMode;
165 switch ( fNtupleMergeMode ) {
166 case G4NtupleMergeMode::kNone:
167 mergeMode = "";
168 break;
169 case G4NtupleMergeMode::kMain:
170 mergeMode = "main ";
171 break;
172 case G4NtupleMergeMode::kSlave:
173 mergeMode = "slave ";
174 break;
175 }
176 Message(kVL3, "create", mergeMode + "mpi ntuple manager");
177
178 fIsInitialized = true;
179
180 return activeNtupleManager;
181}

◆ GetMpiNtupleManager()

std::shared_ptr< G4RootMpiNtupleManager > G4RootMpiNtupleFileManager::GetMpiNtupleManager ( ) const

◆ SetMpiNtupleMergingMode()

void G4RootMpiNtupleFileManager::SetMpiNtupleMergingMode ( G4int  nofNtupleFiles)
private

Definition at line 58 of file G4RootMpiNtupleFileManager.cc.

60{
61 Message(kVL2, "set", "mpi ntuple merging mode");
62
63 auto canMerge = true;
64
65 // Illegal situations
66 if ( fMpiSize < 2 ) {
67 G4ExceptionDescription description;
68 description
69 << "Merging ntuples is not applicable on a single rank." << G4endl
70 << "Setting was ignored.";
71 G4Exception("G4RootMpiNtupleFileManager::SetMpiNtupleMergingMode()",
72 "Analysis_W013", JustWarning, description);
73 canMerge = false;
74 }
75
76 G4String mergingMode;
77 if ( ! canMerge ) {
78 fNtupleMergeMode = G4NtupleMergeMode::kNone;
79 mergingMode = "G4NtupleMergeMode::kNone";
80 }
81 else {
82 // Set the number of reduced ntuple files
83 // (multiple output files are not yet supported)
84 fNofNtupleFiles = nofNtupleFiles;
85
86 // Forced merging mode
87 // MPI
88 if ( fMpiRank >= fMpiSize ) {
89 // the extra worker
90 fNtupleMergeMode = G4NtupleMergeMode::kMain;
91 mergingMode = "G4NtupleMergeMode::kMain";
92 } else {
93 // processing worker
94 fNtupleMergeMode = G4NtupleMergeMode::kSlave;
95 mergingMode = "G4NtupleMergeMode::kSlave";
96 }
97 }
98
99 Message(kVL1, "set", "mpi ntuple merging mode", mergingMode);
100}

◆ CreateMpiNtupleManagers()

void G4RootMpiNtupleFileManager::CreateMpiNtupleManagers ( tools::impi *  impi,
G4int  mpiRank,
G4int  mpiSize 
)
private

Member Data Documentation

◆ fImpi

tools::impi* G4RootMpiNtupleFileManager::fImpi
private

Definition at line 72 of file G4RootMpiNtupleFileManager.hh.

◆ fMpiRank

G4int G4RootMpiNtupleFileManager::fMpiRank
private

Definition at line 73 of file G4RootMpiNtupleFileManager.hh.

◆ fMpiSize

G4int G4RootMpiNtupleFileManager::fMpiSize
private

Definition at line 74 of file G4RootMpiNtupleFileManager.hh.

◆ fMpiSlaveNtupleManager

std::shared_ptr<G4RootMpiPNtupleManager> G4RootMpiNtupleFileManager::fMpiSlaveNtupleManager
private

Definition at line 76 of file G4RootMpiNtupleFileManager.hh.

◆ fNtupleBooked

G4bool G4RootMpiNtupleFileManager::fNtupleBooked
private

Definition at line 77 of file G4RootMpiNtupleFileManager.hh.


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

Applications | User Support | Publications | Collaboration