Class RMGAnalysisReader#

Nested Relationships#

Nested Types#

Class Documentation#

class RMGAnalysisReader#

wrapper around G4VAnalysisReader instances with special handling for LH5 files.

notes for threadsafe use:

  • opening/closing can only be performed on the master thread.

  • in a multithreaded application, all function calls are guarded by a mutex. Worker threads can use the reader instance after opening, but only one worker can use the reader at a time.

  • the reader access handles are generally thread-safe, if no other thread uses any G4VAnalysisReader directly.

  • the reader should only be bound once to variables that are of static storage duration. Example: only bind to static class fields to read the values into. Do only unloack the reader access handle after reading/checking the read data.

Public Functions

RMGAnalysisReader() = default#
~RMGAnalysisReader() = default#
RMGAnalysisReader(RMGAnalysisReader const&) = delete#
RMGAnalysisReader &operator=(RMGAnalysisReader const&) = delete#
RMGAnalysisReader(RMGAnalysisReader&&) = delete#
RMGAnalysisReader &operator=(RMGAnalysisReader&&) = delete#
Access OpenFile(const std::string &file_name, std::string ntuple_dir_name, std::string ntuple_name, G4AutoLock lock, std::string force_ext = "")#

open an input file for reading of one specific ntuple. The return access handle can be used to connect to-be-read column to variables.

This function can only be used on the master thread. This operation acquires a global lock across all readers that will be held until the access handle is discarded.

Parameters
  • file_name – the input file name. the file format is determined from the file extension.

  • ntuple_dir_name – the first part of the input table name. For the table addressed by “dir/table” this is “dir”.

  • ntuple_name – the first part of the input table name. For the table addressed by “dir/table” this is “table”.

  • lock – a lock instance obtained by RMGAnalysisReader::GetLock - optional.

  • force_ext – force a file extension/reader type. should be a lowercase file extension like lh5, hdf5, csv, root.

Access OpenFile(const std::string &file_name, std::string ntuple_dir_name, std::string ntuple_name, std::string force_ext = "")#

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

void CloseFile()#

if any file is open for reading, close the reader. Also clean-up temporary files.

This function can only be used on the master thread. This operation acquires a global across all readers. This function will not actually free resources allocated for the reader by Geant4.

Access GetLockedReader() const#

get an access handle to the current underlying G4VAnalysisReader.

The return access handle can be used to read row(s) from the ntuple. This function acquires a global across all readers that will be held until the access handle is discarded.

G4AutoLock GetLock() const#

acquires a global lock to the analysis reader mutex.

inline auto &GetFileName() const#

get the file name of the current open file, or an empty string.

class Access#

thread-safe access handle to the underlying reader. This handle can be used to set-up ntuple reading (in setup mode) or to read rows from the ntuple.

Public Functions

inline ~Access()#
Access(Access const&) = delete#
Access &operator=(Access&) = delete#
Access &operator=(Access const&) = delete#
Access &operator=(Access&&) = delete#
inline void unlock()#

unlock this access handle before it exits the scope.

inline auto GetNtupleRow()#

wraps G4VAnalysisReader::GetNtupleRow.

inline auto SetNtupleDColumn(const std::string &name, G4double &value, const std::vector<std::string> &allowed_units = {})#

wraps G4VAnalysisReader::SetNtupleDColumn.

inline auto SetNtupleFColumn(const std::string &name, G4float &value, const std::vector<std::string> &allowed_units = {})#

wraps G4VAnalysisReader::SetNtupleFColumn.

inline auto SetNtupleIColumn(const std::string &name, G4int &value, const std::vector<std::string> &allowed_units = {})#

wraps G4VAnalysisReader::SetNtupleIColumn.

std::string GetUnit(const std::string &name) const#

get unit information for the column. an empty string means either no unit attached or no support by the file format.

inline operator bool() const#

check whether this access handle is still valid.