ATTPCROOT  0.3.0-alpha
A ROOT-based framework for analyzing data from active target detectors
AtHDFUnpacker.h
Go to the documentation of this file.
1 /*********************************************************************
2  *
3  *********************************************************************/
4 
5 #ifndef _AtHDFUNPACKER_H_
6 #define _AtHDFUNPACKER_H_
7 
8 #include "AtUnpacker.h"
9 
10 #include <Rtypes.h>
11 
12 #include <H5Cpp.h> // for hsize_t, herr_t
13 #include <H5Dpublic.h>
14 #include <H5Ipublic.h>
15 #include <H5Lpublic.h>
16 #include <H5Ppublic.h>
17 #include <H5Spublic.h>
18 #include <stdint.h>
19 
20 #include <cstddef>
21 #include <string>
22 #include <tuple>
23 #include <vector>
24 
25 class AtRawEvent;
26 class AtPad;
27 struct AtPadReference;
28 class TBuffer;
29 class TClass;
30 class TMemberInspector;
31 
32 class AtHDFUnpacker : public AtUnpacker {
33 
34 protected:
37 
38  std::size_t fFirstEvent{};
39  std::size_t fLastEvent{};
40 
41 public:
42  AtHDFUnpacker(mapPtr map);
43  ~AtHDFUnpacker() = default;
44 
45  void SetBaseLineSubtraction(Bool_t value) { fIsBaseLineSubtraction = value; }
46  void SetNumberTimestamps(int numTimestamps) { fNumberTimestamps = numTimestamps; };
47 
48  void Init() override;
49  void FillRawEvent(AtRawEvent &event) override;
50  bool IsLastEvent() override;
51  Long64_t GetNumEvents() override;
52 
53 protected:
54  enum class IO_MODE { READ, WRITE };
55 
56  virtual std::size_t open(char const *file);
57  virtual void setFirstAndLastEventNum();
58  virtual void processData();
59  virtual void processPad(std::size_t padIndex);
60  virtual std::size_t n_pads(std::string i_raw_event);
61  virtual std::vector<int16_t> pad_raw_data(std::size_t i_pad);
62  hid_t open_file(char const *file, IO_MODE mode);
63  std::tuple<hid_t, hsize_t> open_group(hid_t fileId, char const *group);
64  std::tuple<hid_t, std::vector<hsize_t>> open_dataset(hid_t locId, char const *dataset);
65  // Returns the id of the dataspace and the dimesnions in the vector
66  void close_file(hid_t file);
67  void close_group(hid_t group);
68  void close_dataset(hid_t dataset);
69  void end_raw_event();
70  Float_t getBaseline(const std::vector<int16_t> &data);
71 
72  template <typename T>
73  void read_slab(hid_t dataset, hsize_t *counts, hsize_t *offsets, hsize_t *dims_out, T *data)
74  {
75  hid_t dataspace = H5Dget_space(dataset);
76  H5Sselect_hyperslab(dataspace, H5S_SELECT_SET, offsets, nullptr, counts, nullptr);
77  hid_t memspace = H5Screate_simple(2, dims_out, nullptr);
78  H5Dread(dataset, H5T_NATIVE_INT16, memspace, dataspace, H5P_DEFAULT, data);
79  H5Sclose(memspace);
80  H5Sclose(dataspace);
81  }
82 
83  hid_t _file{};
84  hid_t _group{};
85  hid_t _dataset{};
86  std::vector<std::string> _eventsbyname;
87 
88 private:
89  void setEventIDAndTimestamps();
90  AtPad *createPadAndSetIsAux(const AtPadReference &padRef);
91  void setDimensions(AtPad *pad);
92  void setAdc(AtPad *pad, const std::vector<int16_t> &data);
93 
94  // Following methods satisfy the data_handler interface
95  std::vector<uint64_t> get_header(std::string headerName);
96  std::size_t datasets();
97  static herr_t file_info(hid_t loc_id, const char *name, const H5L_info_t *linfo, void *opdata);
98  void close();
99  std::string get_event_name(std::size_t idx);
100  ClassDefOverride(AtHDFUnpacker, 1);
101 };
102 
103 #endif
AtHDFUnpacker::GetNumEvents
Long64_t GetNumEvents() override
Definition: AtHDFUnpacker.cxx:63
AtHDFUnpacker::_file
hid_t _file
Definition: AtHDFUnpacker.h:83
AtHDFUnpacker::IO_MODE::READ
@ READ
AtHDFUnpacker::n_pads
virtual std::size_t n_pads(std::string i_raw_event)
Definition: AtHDFUnpacker.cxx:319
AtHDFUnpacker::setFirstAndLastEventNum
virtual void setFirstAndLastEventNum()
Definition: AtHDFUnpacker.cxx:227
AtHDFUnpacker::_dataset
hid_t _dataset
Definition: AtHDFUnpacker.h:85
AtHDFUnpacker::fNumberTimestamps
Int_t fNumberTimestamps
Definition: AtHDFUnpacker.h:35
AtHDFUnpacker::read_slab
void read_slab(hid_t dataset, hsize_t *counts, hsize_t *offsets, hsize_t *dims_out, T *data)
Definition: AtHDFUnpacker.h:73
AtHDFUnpacker::fIsBaseLineSubtraction
Bool_t fIsBaseLineSubtraction
Definition: AtHDFUnpacker.h:36
AtHDFUnpacker::SetBaseLineSubtraction
void SetBaseLineSubtraction(Bool_t value)
Definition: AtHDFUnpacker.h:45
AtHDFUnpacker::end_raw_event
void end_raw_event()
Definition: AtHDFUnpacker.cxx:367
AtHDFUnpacker::open_file
hid_t open_file(char const *file, IO_MODE mode)
Definition: AtHDFUnpacker.cxx:155
AtHDFUnpacker::processData
virtual void processData()
Definition: AtHDFUnpacker.cxx:91
AtHDFUnpacker::close_group
void close_group(hid_t group)
Definition: AtHDFUnpacker.cxx:213
AtHDFUnpacker::_eventsbyname
std::vector< std::string > _eventsbyname
Definition: AtHDFUnpacker.h:86
AtRawEvent
Definition: AtRawEvent.h:34
AtHDFUnpacker::IsLastEvent
bool IsLastEvent() override
Definition: AtHDFUnpacker.cxx:67
AtHDFUnpacker::open
virtual std::size_t open(char const *file)
Definition: AtHDFUnpacker.cxx:264
AtHDFUnpacker::processPad
virtual void processPad(std::size_t padIndex)
Definition: AtHDFUnpacker.cxx:104
AtHDFUnpacker::close_file
void close_file(hid_t file)
Definition: AtHDFUnpacker.cxx:206
AtHDFUnpacker::IO_MODE
IO_MODE
Definition: AtHDFUnpacker.h:54
AtHDFUnpacker::pad_raw_data
virtual std::vector< int16_t > pad_raw_data(std::size_t i_pad)
Definition: AtHDFUnpacker.cxx:329
AtHDFUnpacker::getBaseline
Float_t getBaseline(const std::vector< int16_t > &data)
Definition: AtHDFUnpacker.cxx:136
AtHDFUnpacker::close_dataset
void close_dataset(hid_t dataset)
Definition: AtHDFUnpacker.cxx:220
AtHDFUnpacker::FillRawEvent
void FillRawEvent(AtRawEvent &event) override
Definition: AtHDFUnpacker.cxx:51
AtHDFUnpacker::AtHDFUnpacker
AtHDFUnpacker(mapPtr map)
Definition: AtHDFUnpacker.cxx:35
AtHDFUnpacker::IO_MODE::WRITE
@ WRITE
AtUnpacker.h
AtHDFUnpacker::open_group
std::tuple< hid_t, hsize_t > open_group(hid_t fileId, char const *group)
Definition: AtHDFUnpacker.cxx:171
AtHDFUnpacker::~AtHDFUnpacker
~AtHDFUnpacker()=default
mapPtr
std::shared_ptr< AtMap > mapPtr
Definition: AtUnpacker.h:17
AtPad
Container class for AtPadBase objects.
Definition: AtPad.h:38
AtHDFUnpacker
Definition: AtHDFUnpacker.h:32
AtHDFUnpacker::_group
hid_t _group
Definition: AtHDFUnpacker.h:84
AtPadReference
Definition: AtPadReference.h:20
AtUnpacker
Definition: AtUnpacker.h:19
AtHDFUnpacker::open_dataset
std::tuple< hid_t, std::vector< hsize_t > > open_dataset(hid_t locId, char const *dataset)
Definition: AtHDFUnpacker.cxx:186
AtHDFUnpacker::fFirstEvent
std::size_t fFirstEvent
Definition: AtHDFUnpacker.h:38
AtHDFUnpacker::Init
void Init() override
Definition: AtHDFUnpacker.cxx:37
AtHDFUnpacker::SetNumberTimestamps
void SetNumberTimestamps(int numTimestamps)
Definition: AtHDFUnpacker.h:46
AtHDFUnpacker::fLastEvent
std::size_t fLastEvent
Definition: AtHDFUnpacker.h:39