Geant4-11
Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | Private Attributes | Static Private Attributes
G4Hdf5RFileManager Class Reference

#include <G4Hdf5RFileManager.hh>

Inheritance diagram for G4Hdf5RFileManager:
G4VRFileManager G4BaseFileManager

Public Member Functions

void AddFileName (const G4String &fileName)
 
virtual void CloseFiles () final
 
 G4Hdf5RFileManager ()=delete
 
 G4Hdf5RFileManager (const G4AnalysisManagerState &state)
 
G4String GetFileName () const
 
const std::vector< G4String > & GetFileNames () const
 
virtual G4String GetFileType () const final
 
G4String GetFullFileName (const G4String &baseFileName="", G4bool isPerThread=true) const
 
hid_t GetHistoRDirectory (const G4String &fileName, const G4String &dirName, G4bool isPerThread)
 
G4String GetHnFileName (const G4String &hnType, const G4String &hnName) const
 
template<typename HT >
std::shared_ptr< G4VTHnRFileManager< HT > > GetHnRFileManager () const
 
G4String GetNtupleFileName (const G4String &ntupleName) const
 
G4String GetNtupleFileName (G4int ntupleFileNumber) const
 
hid_t GetNtupleRDirectory (const G4String &fileName, const G4String &dirName, G4bool isPerThread)
 
G4String GetPlotFileName () const
 
G4Hdf5FileGetRFile (const G4String &fileName, G4bool isPerThread)
 
virtual G4bool SetFileName (const G4String &fileName)
 
virtual ~G4Hdf5RFileManager ()=default
 

Protected Member Functions

void Message (G4int level, const G4String &action, const G4String &objectType, const G4String &objectName="", G4bool success=true) const
 

Protected Attributes

G4String fFileName
 
std::vector< G4StringfFileNames
 
std::shared_ptr< G4VTHnRFileManager< tools::histo::h1d > > fH1RFileManager { nullptr }
 
std::shared_ptr< G4VTHnRFileManager< tools::histo::h2d > > fH2RFileManager { nullptr }
 
std::shared_ptr< G4VTHnRFileManager< tools::histo::h3d > > fH3RFileManager { nullptr }
 
std::shared_ptr< G4VTHnRFileManager< tools::histo::p1d > > fP1RFileManager { nullptr }
 
std::shared_ptr< G4VTHnRFileManager< tools::histo::p2d > > fP2RFileManager { nullptr }
 
const G4AnalysisManagerStatefState
 

Private Member Functions

hid_t GetRDirectory (const G4String &directoryType, const G4String &fileName, const G4String &dirName, G4bool isPerThread)
 
hid_t OpenDirectory (hid_t file, const G4String &directoryName)
 
hid_t OpenRFile (const G4String &fileName, G4bool isPerThread)
 

Private Attributes

std::map< G4String, G4Hdf5FilefRFiles
 

Static Private Attributes

static const G4String fgkDefaultDirectoryName { "default" }
 
static constexpr std::string_view fkClass { "G4Hdf5RFileManager" }
 

Detailed Description

Definition at line 45 of file G4Hdf5RFileManager.hh.

Constructor & Destructor Documentation

◆ G4Hdf5RFileManager() [1/2]

G4Hdf5RFileManager::G4Hdf5RFileManager ( const G4AnalysisManagerState state)
explicit

Definition at line 42 of file G4Hdf5RFileManager.cc.

43 : G4VRFileManager(state)
44{
45 // Create helpers defined in the base class
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);
51}
std::shared_ptr< G4VTHnRFileManager< tools::histo::h2d > > fH2RFileManager
std::shared_ptr< G4VTHnRFileManager< tools::histo::p2d > > fP2RFileManager
std::shared_ptr< G4VTHnRFileManager< tools::histo::h3d > > fH3RFileManager
G4VRFileManager()=delete
std::shared_ptr< G4VTHnRFileManager< tools::histo::p1d > > fP1RFileManager
std::shared_ptr< G4VTHnRFileManager< tools::histo::h1d > > fH1RFileManager

References G4VRFileManager::fH1RFileManager, G4VRFileManager::fH2RFileManager, G4VRFileManager::fH3RFileManager, G4VRFileManager::fP1RFileManager, and G4VRFileManager::fP2RFileManager.

◆ G4Hdf5RFileManager() [2/2]

G4Hdf5RFileManager::G4Hdf5RFileManager ( )
delete

◆ ~G4Hdf5RFileManager()

virtual G4Hdf5RFileManager::~G4Hdf5RFileManager ( )
virtualdefault

Member Function Documentation

◆ AddFileName()

void G4BaseFileManager::AddFileName ( const G4String fileName)
inherited

Definition at line 44 of file G4BaseFileManager.cc.

45{
46 // G4cout << "registering " << fileName << " in manager of " << GetFileType() << G4endl;
47
48 // Do nothing in file name is already present
49 for ( const auto& name : fFileNames ) {
50 if ( name == fileName ) return;
51 }
52
53 fFileNames.push_back(fileName);
54}
std::vector< G4String > fFileNames
const char * name(G4int ptype)

References G4BaseFileManager::fFileNames, and G4InuclParticleNames::name().

◆ CloseFiles()

void G4Hdf5RFileManager::CloseFiles ( )
finalvirtual

Implements G4VRFileManager.

Definition at line 183 of file G4Hdf5RFileManager.cc.

184{
185 // Close all open directories and file
186 for ( auto [key, rfile] : fRFiles ) {
187 if (std::get<1>(rfile) != kInvalidId) {
188 ::H5Gclose(std::get<1>(rfile));
189 }
190 if (std::get<2>(rfile) != kInvalidId) {
191 ::H5Gclose(std::get<2>(rfile));
192 }
193 if (std::get<0>(rfile) != kInvalidId) {
194 ::H5Fclose(std::get<0>(rfile));
195 }
196 }
197}
std::map< G4String, G4Hdf5File > fRFiles
constexpr G4int kInvalidId

References fRFiles, and G4Analysis::kInvalidId.

◆ GetFileName()

G4String G4BaseFileManager::GetFileName ( ) const
inlineinherited

Definition at line 105 of file G4BaseFileManager.hh.

105 {
106 return fFileName;
107}

References G4BaseFileManager::fFileName.

◆ GetFileNames()

const std::vector< G4String > & G4BaseFileManager::GetFileNames ( ) const
inlineinherited

Definition at line 109 of file G4BaseFileManager.hh.

109 {
110 return fFileNames;
111}

References G4BaseFileManager::fFileNames.

Referenced by G4GenericFileManager::OpenFiles().

◆ GetFileType()

virtual G4String G4Hdf5RFileManager::GetFileType ( ) const
inlinefinalvirtual

Reimplemented from G4BaseFileManager.

Definition at line 52 of file G4Hdf5RFileManager.hh.

52{ return "hdf5"; }

◆ GetFullFileName()

G4String G4BaseFileManager::GetFullFileName ( const G4String baseFileName = "",
G4bool  isPerThread = true 
) const
inherited

Definition at line 63 of file G4BaseFileManager.cc.

65{
66 G4String fileName(baseFileName);
67 if ( fileName == "" ) fileName = fFileName;
68
69 // Take out file extension
70 auto name = G4Analysis::GetBaseName(fileName);
71
72 // Add thread Id to a file name if MT processing
73 if ( isPerThread && ! fState.GetIsMaster() ) {
74 std::ostringstream os;
76 name.append("_t");
77 name.append(os.str());
78 }
79
80 // Add (back if it was present or is defined) file extension
81 auto extension = G4Analysis::GetExtension(fileName, GetFileType());
82 if ( extension.size() ) {
83 name.append(".");
84 name.append(extension);
85 }
86
87 return name;
88}
virtual G4String GetFileType() const
const G4AnalysisManagerState & fState
G4String GetExtension(const G4String &fileName, const G4String &defaultExtension="")
G4String GetBaseName(const G4String &fileName)
G4int G4GetThreadId()
Definition: G4Threading.cc:122

References G4BaseFileManager::fFileName, G4Analysis::GetBaseName(), and G4InuclParticleNames::name().

Referenced by G4Hdf5FileManager::GetNtupleFileName(), G4RootFileManager::GetNtupleFileName(), G4XmlRFileManager::GetRFile(), GetRFile(), G4RootRFileManager::GetRFile(), G4Hdf5FileManager::OpenFile(), G4RootFileManager::OpenFile(), G4XmlFileManager::OpenFile(), G4XmlRFileManager::OpenRFile(), OpenRFile(), and G4RootRFileManager::OpenRFile().

◆ GetHistoRDirectory()

hid_t G4Hdf5RFileManager::GetHistoRDirectory ( const G4String fileName,
const G4String dirName,
G4bool  isPerThread 
)

Definition at line 169 of file G4Hdf5RFileManager.cc.

171{
172 return GetRDirectory("histograms", fileName, dirName, isPerThread);
173}
hid_t GetRDirectory(const G4String &directoryType, const G4String &fileName, const G4String &dirName, G4bool isPerThread)

References GetRDirectory().

◆ GetHnFileName()

G4String G4BaseFileManager::GetHnFileName ( const G4String hnType,
const G4String hnName 
) const
inherited

Definition at line 91 of file G4BaseFileManager.cc.

93{
94 return G4Analysis::GetHnFileName(fFileName, GetFileType(), hnType, hnName);
95}
G4String GetHnFileName(const G4String &fileName, const G4String &fileType, const G4String &hnType, const G4String &hnName)

References G4BaseFileManager::fFileName, G4BaseFileManager::GetFileType(), and G4Analysis::GetHnFileName().

◆ GetHnRFileManager()

template<typename HT >
std::shared_ptr< G4VTHnRFileManager< HT > > G4VRFileManager::GetHnRFileManager ( ) const
inherited

◆ GetNtupleFileName() [1/2]

G4String G4BaseFileManager::GetNtupleFileName ( const G4String ntupleName) const
inherited

Definition at line 98 of file G4BaseFileManager.cc.

99{
101}
G4String GetNtupleFileName(const G4String &fileName, const G4String &fileType, const G4String &ntupleName)

References G4BaseFileManager::fFileName, G4BaseFileManager::GetFileType(), and G4Analysis::GetNtupleFileName().

◆ GetNtupleFileName() [2/2]

G4String G4BaseFileManager::GetNtupleFileName ( G4int  ntupleFileNumber) const
inherited

◆ GetNtupleRDirectory()

hid_t G4Hdf5RFileManager::GetNtupleRDirectory ( const G4String fileName,
const G4String dirName,
G4bool  isPerThread 
)

Definition at line 176 of file G4Hdf5RFileManager.cc.

178{
179 return GetRDirectory("ntuples", fileName, dirName, isPerThread);
180}

References GetRDirectory().

◆ GetPlotFileName()

G4String G4BaseFileManager::GetPlotFileName ( ) const
inherited

Definition at line 110 of file G4BaseFileManager.cc.

111{
113}
G4String GetPlotFileName(const G4String &fileName)

References G4BaseFileManager::fFileName, and G4Analysis::GetPlotFileName().

◆ GetRDirectory()

hid_t G4Hdf5RFileManager::GetRDirectory ( const G4String directoryType,
const G4String fileName,
const G4String dirName,
G4bool  isPerThread 
)
private

Definition at line 100 of file G4Hdf5RFileManager.cc.

104{
105 // Get or open a file
106 auto rfile = GetRFile(fileName, isPerThread);
107 if ( ! rfile ) {
108 // Try to open it if not found in the map
109 if ( OpenRFile(fileName, isPerThread) < 0 ) return kInvalidId;
110 rfile = GetRFile(fileName, isPerThread);
111 }
112
113 auto isHistograms = (directoryType == "histograms");
114
115 // Get directory if already open
116 hid_t directory = kInvalidId;
117 if ( isHistograms ) {
118 directory = std::get<1>(*rfile);
119 } else {
120 directory = std::get<2>(*rfile);
121 }
122 if ( directory != kInvalidId ) {
123 return directory;
124 }
125
126 // Use default directory name if not specified
127 auto newDirName = dirName;
128 if ( newDirName == "" ) {
129 // Create the default directory if the name is not set and the default directory
130 // does not yet exist
131 newDirName = fgkDefaultDirectoryName;
132 newDirName += "_";
133 newDirName += directoryType;
134 }
135
136 // Open directory
137 directory = OpenDirectory(std::get<0>(*rfile), newDirName);
138
139 // Update
140 if ( isHistograms ) {
141 std::get<1>(*rfile) = directory;
142 } else {
143 std::get<2>(*rfile) = directory;
144 }
145
146 return directory;
147}
hid_t OpenDirectory(hid_t file, const G4String &directoryName)
G4Hdf5File * GetRFile(const G4String &fileName, G4bool isPerThread)
hid_t OpenRFile(const G4String &fileName, G4bool isPerThread)
static const G4String fgkDefaultDirectoryName

References fgkDefaultDirectoryName, GetRFile(), G4Analysis::kInvalidId, OpenDirectory(), and OpenRFile().

Referenced by GetHistoRDirectory(), and GetNtupleRDirectory().

◆ GetRFile()

G4Hdf5File * G4Hdf5RFileManager::GetRFile ( const G4String fileName,
G4bool  isPerThread 
)

Definition at line 154 of file G4Hdf5RFileManager.cc.

156{
157 // Get full file name
158 G4String name = GetFullFileName(fileName, isPerThread);
159
160 auto it = fRFiles.find(name);
161 if ( it != fRFiles.end() )
162 return &(it->second);
163 else {
164 return nullptr;
165 }
166}
G4String GetFullFileName(const G4String &baseFileName="", G4bool isPerThread=true) const

References fRFiles, G4BaseFileManager::GetFullFileName(), and G4InuclParticleNames::name().

Referenced by GetRDirectory().

◆ Message()

void G4BaseFileManager::Message ( G4int  level,
const G4String action,
const G4String objectType,
const G4String objectName = "",
G4bool  success = true 
) const
inlineprotectedinherited

◆ OpenDirectory()

hid_t G4Hdf5RFileManager::OpenDirectory ( hid_t  file,
const G4String directoryName 
)
private

Definition at line 84 of file G4Hdf5RFileManager.cc.

85{
86 Message(kVL4, "open", "read directory", directoryName);
87
88 auto directory = tools_H5Gopen(file, directoryName);
89 if ( directory < 0 ) {
90 Warn("Cannot open directory " + directoryName, fkClass, "OpenDirectory");
91 return kInvalidId;
92 }
93 else {
94 Message(kVL2, "open", "read directory", directoryName);
95 return directory;
96 }
97}
void Message(G4int level, const G4String &action, const G4String &objectType, const G4String &objectName="", G4bool success=true) const
static constexpr std::string_view fkClass
constexpr G4int kVL2
constexpr G4int kVL4
void Warn(const G4String &message, const std::string_view inClass, const std::string_view inFunction)

References geant4_check_module_cycles::file, fkClass, G4Analysis::kInvalidId, G4Analysis::kVL2, G4Analysis::kVL4, G4BaseFileManager::Message(), and G4Analysis::Warn().

Referenced by GetRDirectory().

◆ OpenRFile()

hid_t G4Hdf5RFileManager::OpenRFile ( const G4String fileName,
G4bool  isPerThread 
)
private

Definition at line 58 of file G4Hdf5RFileManager.cc.

60{
61 // Get full file name
62 G4String name = GetFullFileName(fileName, isPerThread);
63
64 Message(kVL4, "open", "read analysis file", name);
65
66 // create new file
67 hid_t newFile = H5Fopen(name, H5F_ACC_RDONLY, H5P_DEFAULT);
68 if ( newFile < 0 ) {
69 Warn("Cannot open file " + name, fkClass, "OpenRFile");
70 return kInvalidId;
71 }
72
73 // newFile->add_unziper('Z',tools::decompress_buffer);
74
75 // add file in a map
77
78 Message(kVL1, "open", "read analysis file", name);
79
80 return newFile;
81}
std::tuple< hid_t, hid_t, hid_t > G4Hdf5File
constexpr G4int kVL1

References fkClass, fRFiles, G4BaseFileManager::GetFullFileName(), G4Analysis::kInvalidId, G4Analysis::kVL1, G4Analysis::kVL4, G4BaseFileManager::Message(), G4InuclParticleNames::name(), and G4Analysis::Warn().

Referenced by GetRDirectory().

◆ SetFileName()

G4bool G4BaseFileManager::SetFileName ( const G4String fileName)
inlinevirtualinherited

Reimplemented in G4VFileManager.

Definition at line 99 of file G4BaseFileManager.hh.

99 {
100 // CHECK if still needed in this base class
101 fFileName = fileName;
102 return true;
103}

References G4BaseFileManager::fFileName.

Referenced by G4VFileManager::SetFileName().

Field Documentation

◆ fFileName

G4String G4BaseFileManager::fFileName
protectedinherited

◆ fFileNames

std::vector<G4String> G4BaseFileManager::fFileNames
protectedinherited

◆ fgkDefaultDirectoryName

const G4String G4Hdf5RFileManager::fgkDefaultDirectoryName { "default" }
inlinestaticprivate

Definition at line 74 of file G4Hdf5RFileManager.hh.

Referenced by GetRDirectory().

◆ fH1RFileManager

std::shared_ptr<G4VTHnRFileManager<tools::histo::h1d> > G4VRFileManager::fH1RFileManager { nullptr }
protectedinherited

◆ fH2RFileManager

std::shared_ptr<G4VTHnRFileManager<tools::histo::h2d> > G4VRFileManager::fH2RFileManager { nullptr }
protectedinherited

◆ fH3RFileManager

std::shared_ptr<G4VTHnRFileManager<tools::histo::h3d> > G4VRFileManager::fH3RFileManager { nullptr }
protectedinherited

◆ fkClass

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

Definition at line 73 of file G4Hdf5RFileManager.hh.

Referenced by OpenDirectory(), and OpenRFile().

◆ fP1RFileManager

std::shared_ptr<G4VTHnRFileManager<tools::histo::p1d> > G4VRFileManager::fP1RFileManager { nullptr }
protectedinherited

◆ fP2RFileManager

std::shared_ptr<G4VTHnRFileManager<tools::histo::p2d> > G4VRFileManager::fP2RFileManager { nullptr }
protectedinherited

◆ fRFiles

std::map<G4String, G4Hdf5File> G4Hdf5RFileManager::fRFiles
private

Definition at line 77 of file G4Hdf5RFileManager.hh.

Referenced by CloseFiles(), GetRFile(), and OpenRFile().

◆ fState

const G4AnalysisManagerState& G4BaseFileManager::fState
protectedinherited

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