34#include "tools/hdf5/h2file"
35#include "tools/hdf5/group_exists"
46 fH1RFileManager = std::make_shared<G4Hdf5HnRFileManager<histo::h1d>>(
this);
47 fH2RFileManager = std::make_shared<G4Hdf5HnRFileManager<histo::h2d>>(
this);
48 fH3RFileManager = std::make_shared<G4Hdf5HnRFileManager<histo::h3d>>(
this);
49 fP1RFileManager = std::make_shared<G4Hdf5HnRFileManager<histo::p1d>>(
this);
50 fP2RFileManager = std::make_shared<G4Hdf5HnRFileManager<histo::p2d>>(
this);
67 hid_t newFile = H5Fopen(
name, H5F_ACC_RDONLY, H5P_DEFAULT);
86 Message(
kVL4,
"open",
"read directory", directoryName);
88 auto directory = tools_H5Gopen(
file, directoryName);
89 if ( directory < 0 ) {
90 Warn(
"Cannot open directory " + directoryName,
fkClass,
"OpenDirectory");
94 Message(
kVL2,
"open",
"read directory", directoryName);
106 auto rfile =
GetRFile(fileName, isPerThread);
110 rfile =
GetRFile(fileName, isPerThread);
113 auto isHistograms = (directoryType ==
"histograms");
117 if ( isHistograms ) {
118 directory = std::get<1>(*rfile);
120 directory = std::get<2>(*rfile);
127 auto newDirName = dirName;
128 if ( newDirName ==
"" ) {
133 newDirName += directoryType;
140 if ( isHistograms ) {
141 std::get<1>(*rfile) = directory;
143 std::get<2>(*rfile) = directory;
162 return &(it->second);
172 return GetRDirectory(
"histograms", fileName, dirName, isPerThread);
179 return GetRDirectory(
"ntuples", fileName, dirName, isPerThread);
186 for (
auto [key, rfile] :
fRFiles ) {
188 ::H5Gclose(std::get<1>(rfile));
191 ::H5Gclose(std::get<2>(rfile));
194 ::H5Fclose(std::get<0>(rfile));
std::tuple< hid_t, hid_t, hid_t > G4Hdf5File
G4String GetFullFileName(const G4String &baseFileName="", G4bool isPerThread=true) const
void Message(G4int level, const G4String &action, const G4String &objectType, const G4String &objectName="", G4bool success=true) const
hid_t OpenDirectory(hid_t file, const G4String &directoryName)
G4Hdf5File * GetRFile(const G4String &fileName, G4bool isPerThread)
virtual void CloseFiles() final
hid_t GetNtupleRDirectory(const G4String &fileName, const G4String &dirName, G4bool isPerThread)
hid_t OpenRFile(const G4String &fileName, G4bool isPerThread)
hid_t GetRDirectory(const G4String &directoryType, const G4String &fileName, const G4String &dirName, G4bool isPerThread)
static const G4String fgkDefaultDirectoryName
hid_t GetHistoRDirectory(const G4String &fileName, const G4String &dirName, G4bool isPerThread)
std::map< G4String, G4Hdf5File > fRFiles
static constexpr std::string_view fkClass
G4Hdf5RFileManager()=delete
std::shared_ptr< G4VTHnRFileManager< tools::histo::h2d > > fH2RFileManager
std::shared_ptr< G4VTHnRFileManager< tools::histo::p2d > > fP2RFileManager
std::shared_ptr< G4VTHnRFileManager< tools::histo::h3d > > fH3RFileManager
std::shared_ptr< G4VTHnRFileManager< tools::histo::p1d > > fP1RFileManager
std::shared_ptr< G4VTHnRFileManager< tools::histo::h1d > > fH1RFileManager
constexpr G4int kInvalidId
void Warn(const G4String &message, const std::string_view inClass, const std::string_view inFunction)
const char * name(G4int ptype)