16#ifndef _RMG_ANALYSIS_READER_HH_
17#define _RMG_ANALYSIS_READER_HH_
22#include "G4AutoLock.hh"
23#include "G4VAnalysisReader.hh"
25#include "RMGConfig.hh"
41class RMGAnalysisReader final {
49 friend class RMGAnalysisReader;
55 Access(Access
const&) =
delete;
56 Access& operator=(Access&) =
delete;
57 Access& operator=(Access
const&) =
delete;
58 Access& operator=(Access&&) =
delete;
66 if (fLock) { fLock.unlock(); }
73 for (
size_t i = 0; i < offset; i++) fReader->GetNtupleRow(fNtupleId);
80 return fReader->GetNtupleRow(fNtupleId);
85 const std::string& name,
87 const std::vector<std::string>& allowed_units = {}
90 AssertUnit(name, allowed_units);
91 return fReader->SetNtupleDColumn(fNtupleId, name, value);
96 const std::string& name,
98 const std::vector<std::string>& allowed_units = {}
101 AssertUnit(name, allowed_units);
102 return fReader->SetNtupleFColumn(fNtupleId, name, value);
107 const std::string& name,
109 const std::vector<std::string>& allowed_units = {}
112 AssertUnit(name, allowed_units);
113 return fReader->SetNtupleIColumn(fNtupleId, name, value);
119 [[nodiscard]] std::string
GetUnit(
const std::string& name)
const;
123 operator bool()
const {
return fReader !=
nullptr && fNtupleId >= 0 && fLock; }
132 const std::map<std::string, std::string>*
u,
135 : fReader(reader), fNtupleId(nt), fUnits(
u), fLock(
std::move(lock)), fCanSetup(setup) {};
136 Access(Access&&) =
default;
138 void AssertUnit(
const std::string& name,
const std::vector<std::string>& allowed_units)
const;
139 void AssertSetup(
bool setup)
const;
143 const std::map<std::string, std::string>* fUnits;
145 bool fCanSetup =
false;
148 RMGAnalysisReader() =
default;
149 ~RMGAnalysisReader() =
default;
151 RMGAnalysisReader(RMGAnalysisReader
const&) =
delete;
152 RMGAnalysisReader& operator=(RMGAnalysisReader
const&) =
delete;
153 RMGAnalysisReader(RMGAnalysisReader&&) =
delete;
154 RMGAnalysisReader& operator=(RMGAnalysisReader&&) =
delete;
173 const std::string& file_name,
174 std::string ntuple_dir_name,
175 std::string ntuple_name,
177 std::string force_ext =
""
182 const std::string& file_name,
183 std::string ntuple_dir_name,
184 std::string ntuple_name,
185 std::string force_ext =
""
204 [[nodiscard]] G4AutoLock
GetLock()
const;
212 static G4Mutex fMutex;
217 std::map<std::string, std::string> fUnits;
218 bool fHasUnits =
false;
220 std::string fFileName;
221 bool fFileIsTemp =
false;
thread-safe access handle to the underlying reader. This handle can be used to set-up ntuple reading ...
Definition RMGAnalysisReader.hh:48
auto SetNtupleIColumn(const std::string &name, G4int &value, const std::vector< std::string > &allowed_units={})
wraps SetNtupleIColumn() of G4VAnalysisReader.
Definition RMGAnalysisReader.hh:106
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 t...
Definition RMGAnalysisReader.cc:212
auto SetNtupleFColumn(const std::string &name, G4float &value, const std::vector< std::string > &allowed_units={})
wraps SetNtupleFColumn() of G4VAnalysisReader.
Definition RMGAnalysisReader.hh:95
auto SetNtupleDColumn(const std::string &name, G4double &value, const std::vector< std::string > &allowed_units={})
wraps SetNtupleDColumn() of G4VAnalysisReader.
Definition RMGAnalysisReader.hh:84
void Seek(size_t offset)
read and discard a number of rows at the current position.
Definition RMGAnalysisReader.hh:71
void unlock()
unlock this access handle before it exits the scope.
Definition RMGAnalysisReader.hh:62
auto GetNtupleRow()
wraps GetNtupleRow() of G4VAnalysisReader.
Definition RMGAnalysisReader.hh:78
auto & GetFileName() const
get the file name of the current open file, or an empty string.
Definition RMGAnalysisReader.hh:208
G4AutoLock GetLock() const
acquires a global lock to the analysis reader mutex.
Definition RMGAnalysisReader.cc:197
void CloseFile()
if any file is open for reading, close the reader. Also clean-up temporary files.
Definition RMGAnalysisReader.cc:166
Access GetLockedReader() const
get an access handle to the current underlying G4VAnalysisReader.
Definition RMGAnalysisReader.cc:190
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 connec...
Definition RMGAnalysisReader.cc:58