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

#include <G4RootMpiPNtupleManager.hh>

Inheritance diagram for G4RootMpiPNtupleManager:
G4BaseNtupleManager G4VNtupleManager G4BaseAnalysisManager

Public Member Functions

 G4RootMpiPNtupleManager (const G4AnalysisManagerState &state, tools::impi *impi, G4int mpiRank, G4int destinationRank)
 
 ~G4RootMpiPNtupleManager ()
 
template<>
G4bool FillNtupleTColumn (G4int ntupleId, G4int columnId, const std::string &value)
 

Private Member Functions

void SetFileManager (std::shared_ptr< G4RootFileManager > fileManager)
 
void CreateNtuple (G4RootMpiPNtupleDescription *ntupleDescription)
 
void CreateNtuplesFromBooking (const std::vector< G4NtupleBooking * > &ntupleBookings)
 
virtual G4int CreateNtuple (G4NtupleBooking *booking) final
 
virtual G4bool FillNtupleIColumn (G4int ntupleId, G4int columnId, G4int value) final
 
virtual G4bool FillNtupleFColumn (G4int ntupleId, G4int columnId, G4float value) final
 
virtual G4bool FillNtupleDColumn (G4int ntupleId, G4int columnId, G4double value) final
 
virtual G4bool FillNtupleSColumn (G4int ntupleId, G4int columnId, const G4String &value) final
 
virtual G4bool AddNtupleRow (G4int ntupleId) final
 
virtual G4bool Merge () final
 
virtual G4bool Reset () final
 
virtual void Clear () final
 
G4bool Delete (G4int id) final
 
virtual void SetActivation (G4bool activation) final
 
virtual void SetActivation (G4int ntupleId, G4bool activation) final
 
virtual G4bool GetActivation (G4int ntupleId) const final
 
void SetNewCycle (G4bool value) final
 
G4bool GetNewCycle () const final
 
virtual G4int GetNofNtuples () const final
 
G4RootMpiPNtupleDescriptionGetNtupleDescriptionInFunction (G4int id, G4String function, G4bool warn=true) const
 
tools::wroot::base_pntuple * GetNtupleInFunction (G4int id, G4String function, G4bool warn=true) const
 
template<typename T >
G4bool FillNtupleTColumn (G4int ntupleId, G4int columnId, const T &value)
 

Private Attributes

std::shared_ptr< G4RootFileManagerfFileManager
 
std::vector< G4RootMpiPNtupleDescription * > fNtupleDescriptionVector
 
std::vector< tools::wroot::impi_ntuple * > fNtupleVector
 
tools::impi * fImpi
 
G4int fMpiRank
 
G4int fDestinationRank
 
G4bool fNewCycle { false }
 

Static Private Attributes

static constexpr std::string_view fkClass { "G4RootMpiPNtupleManager" }
 

Friends

class G4RootMpiNtupleFileManager
 

Detailed Description

Definition at line 61 of file G4RootMpiPNtupleManager.hh.

Constructor & Destructor Documentation

◆ G4RootMpiPNtupleManager()

G4RootMpiPNtupleManager::G4RootMpiPNtupleManager ( const G4AnalysisManagerState state,
tools::impi *  impi,
G4int  mpiRank,
G4int  destinationRank 
)

Definition at line 56 of file G4RootMpiPNtupleManager.cc.

59 : G4BaseNtupleManager(state),
61 fImpi(impi),
62 fMpiRank(mpiRank),
63 fDestinationRank(destinationRank)
64{
65}
std::vector< tools::wroot::impi_ntuple * > fNtupleVector

◆ ~G4RootMpiPNtupleManager()

G4RootMpiPNtupleManager::~G4RootMpiPNtupleManager ( )

Definition at line 68 of file G4RootMpiPNtupleManager.cc.

69{
70 for ( auto ntupleDescription : fNtupleDescriptionVector ) {
71 delete ntupleDescription;
72 }
73}
std::vector< G4RootMpiPNtupleDescription * > fNtupleDescriptionVector

Member Function Documentation

◆ SetFileManager()

void G4RootMpiPNtupleManager::SetFileManager ( std::shared_ptr< G4RootFileManager fileManager)
inlineprivate

Definition at line 145 of file G4RootMpiPNtupleManager.hh.

146{ fFileManager = fileManager; }
std::shared_ptr< G4RootFileManager > fFileManager

◆ CreateNtuple() [1/2]

void G4RootMpiPNtupleManager::CreateNtuple ( G4RootMpiPNtupleDescription ntupleDescription)
private

Definition at line 116 of file G4RootMpiPNtupleManager.cc.

117{
118 Message(kVL4, "create from booking", "mpi pntuple",
119 ntupleDescription->GetDescription().GetNtupleBooking().name());
120
121 // Wait for the ntuple data from main
122
123 G4bool verbose = IsVerbose(kVL2);
124
125 G4cout << "Go to wait_buffer from " << fDestinationRank << G4endl;
126 fImpi->pack_reset();
127 int probe_src;
128 if ( ! fImpi->wait_buffer(fMpiRank, fDestinationRank, kTAG_NTUPLE, probe_src, verbose)) {
129 G4cerr << "G4RootMpiPNtupleManager::CreateNtuple: wait_buffer() failed."<< G4endl;
130 return;
131 }
132 G4cout << "After wait_buffer with " << fImpi << G4endl;
133
134 tools::uint32 mainNtupleId;
135 bool rowWise;
136 bool byteSwap;
137 unsigned int compression;
138 tools::wroot::seek seekDirectory;
139 tools::uint32 basketSize;
140 bool rowMode;
141 std::vector<tools::uint32> basketSizes;
142 unsigned int basketEntries;
143
144 if ( ! fImpi->unpack(mainNtupleId) ) {
145 G4cerr << "bunpack(byteSwap) failed."<< G4endl;
146 return;
147 }
148 // G4cout << "unpack 1" << G4endl;
149
150 if ( ! fImpi->bunpack(rowWise) ) {
151 G4cerr << "bunpack(rowWise) failed."<< G4endl;
152 return;
153 }
154 // G4cout << "unpack 1/2" << G4endl;
155
156 if ( ! fImpi->bunpack(byteSwap) ) {
157 G4cerr << "bunpack(byteSwap) failed."<< G4endl;
158 return;
159 }
160 // G4cout << "unpack 2" << G4endl;
161
162 if ( ! fImpi->unpack(compression) ) {
163 G4cerr << "unpack(compression) failed."<< G4endl;
164 return;
165 }
166 // G4cout << "unpack 3" << G4endl;
167
168 if ( ! fImpi->unpack(seekDirectory) ) {
169 G4cerr << "unpack(seek) failed."<< G4endl;
170 return;
171 }
172 // G4cout << "unpack 4" << G4endl;
173
174 if (rowWise) {
175 if ( ! fImpi->unpack(basketSize) ) {
176 G4cerr << "unpack(basketSize) failed."<< G4endl;
177 return;
178 }
179 } else {
180 if ( ! fImpi->bunpack(rowMode) ) {
181 G4cerr << "bpack(rowMode) failed." << G4endl;
182 return;
183 }
184 if ( ! fImpi->vunpack(basketSizes) ) {
185 G4cerr << "vunpack(basketSizes) failed."<< G4endl;
186 return;
187 }
188 if( ! fImpi->unpack(basketEntries) ) {
189 G4cerr << "unpack(basketEntries) failed." << G4endl;
190 return;
191 }
192 }
193 // G4cout << "unpack 5" << G4endl;
194
195 // G4cout << "rank = " << fMpiRank
196 // << ", verbose = " << verbose
197 // << ", mainNtupleId = " << mainNtupleId
198 // << ", byteSwap = " << byteSwap
199 // << ", compression = " << compression
200 // << ", seekDirectory = " << seekDirectory
201 // << ", basketSizes.size() = " << basketSizes.size()
202 // << G4endl;
203
204 // Create MPI pntuple
205 if ( rowWise ) {
206 tools::wroot::mpi_ntuple_row_wise* ntuple
207 = new tools::wroot::mpi_ntuple_row_wise(
208 mainNtupleId, G4cout, byteSwap, compression, seekDirectory,
209 basketSize, ntupleDescription->GetDescription().GetNtupleBooking(), verbose);
210 ntupleDescription->SetNtuple(ntuple);
211 ntupleDescription->SetBasePNtuple(ntuple);
212 } else {
213 tools::wroot::mpi_ntuple_column_wise* ntuple
214 = new tools::wroot::mpi_ntuple_column_wise(
215 mainNtupleId, G4cout, byteSwap, compression, seekDirectory,
216 basketSizes, ntupleDescription->GetDescription().GetNtupleBooking(),
217 rowMode, basketEntries, verbose);
218 ntupleDescription->SetNtuple(ntuple);
219 ntupleDescription->SetBasePNtuple(ntuple);
220 }
221
222 ntupleDescription->GetDescription().SetIsNtupleOwner(true);
223 ntupleDescription->SetImpi(fImpi);
224 // should be not needed
225 // pntuple object is not deleted automatically
226 fNtupleVector.push_back(ntupleDescription->GetNtuple());
227
228 Message(kVL3, "create from booking", "mpi pntuple",
229 ntupleDescription->GetDescription().GetNtupleBooking().name());
230}
const int kTAG_NTUPLE
void SetNtuple(tools::wroot::impi_ntuple *intuple)
void SetBasePNtuple(tools::wroot::base_pntuple *basePNtuple)
tools::wroot::impi_ntuple * GetNtuple() const

◆ CreateNtuplesFromBooking()

void G4RootMpiPNtupleManager::CreateNtuplesFromBooking ( const std::vector< G4NtupleBooking * > &  ntupleBookings)
private

Definition at line 233 of file G4RootMpiPNtupleManager.cc.

235{
236// Create ntuple from ntuple_booking & the buffer from main rank
237
238 // G4cout << "Start G4RootMpiPNtupleManager::CreateNtuplesFromBooking" << G4endl;
239
240 // Do not create ntuples if NtupleVector is not empty
241 if ( fNtupleVector.size() ) return;
242
243 // Create pntuple descriptions from ntuple booking.
244 // auto g4NtupleBookings = fBookingManager->GetNtupleBookingVector();
245 for ( auto g4NtupleBooking : ntupleBookings ) {
246 auto ntupleDescription = new G4RootMpiPNtupleDescription(g4NtupleBooking);
247 ntupleDescription->SetMainNtupleRank(fDestinationRank);
248 fNtupleDescriptionVector.push_back(ntupleDescription);
249 }
250
251 // Create mpi ntuples
252 for ( auto ntupleDescription : fNtupleDescriptionVector ) {
253
254 // Do not create ntuple if it is inactivated
255 if ( fState.GetIsActivation() && ( ! ntupleDescription->GetDescription().GetActivation() ) ) continue;
256
257 // Do not create ntuple if it already exists
258 if ( ntupleDescription->GetNtuple() ) continue;
259
260 Message(kVL4, "create from booking", "mpi pntuple",
261 ntupleDescription->GetDescription().GetNtupleBooking().name());
262
263 // create ntuple
264 CreateNtuple(ntupleDescription);
265
266 // finish created ntuple
267 // (nothing to be done ?)
268 // FinishTNtuple(ntupleDescription);
269
270 Message(kVL3, "create from booking", "mpi pntuple",
271 ntupleDescription->GetDescription().GetNtupleBooking().name());
272 }
273
274}
void CreateNtuple(G4RootMpiPNtupleDescription *ntupleDescription)

◆ CreateNtuple() [2/2]

G4int G4RootMpiPNtupleManager::CreateNtuple ( G4NtupleBooking booking)
finalprivatevirtual

Definition at line 277 of file G4RootMpiPNtupleManager.cc.

279{
280// Create pntuple description from g4 ntuple booking
281// Nothing to be done here.
282
283 return G4Analysis::kInvalidId;
284}

◆ FillNtupleIColumn()

G4bool G4RootMpiPNtupleManager::FillNtupleIColumn ( G4int  ntupleId,
G4int  columnId,
G4int  value 
)
finalprivatevirtual

Definition at line 287 of file G4RootMpiPNtupleManager.cc.

289{
290 return FillNtupleTColumn<int>(ntupleId, columnId, value);
291}

◆ FillNtupleFColumn()

G4bool G4RootMpiPNtupleManager::FillNtupleFColumn ( G4int  ntupleId,
G4int  columnId,
G4float  value 
)
finalprivatevirtual

Definition at line 294 of file G4RootMpiPNtupleManager.cc.

296{
297 return FillNtupleTColumn<float>(ntupleId, columnId, value);
298}

◆ FillNtupleDColumn()

G4bool G4RootMpiPNtupleManager::FillNtupleDColumn ( G4int  ntupleId,
G4int  columnId,
G4double  value 
)
finalprivatevirtual

Definition at line 301 of file G4RootMpiPNtupleManager.cc.

303{
304 return FillNtupleTColumn<double>(ntupleId, columnId, value);
305}

◆ FillNtupleSColumn()

G4bool G4RootMpiPNtupleManager::FillNtupleSColumn ( G4int  ntupleId,
G4int  columnId,
const G4String value 
)
finalprivatevirtual

Definition at line 308 of file G4RootMpiPNtupleManager.cc.

310{
311 return FillNtupleTColumn<std::string>(ntupleId, columnId, value);
312}

◆ AddNtupleRow()

G4bool G4RootMpiPNtupleManager::AddNtupleRow ( G4int  ntupleId)
finalprivatevirtual

Definition at line 315 of file G4RootMpiPNtupleManager.cc.

316{
317 if ( fState.GetIsActivation() && ( ! GetActivation(ntupleId) ) ) {
318 //G4cout << "Skipping AddNtupleRow for " << ntupleId << G4endl;
319 return false;
320 }
321
322 Message(kVL4, "add", "pntuple row", " ntupleId " + to_string(ntupleId));
323
324 auto ntupleDescription = GetNtupleDescriptionInFunction(ntupleId, "AddNtupleRow");
325 if ( ! ntupleDescription ) return false;
326
327 // if(!_ntuple->add_row(_impi,rank_src,tag)) {
328 auto result
329 = ntupleDescription->GetNtuple()
330 ->add_row(*fImpi, ntupleDescription->GetMainNtupleRank(), kTAG_NTUPLE );
331
332 if ( ! result ) {
333 G4ExceptionDescription description;
334 description << " " << " ntupleId " << ntupleId
335 << "adding row has failed.";
336 G4Exception("G4RootMpiPNtupleManager::AddNtupleRow()",
337 "Analysis_W002", JustWarning, description);
338 }
339
340 Message(kVL3, "add", "pntuple row", " ntupleId " + to_string(ntupleId));
341
342 return true;
343}
virtual G4bool GetActivation(G4int ntupleId) const final
G4RootMpiPNtupleDescription * GetNtupleDescriptionInFunction(G4int id, G4String function, G4bool warn=true) const

◆ Merge()

G4bool G4RootMpiPNtupleManager::Merge ( )
finalprivatevirtual

Definition at line 346 of file G4RootMpiPNtupleManager.cc.

347{
348
349 // G4cout << "Start G4RootMpiPNtupleManager::Merge" << G4endl;
350
351 auto finalResult = true;
352
353 for ( auto ntupleDescription : fNtupleDescriptionVector) {
354
355 // skip inactivated ntuples
356 if ( ! ntupleDescription->GetDescription().GetActivation() ) continue;
357
358 // skip if ntuple was already merged and deleted
359 // (this happend when the main rank re-opens a new file for merged data)
360 if ( ! ntupleDescription->GetNtuple() ) continue;
361
362 Message(kVL4, "merge", "pntuple", ntupleDescription->GetDescription().GetNtupleBooking().name());
363
364 // G4cout << "call end_fill " << fImpi
365 // << " to rank " << ntupleDescription->GetMainNtupleRank()
366 // << " pntuple: " << ntupleDescription->GetNtuple() << G4endl;
367 auto result
368 = ntupleDescription->GetNtuple()
369 ->end_fill(*fImpi, ntupleDescription->GetMainNtupleRank(), kTAG_NTUPLE);
370
371 if ( ! result ) {
372 G4ExceptionDescription description;
373 description << " " << " ntuple " << ntupleDescription->GetDescription().GetNtupleBooking().name()
374 << "end fill has failed.";
375 G4Exception("G4RootMpiPNtupleManager::Merge()",
376 "Analysis_W002", JustWarning, description);
377 }
378
379 delete ntupleDescription->GetNtuple();
380 ntupleDescription->SetNtuple(nullptr);
381
382 Message(kVL3, "merge", "pntuple", ntupleDescription->GetDescription().GetNtupleBooking().name());
383 }
384
385 return finalResult;
386}

◆ Reset()

G4bool G4RootMpiPNtupleManager::Reset ( )
finalprivatevirtual

Definition at line 389 of file G4RootMpiPNtupleManager.cc.

390{
391 // Reset ntuple description, this will delete ntuple if present and
392 // we have its ownership.
393 // The ntuples will be recreated with new cycle or new open file.
394
395 for ( auto ntupleDescription : fNtupleDescriptionVector ) {
396 ntupleDescription->GetDescription().Reset();
397 }
398
399 fNtupleVector.clear();
400
401 return true;
402}

◆ Clear()

void G4RootMpiPNtupleManager::Clear ( )
finalprivatevirtual

Definition at line 405 of file G4RootMpiPNtupleManager.cc.

406{
407 for ( auto ntupleDescription : fNtupleDescriptionVector ) {
408 delete ntupleDescription->GetNtuple();
409 }
410
412 fNtupleVector.clear();
413
414 Message(kVL2, "clear", "pntuples");
415}

◆ Delete()

G4bool G4RootMpiPNtupleManager::Delete ( G4int  id)
finalprivate

Definition at line 418 of file G4RootMpiPNtupleManager.cc.

419{
420 if ( IsVerbose(G4Analysis::kVL4) ) {
421 Message(G4Analysis::kVL4, "delete", "pntuple ntupleId " + to_string(id));
422 }
423
424 auto ntupleDescription = GetNtupleDescriptionInFunction(id, "Delete", true);
425
426 if (ntupleDescription == nullptr) return false;
427
428 // Delete/clear ntuple data
429 delete ntupleDescription->GetNtuple();
430 ntupleDescription->SetNtuple(nullptr);
431 ntupleDescription->SetBasePNtuple(nullptr);
432 ntupleDescription->GetMainBranches().clear();
433
434 // Update ntuple vector
435 auto index = id - GetFirstId();
436 fNtupleVector[index] = nullptr;
437
438 Message(G4Analysis::kVL2, "delete", "pntuple ntupleId " + to_string(id));
439
440 return true;
441}

◆ SetActivation() [1/2]

void G4RootMpiPNtupleManager::SetActivation ( G4bool  activation)
finalprivatevirtual

Definition at line 445 of file G4RootMpiPNtupleManager.cc.

447{
448 for ( auto ntupleDescription : fNtupleDescriptionVector ) {
449 ntupleDescription->GetDescription().SetActivation(activation);
450 }
451}

◆ SetActivation() [2/2]

void G4RootMpiPNtupleManager::SetActivation ( G4int  ntupleId,
G4bool  activation 
)
finalprivatevirtual

Definition at line 455 of file G4RootMpiPNtupleManager.cc.

457{
458 auto ntupleDescription = GetNtupleDescriptionInFunction(ntupleId, "SetActivation");
459 if ( ! ntupleDescription ) return;
460
461 ntupleDescription->GetDescription().SetActivation(activation);
462}

◆ GetActivation()

G4bool G4RootMpiPNtupleManager::GetActivation ( G4int  ntupleId) const
finalprivatevirtual

Definition at line 465 of file G4RootMpiPNtupleManager.cc.

467{
468 auto ntupleDescription = GetNtupleDescriptionInFunction(ntupleId, "GetActivation");
469 if ( ! ntupleDescription ) return false;
470
471 return ntupleDescription->GetDescription().GetActivation();
472}

◆ SetNewCycle()

void G4RootMpiPNtupleManager::SetNewCycle ( G4bool  value)
finalprivate

Definition at line 475 of file G4RootMpiPNtupleManager.cc.

476{
477 fNewCycle = value;
478}

◆ GetNewCycle()

G4bool G4RootMpiPNtupleManager::GetNewCycle ( ) const
finalprivate

Definition at line 481 of file G4RootMpiPNtupleManager.cc.

482{
483 return fNewCycle;
484}

◆ GetNofNtuples()

G4int G4RootMpiPNtupleManager::GetNofNtuples ( ) const
finalprivatevirtual

Definition at line 487 of file G4RootMpiPNtupleManager.cc.

488{
489 return fNtupleVector.size();
490}

◆ GetNtupleDescriptionInFunction()

G4RootMpiPNtupleDescription * G4RootMpiPNtupleManager::GetNtupleDescriptionInFunction ( G4int  id,
G4String  function,
G4bool  warn = true 
) const
private

Definition at line 81 of file G4RootMpiPNtupleManager.cc.

83{
84 auto index = id - fFirstId;
85 if ( index < 0 || index >= G4int(fNtupleDescriptionVector.size()) ) {
86 if ( warn) {
87 NotExistException("ntuple description", id, functionName);
88 }
89 return nullptr;
90 }
91
92 return fNtupleDescriptionVector[index];
93}

◆ GetNtupleInFunction()

tools::wroot::base_pntuple * G4RootMpiPNtupleManager::GetNtupleInFunction ( G4int  id,
G4String  function,
G4bool  warn = true 
) const
private

Definition at line 96 of file G4RootMpiPNtupleManager.cc.

98{
99 auto ntupleDescription = GetNtupleDescriptionInFunction(id, functionName);
100 if ( ! ntupleDescription ) return nullptr;
101
102 if ( ! ntupleDescription->GetBasePNtuple() ) {
103 if ( warn ) {
104 NotExistException("ntuple", id, functionName);
105 }
106 return nullptr;
107 }
108 return ntupleDescription->GetBasePNtuple();
109}

◆ FillNtupleTColumn() [1/2]

template<typename T >
G4bool G4RootMpiPNtupleManager::FillNtupleTColumn ( G4int  ntupleId,
G4int  columnId,
const T &  value 
)
private

Definition at line 203 of file G4RootMpiPNtupleManager.hh.

205{
206 if ( fState.GetIsActivation() && ( ! GetActivation(ntupleId) ) ) {
207 G4cout << "Skipping FillNtupleIColumn for " << ntupleId << G4endl;
208 return false;
209 }
210
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));
216 }
217
218 // get ntuple
219 auto ntuple = GetNtupleInFunction(ntupleId, "FillNtupleTColumn");
220 if ( ! ntuple ) return false;
221
222 // get generic column
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);
230 return false;
231 }
232 auto icolumn = ntuple->columns()[index];
233
234 // get column and check its type
235 auto column = dynamic_cast<tools::wroot::base_pntuple::column<T>* >(icolumn);
236 if ( ! column ) {
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);
243 return false;
244 }
245
246 column->fill(value);
247
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));
253 }
254
255 return true;
256}
tools::wroot::base_pntuple * GetNtupleInFunction(G4int id, G4String function, G4bool warn=true) const

◆ FillNtupleTColumn() [2/2]

template<>
G4bool G4RootMpiPNtupleManager::FillNtupleTColumn ( G4int  ntupleId,
G4int  columnId,
const std::string &  value 
)
inline

Definition at line 150 of file G4RootMpiPNtupleManager.hh.

152{
153 if ( fState.GetIsActivation() && ( ! GetActivation(ntupleId) ) ) {
154 G4cout << "Skipping FillNtupleIColumn for " << ntupleId << G4endl;
155 return false;
156 }
157
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));
162 }
163
164 auto ntuple = GetNtupleInFunction(ntupleId, "FillNtupleTColumn");
165 if ( ! ntuple ) return false;
166
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);
174 return false;
175 }
176
177 auto icolumn = ntuple->columns()[index];
178 auto column = dynamic_cast<tools::wroot::base_pntuple::column_string* >(icolumn);
179 if ( ! column ) {
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);
186 return false;
187 }
188
189 column->fill(value);
190
191 if ( IsVerbose(G4Analysis::kVL4) ) {
192 Message(G4Analysis::kVL4, "done fill", "pntuple T column",
193 " ntupleId " + to_string(ntupleId) +
194 " columnId " + to_string(columnId) +
195 " value " + value);
196 }
197
198 return true;
199}

Friends And Related Symbol Documentation

◆ G4RootMpiNtupleFileManager

friend class G4RootMpiNtupleFileManager
friend

Definition at line 63 of file G4RootMpiPNtupleManager.hh.

Member Data Documentation

◆ fkClass

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

Definition at line 129 of file G4RootMpiPNtupleManager.hh.

129{ "G4RootMpiPNtupleManager" };

◆ fFileManager

std::shared_ptr<G4RootFileManager> G4RootMpiPNtupleManager::fFileManager
private

Definition at line 133 of file G4RootMpiPNtupleManager.hh.

◆ fNtupleDescriptionVector

std::vector<G4RootMpiPNtupleDescription*> G4RootMpiPNtupleManager::fNtupleDescriptionVector
private

Definition at line 134 of file G4RootMpiPNtupleManager.hh.

◆ fNtupleVector

std::vector<tools::wroot::impi_ntuple*> G4RootMpiPNtupleManager::fNtupleVector
private

Definition at line 135 of file G4RootMpiPNtupleManager.hh.

◆ fImpi

tools::impi* G4RootMpiPNtupleManager::fImpi
private

Definition at line 136 of file G4RootMpiPNtupleManager.hh.

◆ fMpiRank

G4int G4RootMpiPNtupleManager::fMpiRank
private

Definition at line 137 of file G4RootMpiPNtupleManager.hh.

◆ fDestinationRank

G4int G4RootMpiPNtupleManager::fDestinationRank
private

Definition at line 138 of file G4RootMpiPNtupleManager.hh.

◆ fNewCycle

G4bool G4RootMpiPNtupleManager::fNewCycle { false }
private

Definition at line 139 of file G4RootMpiPNtupleManager.hh.

139{ false };

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

Applications | User Support | Publications | Collaboration