REASH5File.h
Go to the documentation of this file.
1 #ifndef _io_REASH5File_h_
2 #define _io_REASH5File_h_
3 
4 #include <io/REASH5IOException.h>
5 #include <io/VEventFile.h>
6 #include <fstream>
7 #include <vector>
8 #include <string>
9 #include "H5Cpp.h"
10 #include <limits>
11 
12 
13 namespace evt {
14  class Event;
15  class ShowerSimData;
16 }
17 
18 namespace utl {
19  class Branch;
20 }
21 
22 namespace io {
23 
24  class CorsikaShowerFile;
25  //class REASH5Header;
26  //class REASH5Shower;
27 
28 
40  class REASH5File : public VEventFile {
41 
42  public:
43  REASH5File() { }
44  REASH5File(const std::string& fileName, const Mode mode = eRead,
45  utl::Branch* const b = nullptr);
46 
47  virtual ~REASH5File();
48 
49  void Open(const std::string& fileName, const Mode mode = eRead,
50  utl::Branch* const b = nullptr) override;
51 
52  void Close() override;
53 
54  Status Read(evt::Event& event) override;
55 
56  void Write(const evt::Event& event) override;
57 
58  Status FindEvent(const unsigned int eventId) override;
59 
60  Status GotoPosition(const unsigned int position) override;
61 
62  int GetNEvents() override;
63 
65  //REASH5FileParticleIterator* GetREASH5FileParticleIterator() const;
66 
67  private:
68  unsigned int fCurrentPosition = 0;
69  std::vector<std::string> fBinFileList;
70  H5::H5File fReasH5;
71  std::string fOrigDirectory;
72  std::string fReasDirectory;
73 
75 
76  template<typename T>
77  static
78  T
79  ReadAttribute(H5::Group group, const std::string& attributeName)
80  {
81  if (group.attrExists(attributeName)) {
82  T tmp = T();
83  H5::Attribute attr = group.openAttribute(attributeName);
84  H5::DataType type = attr.getDataType();
85  attr.read(type, &tmp);
86  return tmp;
87  }
88  throw utl::NonExistentComponentException(attributeName + "does not exist");
89  }
90 
91  static herr_t AddObserver(hid_t loc_id, const char* const name, void* const operator_data);
92 
93  };
94 
95 }
96 
97 
98 #endif
Status Read(evt::Event &event) override
read current event advance cursor by 1
Definition: REASH5File.cc:234
static herr_t AddObserver(hid_t loc_id, const char *const name, void *const operator_data)
Definition: REASH5File.cc:79
std::vector< std::string > fBinFileList
Definition: REASH5File.h:69
Mode
Available open modes.
Definition: IoCodes.h:16
Base class for exceptions trying to access non-existing components.
unsigned int fCurrentPosition
Definition: REASH5File.h:68
CorsikaShowerFile * fCorsikaShowerFile
Definition: REASH5File.h:74
Class representing a document branch.
Definition: Branch.h:107
Status
Return code for seek operation.
Definition: IoCodes.h:24
virtual ~REASH5File()
Definition: REASH5File.cc:160
Read data from the output of CORSIKA.
static T ReadAttribute(H5::Group group, const std::string &attributeName)
Definition: REASH5File.h:79
std::string fReasDirectory
Definition: REASH5File.h:72
Read REASH5 simulation output.
Definition: REASH5File.h:40
void Close() override
Definition: REASH5File.cc:222
H5::H5File fReasH5
Definition: REASH5File.h:70
void Write(const evt::Event &event) override
Definition: REASH5File.cc:403
int GetNEvents() override
Definition: REASH5File.cc:442
Status FindEvent(const unsigned int eventId) override
seek Event id set cursor there
Definition: REASH5File.cc:412
void Open(const std::string &fileName, const Mode mode=eRead, utl::Branch *const b=nullptr) override
Definition: REASH5File.cc:168
Status GotoPosition(const unsigned int position) override
goto by position in the file
Definition: REASH5File.cc:420
std::string fOrigDirectory
Definition: REASH5File.h:71

, generated on Tue Sep 26 2023.