GSI Object Oriented Online Offline (Go4) GO4-6.4.0
Loading...
Searching...
No Matches
TGo4HDF5DataHandle.h
Go to the documentation of this file.
1// $Id$
2//-----------------------------------------------------------------------
3// The GSI Online Offline Object Oriented (Go4) Project
4// Experiment Data Processing at EE department, GSI
5//-----------------------------------------------------------------------
6// Copyright (C) 2000- GSI Helmholtzzentrum fuer Schwerionenforschung GmbH
7// Planckstr. 1, 64291 Darmstadt, Germany
8// Contact: http://go4.gsi.de
9//-----------------------------------------------------------------------
10// This software can be used under the license agreements as stated
11// in Go4License.txt file which is part of the distribution.
12//-----------------------------------------------------------------------
13
14#ifndef TGO4HDF5DATAHANDLE_H
15#define TGO4HDF5DATAHANDLE_H
16
17
18#include "Go4HDF5.h"
19#include "TString.h"
20#include "TObject.h"
21
22#include "H5Cpp.h"
23
24class TClass;
25class TDataMember;
27class TGo4HDF5Source;
28
30
32public:
33
35
37 TGo4HDF5DataHandle* CreateDataHandle(const char *name, size_t datasize, const char *type);
38};
39
40
49
50public:
51
53 TGo4HDF5DataHandle(const char *name, size_t datasize);
54 virtual ~TGo4HDF5DataHandle();
55
57 H5::CompType *GetType() const { return fxType; }
58
59 const char *GetTypeName() const { return fxTypeName.Data(); }
60
61 void *Data() const { return fxData; }
62
64 void InsertTypeMember(const H5std_string &name, size_t offset, const H5::DataType &new_member);
65
67 void SetParentOffset(size_t off) { fiParentOffset = off; }
68
69
71 virtual void SetObjectPointer(void *memptr);
72
76
77
80 void SetTopEventClass(const char *classname);
81
83 void SetMemberName(const char *name) { fxMemberHandle = name; }
84
86 void SetMemberClass(const char *clname) { fxMemberClass = clname; }
87
90 virtual void BuildReadDataset(H5::H5File *file, TGo4HDF5Source* parent);
91
93 virtual void BuildWriteDataset(H5::H5File *file);
94
96 virtual void Read(hsize_t sequencenum, H5::H5File *file);
97
99 virtual void Write(hsize_t sequencenum, H5::H5File *file);
100
104 TGo4HDF5DataHandle *AddSubMember(const char *name, size_t datasize, const char *collectiontype = nullptr);
105
106 TGo4HDF5DataHandle *GetSubMember(UInt_t ix) { return ix < fxSubcomponents.size() ? fxSubcomponents[ix] : nullptr; }
107
110 TGo4HDF5DataHandle *FindSubMember(const char *name);
111
112 void SetActive(Bool_t on) { fbDataSetActive = on; }
113
114 void SetAllSubMembersActive(Bool_t on);
115
117
118 protected:
120 TString fxTypeName;
121
123 H5::CompType* fxType{nullptr};
124
125
127 H5::DataSet fxDataSet;
128
130 H5::DataSpace* fxDataSpace{nullptr};
131
133 H5::DataSpace fxFileSpace;
134
136 ULong_t fiEntries{0};
137
139 void *fxData{nullptr};
140
142 size_t fiParentOffset{0};
143
145 size_t fiDataSize{0};
146
148 size_t fiReadOffset{0};
149
151 std::vector<TGo4HDF5DataHandle *> fxSubcomponents;
152
155
158
161
163 TString fxEventClass;
164
167
169 Bool_t fbDataSetExists{kFALSE};
170
173 Bool_t fbDataSetActive{kFALSE};
174
175};
176
177
178
180
181
188{
189
190public:
191
193 TGo4HDF5BasicDataHandle(const char *name, size_t datasize);
194 virtual ~TGo4HDF5BasicDataHandle();
195
198 void BuildReadDataset(H5::H5File*file, TGo4HDF5Source* parent) override;
199
201 void BuildWriteDataset(H5::H5File* file) override;
202
203
205 void Read(hsize_t sequencenum, H5::H5File*file) override;
206
208 void Write(hsize_t sequencenum, H5::H5File*file) override;
209
210
211protected:
212
214 void AllocReadBuffer(size_t size);
215
216
218 Char_t *fxReadBuffer{nullptr};
219
220};
221
222
223
225
226
227
228
235
236{
237
238public:
239
241 TGo4HDF5CompositeDataHandle(const char *name, size_t datasize);
243
244
245
248 void BuildReadDataset(H5::H5File*file, TGo4HDF5Source* parent) override;
249
251 void BuildWriteDataset(H5::H5File* file) override;
252
253
255 void Read(hsize_t sequencenum, H5::H5File* file) override;
256
258 void Write(hsize_t sequencenum, H5::H5File* file) override;
259
260};
261
262
264
267{
268 hvl_t fxArray;
269};
270
271
272
280{
281
282public:
283
285 TGo4HDF5VectorDataHandle(const char *name, size_t datasize);
287
288
290 void SetElementSize(size_t len) {fiElementSize=len;}
291
293 void SetObjectPointer(void *memptr) override;
294
297 void BuildReadDataset(H5::H5File*file, TGo4HDF5Source* parent) override;
298
300 void BuildWriteDataset(H5::H5File* file) override;
301
303 void Read(hsize_t sequencenum, H5::H5File* file) override;
304
306 void Write(hsize_t sequencenum, H5::H5File* ile) override;
307
308protected:
309
311 H5::CompType *fxCollection{nullptr};
312
313
316
318 size_t fiElementSize{0};//
319
320};
321
322
324public:
325 unsigned long fx_Begin_ptr;
326 unsigned long fx_End_ptr;
327 unsigned long fx_Cap_ptr;
328};
329
330
331
340{
341
342public:
343
345 TGo4HDF5SubVectorDataHandle(const char *name, size_t datasize);
347
349 void SetObjectPointer(void *memptr) override;
350
353 void BuildReadDataset(H5::H5File*file, TGo4HDF5Source* parent) override;
354
356 void BuildWriteDataset(H5::H5File* file) override;
357
359 void Read(hsize_t sequencenum, H5::H5File* file) override;
360
362 void Write(hsize_t sequencenum, H5::H5File* file) override;
363
364 void SetInnerClassName(const char *nm) {fxInnerClassName=nm;}
365
366
367protected:
368
371
372};
373
374
375#endif //TGO4HDF5DATAHANDLE_H
The abstract base class for the data elements of which the unpacked events (or detector structure dat...
void Write(hsize_t sequencenum, H5::H5File *file) override
Write event of sequence number from file.
void AllocReadBuffer(size_t size)
(Re-)allocate read buffer depending on the object size read from file
void BuildWriteDataset(H5::H5File *file) override
create datasets for writing memory structure of type into file.
Char_t * fxReadBuffer
secondary read bounce buffer for hdf5
void Read(hsize_t sequencenum, H5::H5File *file) override
Read event of sequence number from file.
TGo4HDF5BasicDataHandle(const char *name, size_t datasize)
create new data handle
void BuildReadDataset(H5::H5File *file, TGo4HDF5Source *parent) override
create datasets and buffers for reading this structure from hdf5 file.
void Read(hsize_t sequencenum, H5::H5File *file) override
Read event of sequence number from file.
void Write(hsize_t sequencenum, H5::H5File *file) override
Write event of sequence number from file.
void BuildReadDataset(H5::H5File *file, TGo4HDF5Source *parent) override
create datasets and buffers for reading this structure from hdf5 file.
TGo4HDF5CompositeDataHandle(const char *name, size_t datasize)
create new data handle
void BuildWriteDataset(H5::H5File *file) override
create datasets for writing memory structure of type into file.
TGo4HDF5DataHandle * CreateDataHandle(const char *name, size_t datasize, const char *type)
create implementation of data handle by type
The base class to access a datatype with substructures in hdf5.
virtual void Write(hsize_t sequencenum, H5::H5File *file)
Write event of sequence number from file.
virtual void BuildWriteDataset(H5::H5File *file)
create datasets for writing memory structure of type into file.
void SetTopEventClass(const char *classname)
pass the top level event element class down the member hierarchy.
Bool_t fbDataSetExists
check on the fly if this handle has already created a dataset
virtual void Read(hsize_t sequencenum, H5::H5File *file)
Read event of sequence number from file.
virtual void SetObjectPointer(void *memptr)
define location of corresponding object in memory.
void SetTopEvent(TGo4EventElement *eve)
pass the top level event element down the member hierarchy.
TGo4HDF5DataHandle(const char *name, size_t datasize)
create new data handle
H5::CompType * GetType() const
return handle for type descriptor.
TGo4HDF5DataHandle * GetSubMember(UInt_t ix)
virtual void BuildReadDataset(H5::H5File *file, TGo4HDF5Source *parent)
create datasets and buffers for reading this structure from hdf5 file.
TGo4HDF5Source * fxParentSource
backpointer to parent source for exceptions
std::vector< TGo4HDF5DataHandle * > fxSubcomponents
collect sub-components of the referenced data object
TGo4HDF5DataHandle * FindSubMember(const char *name)
lookup if subcomponent of name already is in list.
void SetActive(Bool_t on)
const char * GetTypeName() const
TString fxEventClass
the top level event element classname to access the current data member from outside
void SetAllSubMembersActive(Bool_t on)
void SetMemberName(const char *name)
identifier for the member to access from outside using the top event handle
ULong_t fiEntries
number of event entries found in file dataspace
H5::DataSpace * fxDataSpace
dataspace in memory
Bool_t fbDataSetActive
we may disable this dataset temporarily from writing or reading useful for dynamic vector of vector c...
static TGo4HDF5DataHandleFactory fxFactory
TGo4HDF5DataHandle * AddSubMember(const char *name, size_t datasize, const char *collectiontype=nullptr)
create new subhandle for complex member component on heap.
TString fxMemberHandle
predefined interpreter access command e.g.
H5::DataSet fxDataSet
dataset containing the structure
H5::DataSpace fxFileSpace
dataspace in file
void InsertTypeMember(const H5std_string &name, size_t offset, const H5::DataType &new_member)
wrapper function to define contained structure member.
void SetMemberClass(const char *clname)
type of the member to access from outside
size_t fiReadOffset
begin of real eventdata payload after event object pointer
void SetParentOffset(size_t off)
remember location of this object relative to upper level object.
size_t fiDataSize
size of data structure in bytes, for redefining output dataset
size_t fiParentOffset
offset of this data structure relative to top level event object
TString fxMemberClass
classname of the entry for interpreter to operate e.g.
TString fxTypeName
identifier of the dataset
TGo4EventElement * fxEvent
the top level event element to access the current data member from outside
H5::CompType * fxType
component type representing the data structure
void * fxData
pointer to begin of data in memory
Event source which reads entries from a dataset in a hdf5 formatted file names of elements in hdf5 da...
void Read(hsize_t sequencenum, H5::H5File *file) override
Read event of sequence number from file.
TString fxInnerClassName
class that is contained in innermost vector
void Write(hsize_t sequencenum, H5::H5File *file) override
Write event of sequence number from file.
TGo4HDF5SubVectorDataHandle(const char *name, size_t datasize)
create new data handle
void BuildReadDataset(H5::H5File *file, TGo4HDF5Source *parent) override
create datasets and buffers for reading this structure from hdf5 file.
void BuildWriteDataset(H5::H5File *file) override
create datasets for writing memory structure of type into file.
void SetObjectPointer(void *memptr) override
define location of corresponding object in memory.
void SetInnerClassName(const char *nm)
H5::CompType * fxCollection
collection type with fxType as entries
size_t fiElementSize
size of the (collection element) structure
void BuildWriteDataset(H5::H5File *file) override
create datasets for writing memory structure of type into file.
void SetElementSize(size_t len)
remember size of a single element (structure) in this collection, if it is one.
TGo4HDF5VarContainer fxVarHandle
handle for variable arrays
TGo4HDF5VectorDataHandle(const char *name, size_t datasize)
create new data handle
void Write(hsize_t sequencenum, H5::H5File *ile) override
Write event of sequence number from file.
void Read(hsize_t sequencenum, H5::H5File *file) override
Read event of sequence number from file.
void SetObjectPointer(void *memptr) override
define location of corresponding object in memory.
void BuildReadDataset(H5::H5File *file, TGo4HDF5Source *parent) override
create datasets and buffers for reading this structure from hdf5 file.
hdf5 needs structure containing the hvl_t to deal with it correctly