Loading [MathJax]/extensions/TeX/AMSsymbols.js
LAL 7.7.0.1-5e288d3
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
H5FileIOTest.c
Go to the documentation of this file.
1#include <lal/LALConfig.h>
2
3#ifndef LAL_HDF5_ENABLED
4int main(void) { return 77; /* don't do any testing */ }
5#else
6
7#if defined(GENERATE_HDF5_TEST_FILE)
8#define H5_USE_110_API
9#include <hdf5.h>
10#include <hdf5_hl.h>
11#endif
12
13#include <limits.h>
14#include <stdlib.h>
15#include <string.h>
16#include <lal/LALStdlib.h>
17#include <lal/AVFactories.h>
18#include <lal/StringVector.h>
19#include <lal/Date.h>
20#include <lal/Units.h>
21#include <lal/TimeSeries.h>
22#include <lal/FrequencySeries.h>
23#include <lal/H5FileIO.h>
24
25#define FNAME "test.h5"
26#define GROUP "path/to"
27#define DSET "testdset"
28
29#define NDIM 3
30#define DIM0 2
31#define DIM1 4
32#define DIM2 3
33#define NPTS (DIM0 * DIM1 * DIM2)
34
35#define EPOCH { 123456789, 987654321 }
36static LIGOTimeGPS epoch = EPOCH;
37static LIGOTimeGPS now;
38
39static UINT2 count;
40
41static int generate_int_data(void)
42{
43 return rand() % SHRT_MAX;
44}
45
46static float generate_float_data(void)
47{
48 return rand() / (RAND_MAX + 1.0);
49}
50
51static float complex generate_complex_data(void)
52{
53 return rand() / (RAND_MAX + 1.0) + I * rand() / (RAND_MAX + 1.0);
54}
55
56static char * generate_string_data(void)
57{
58 const char *s;
59 switch (rand() % 18) {
60 case 0: s = "lorem"; break;
61 case 1: s = "ipsum"; break;
62 case 2: s = "dolor"; break;
63 case 3: s = "sit"; break;
64 case 4: s = "amet"; break;
65 case 5: s = "consectetur"; break;
66 case 6: s = "adipiscing"; break;
67 case 7: s = "elit"; break;
68 case 8: s = "sed"; break;
69 case 9: s = "eiusmod"; break;
70 case 10: s = "tempor"; break;
71 case 11: s = "incididunt"; break;
72 case 12: s = "ut"; break;
73 case 13: s = "labore"; break;
74 case 14: s = "et"; break;
75 case 15: s = "dolore"; break;
76 case 16: s = "magna"; break;
77 case 17: s = "aliqua"; break;
78 default:
79 fprintf(stderr, "Cannot get here!");
80 exit(1);
81 }
82 return XLALStringDuplicate(s);
83}
84
85#define DEFINE_WRITE_FUNCTION(type) \
86 static int write_ ## type (type *x) { \
87 LALH5File *file; \
88 LALH5File *group; \
89 XLALGPSTimeNow(&now); \
90 ++count; \
91 file = XLALH5FileOpen(FNAME, "w"); \
92 XLALH5FileAddLIGOTimeGPSAttribute(file, "creation_time_gps", &now); \
93 XLALH5FileAddScalarAttribute(file, "test_count", &count, LAL_U2_TYPE_CODE); \
94 group = XLALH5GroupOpen(file, GROUP); \
95 XLALH5FileAddStringAttribute(group, "test_data_type", #type); \
96 XLALH5FileWrite ## type (group, DSET, x); \
97 XLALH5FileClose(group); \
98 XLALH5FileClose(file); \
99 return 0; \
100 }
101
102#define DEFINE_READ_FUNCTION(type) \
103 static type * read_ ## type (void) { \
104 type *x; \
105 LALH5File *file; \
106 LALH5File *group; \
107 LIGOTimeGPS creation_time; \
108 UINT2 cnt; \
109 char t[sizeof(#type)]; \
110 file = XLALH5FileOpen(FNAME, "r"); \
111 XLALH5FileQueryLIGOTimeGPSAttributeValue(&creation_time, file, "creation_time_gps"); \
112 if (XLALGPSCmp(&creation_time, &now)) { \
113 fprintf(stderr, " FAIL\n"); \
114 exit(1); /* fail */ \
115 } \
116 XLALH5FileQueryScalarAttributeValue(&cnt, file, "test_count"); \
117 if (cnt != count) { \
118 fprintf(stderr, " FAIL\n"); \
119 exit(1); /* fail */ \
120 } \
121 group = XLALH5GroupOpen(file, GROUP); \
122 XLALH5FileQueryStringAttributeValue(t, sizeof(t), group, "test_data_type"); \
123 XLALH5FileClose(group); \
124 if (strcmp(t, #type)) { \
125 fprintf(stderr, " FAIL\n"); \
126 exit(1); /* fail */ \
127 } \
128 x = XLALH5FileRead ## type (file, GROUP "/" DSET); \
129 XLALH5FileClose(file); \
130 return x; \
131 }
132
133#define DEFINE_TEST_FUNCTION(type) \
134 static void test_ ## type (void) { \
135 type *orig; \
136 type *copy; \
137 fprintf(stderr, "Testing Read/Write of %s...", #type); \
138 orig = create_ ## type (); \
139 write_ ## type (orig); \
140 copy = read_ ## type (); \
141 if (compare_ ## type (orig, copy)) { \
142 fprintf(stderr, " FAIL\n"); \
143 exit(1); /* fail */ \
144 } \
145 XLALDestroy ## type (copy); \
146 XLALDestroy ## type (orig); \
147 fprintf(stderr, " PASS\n"); \
148 }
149
150/* VECTOR ROUTINES */
151
152#define DEFINE_CREATE_VECTOR_FUNCTION(type) \
153 static type * create_ ## type (void) { \
154 type *v; \
155 size_t i; \
156 v = XLALCreate ## type (NPTS); \
157 for (i = 0; i < NPTS; ++i) \
158 v->data[i] = GENERATE_DATA(); \
159 return v; \
160 }
161
162#define DEFINE_COMPARE_VECTOR_FUNCTION(type) \
163 static int compare_ ## type (type *v1, type *v2) { \
164 if (v1->length != v2->length) \
165 return 1; \
166 return memcmp(v1->data, v2->data, v1->length * sizeof(*v1->data)); \
167 }
168
169static LALStringVector * create_StringVector(void)
170{
172 size_t i;
174 for (i = 0; i < NPTS; ++i)
175 v->data[i] = generate_string_data();
176 return v;
177}
178
179static int compare_StringVector(LALStringVector *v1, LALStringVector *v2)
180{
181 if (v1->length != v2->length)
182 return 1;
183 for (size_t i = 0; i < v1->length; ++i)
184 if (strcmp(v1->data[i], v2->data[i]) != 0)
185 return 1;
186 return 0;
187}
188
189/* ARRAY ROUTINES */
190
191#define DEFINE_CREATE_ARRAY_FUNCTION(type) \
192 static type * create_ ## type (void) { \
193 type *a; \
194 size_t i; \
195 a = XLALCreate ## type ## L(NDIM, DIM0, DIM1, DIM2); \
196 for (i = 0; i < NPTS; ++i) \
197 a->data[i] = GENERATE_DATA(); \
198 return a; \
199 }
200
201#define DEFINE_COMPARE_ARRAY_FUNCTION(type) \
202 static int compare_ ## type (type *a1, type *a2) { \
203 size_t sz1 = 1, sz2 = 1, i; \
204 if (a1->dimLength->length != a2->dimLength->length) \
205 return 1; \
206 for (i = 0; i < a1->dimLength->length; ++i) { \
207 if (a1->dimLength->data[i] != a2->dimLength->data[i]) \
208 return 1; \
209 sz1 *= a1->dimLength->data[i]; \
210 sz2 *= a2->dimLength->data[i]; \
211 } \
212 if (sz1 != sz2) \
213 return 1; \
214 return memcmp(a1->data, a2->data, sz1 * sizeof(*a1->data)); \
215 }
216
217/* TIME/FREQUENCY SERIES ROUTINES */
218
219#define DEFINE_CREATE_TIME_FREQUENCY_SERIES_FUNCTION(type) \
220 static type * create_ ## type (void) { \
221 type *s; \
222 size_t i; \
223 s = XLALCreate ## type ("test_" #type, &epoch, 0.0, 0.1, &lalStrainUnit, NPTS); \
224 for (i = 0; i < NPTS; ++i) \
225 s->data->data[i] = GENERATE_DATA(); \
226 return s; \
227 }
228
229#define DEFINE_COMPARE_TIME_SERIES_FUNCTION(type) \
230 static int compare_ ## type (type *s1, type *s2) { \
231 int c; \
232 if (s1->data->length != s2->data->length) \
233 return 1; \
234 if ((c = strcmp(s1->name, s2->name))) \
235 return c; \
236 if ((c = (s1->deltaT > s2->deltaT) - (s1->deltaT < s2->deltaT))) \
237 return c; \
238 if ((c = (s1->f0 > s2->f0) - (s1->f0 < s2->f0))) \
239 return c; \
240 if (XLALUnitCompare(&s1->sampleUnits, &s2->sampleUnits)) \
241 return 1; \
242 return memcmp(s1->data->data, s2->data->data, s1->data->length * sizeof(*s1->data->data)); \
243 }
244
245#define DEFINE_COMPARE_FREQUENCY_SERIES_FUNCTION(type) \
246 static int compare_ ## type (type *s1, type *s2) { \
247 int c; \
248 if (s1->data->length != s2->data->length) \
249 return 1; \
250 if ((c = strcmp(s1->name, s2->name))) \
251 return c; \
252 if ((c = (s1->deltaF > s2->deltaF) - (s1->deltaF < s2->deltaF))) \
253 return c; \
254 if ((c = (s1->f0 > s2->f0) - (s1->f0 < s2->f0))) \
255 return c; \
256 if (XLALUnitCompare(&s1->sampleUnits, &s2->sampleUnits)) \
257 return 1; \
258 return memcmp(s1->data->data, s2->data->data, s1->data->length * sizeof(*s1->data->data)); \
259 }
260
261#define DEFINE_VECTOR_FUNCTIONS(type) \
262 DEFINE_WRITE_FUNCTION(type) \
263 DEFINE_READ_FUNCTION(type) \
264 DEFINE_COMPARE_VECTOR_FUNCTION(type) \
265 DEFINE_CREATE_VECTOR_FUNCTION(type) \
266 DEFINE_TEST_FUNCTION(type)
267
268#define DEFINE_ARRAY_FUNCTIONS(type) \
269 DEFINE_WRITE_FUNCTION(type) \
270 DEFINE_READ_FUNCTION(type) \
271 DEFINE_COMPARE_ARRAY_FUNCTION(type) \
272 DEFINE_CREATE_ARRAY_FUNCTION(type) \
273 DEFINE_TEST_FUNCTION(type)
274
275#define DEFINE_TIME_SERIES_FUNCTIONS(type) \
276 DEFINE_WRITE_FUNCTION(type) \
277 DEFINE_READ_FUNCTION(type) \
278 DEFINE_COMPARE_TIME_SERIES_FUNCTION(type) \
279 DEFINE_CREATE_TIME_FREQUENCY_SERIES_FUNCTION(type) \
280 DEFINE_TEST_FUNCTION(type)
281
282#define DEFINE_FREQUENCY_SERIES_FUNCTIONS(type) \
283 DEFINE_WRITE_FUNCTION(type) \
284 DEFINE_READ_FUNCTION(type) \
285 DEFINE_COMPARE_FREQUENCY_SERIES_FUNCTION(type) \
286 DEFINE_CREATE_TIME_FREQUENCY_SERIES_FUNCTION(type) \
287 DEFINE_TEST_FUNCTION(type)
288
289#define GENERATE_DATA generate_int_data
290DEFINE_VECTOR_FUNCTIONS(CHARVector)
291DEFINE_VECTOR_FUNCTIONS(INT2Vector)
292DEFINE_VECTOR_FUNCTIONS(INT4Vector)
293DEFINE_VECTOR_FUNCTIONS(INT8Vector)
294DEFINE_VECTOR_FUNCTIONS(UINT2Vector)
295DEFINE_VECTOR_FUNCTIONS(UINT4Vector)
296DEFINE_VECTOR_FUNCTIONS(UINT8Vector)
297#undef GENERATE_DATA
298#define GENERATE_DATA generate_float_data
299DEFINE_VECTOR_FUNCTIONS(REAL4Vector)
300DEFINE_VECTOR_FUNCTIONS(REAL8Vector)
301#undef GENERATE_DATA
302#define GENERATE_DATA generate_complex_data
303DEFINE_VECTOR_FUNCTIONS(COMPLEX8Vector)
304DEFINE_VECTOR_FUNCTIONS(COMPLEX16Vector)
305#undef GENERATE_DATA
306
307#define StringVector LALStringVector
308DEFINE_WRITE_FUNCTION(StringVector)
309DEFINE_READ_FUNCTION(StringVector)
310DEFINE_TEST_FUNCTION(StringVector)
311
312#define GENERATE_DATA generate_int_data
313DEFINE_ARRAY_FUNCTIONS(INT2Array)
314DEFINE_ARRAY_FUNCTIONS(INT4Array)
315DEFINE_ARRAY_FUNCTIONS(INT8Array)
316DEFINE_ARRAY_FUNCTIONS(UINT2Array)
317DEFINE_ARRAY_FUNCTIONS(UINT4Array)
318DEFINE_ARRAY_FUNCTIONS(UINT8Array)
319#undef GENERATE_DATA
320#define GENERATE_DATA generate_float_data
321DEFINE_ARRAY_FUNCTIONS(REAL4Array)
322DEFINE_ARRAY_FUNCTIONS(REAL8Array)
323#undef GENERATE_DATA
324#define GENERATE_DATA generate_complex_data
325DEFINE_ARRAY_FUNCTIONS(COMPLEX8Array)
326DEFINE_ARRAY_FUNCTIONS(COMPLEX16Array)
327#undef GENERATE_DATA
328
329#define GENERATE_DATA generate_int_data
330DEFINE_TIME_SERIES_FUNCTIONS(INT2TimeSeries)
331DEFINE_TIME_SERIES_FUNCTIONS(INT4TimeSeries)
332DEFINE_TIME_SERIES_FUNCTIONS(INT8TimeSeries)
333DEFINE_TIME_SERIES_FUNCTIONS(UINT2TimeSeries)
334DEFINE_TIME_SERIES_FUNCTIONS(UINT4TimeSeries)
335DEFINE_TIME_SERIES_FUNCTIONS(UINT8TimeSeries)
336#undef GENERATE_DATA
337#define GENERATE_DATA generate_float_data
338DEFINE_TIME_SERIES_FUNCTIONS(REAL4TimeSeries)
339DEFINE_TIME_SERIES_FUNCTIONS(REAL8TimeSeries)
340#undef GENERATE_DATA
341#define GENERATE_DATA generate_complex_data
342DEFINE_TIME_SERIES_FUNCTIONS(COMPLEX8TimeSeries)
343DEFINE_TIME_SERIES_FUNCTIONS(COMPLEX16TimeSeries)
344#undef GENERATE_DATA
345
346#define GENERATE_DATA generate_float_data
347DEFINE_FREQUENCY_SERIES_FUNCTIONS(REAL4FrequencySeries)
348DEFINE_FREQUENCY_SERIES_FUNCTIONS(REAL8FrequencySeries)
349#undef GENERATE_DATA
350#define GENERATE_DATA generate_complex_data
351DEFINE_FREQUENCY_SERIES_FUNCTIONS(COMPLEX8FrequencySeries)
352DEFINE_FREQUENCY_SERIES_FUNCTIONS(COMPLEX16FrequencySeries)
353#undef GENERATE_DATA
354
355#if defined(GENERATE_HDF5_TEST_FILE)
356/* this small snippet is left as an example on how to regenerate the files
357 used for testing HDF5 attributes reading/writing
358*/
359static void create_hdf5(void) {
360 char const *buf = "La soupe est pr\xc3\xaate.";
361
362 hid_t file_create = H5Fcreate(TEST_DATA_DIR "hdf5_attr_utf8.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
363 hid_t fspace = H5Screate(H5S_SCALAR);
364 hid_t memtype_id = H5Tcopy(H5T_C_S1);
365 H5Tset_cset(memtype_id, H5T_CSET_UTF8);
366 H5Tset_size(memtype_id, H5T_VARIABLE);
367
368 hid_t attr = H5Acreate2(file_create, "CANONICAL_FILE_BASENAME", memtype_id, fspace, H5P_DEFAULT, H5P_DEFAULT);
369
370 if(!(H5Awrite(attr, memtype_id, &buf) >= 0)){
371 fprintf(stderr, "Attribute write fail\n");
372 exit(1);
373 }
374 if(!(H5Sclose(fspace) >= 0)){
375 fprintf(stderr, "Space close fail\n");
376 exit(1);
377 }
378 if(!(H5Tclose(memtype_id) >= 0)){
379 fprintf(stderr, "Memtype close fail\n");
380 exit(1);
381
382 }
383 if(!(H5Aclose(attr) >= 0)){
384 fprintf(stderr, "Attribute close fail\n");
385 exit(1);
386 }
387
388 H5Fflush(file_create, H5F_SCOPE_GLOBAL);
389 H5Fclose(file_create);
390}
391#endif
392
393static void check_string_reading_from_hdf5_attr(
394 char const* filename,
395 char const* attribute_name,
396 char const* buf,
397 char const* attr_type) {
398
399 fprintf(stderr, "Testing HDF5 attribute reading %s...\n", attr_type);
400 LALH5File *file_read = XLALH5FileOpen(filename, "r");
401 LALH5Generic gfile = {.file = file_read};
402
403 int len = XLALH5AttributeQueryStringValue(NULL, 0, gfile, attribute_name);
404 if(!(len > 0)) {
405 fprintf(stderr, "Attribute length read incorrect\n");
406 exit(1);
407 }
408 char *read_string_back = read_string_back = XLALCalloc(1, len + 1 );
409 XLALH5AttributeQueryStringValue(read_string_back, len+1, gfile, attribute_name);
410
411 if(strcmp(read_string_back, buf) != 0){
412 fprintf(stderr, "Read string incorrect '%s'\n", read_string_back);
413 exit(1);
414 }
415
416 XLALFree(read_string_back);
417 XLALH5FileClose(file_read);
418 fprintf(stderr, "Testing HDF5 attribute reading %s... ok!\n", attr_type);
419}
420
421int main(void)
422{
424
425 test_CHARVector();
426 test_INT2Vector();
427 test_INT4Vector();
428 test_INT8Vector();
429 test_UINT2Vector();
430 test_UINT4Vector();
431 test_UINT8Vector();
432 test_REAL4Vector();
433 test_REAL8Vector();
434 test_COMPLEX8Vector();
435 test_COMPLEX16Vector();
436 test_StringVector();
437
438 test_INT2Array();
439 test_INT4Array();
440 test_INT8Array();
441 test_UINT2Array();
442 test_UINT4Array();
443 test_UINT8Array();
444 test_REAL4Array();
445 test_REAL8Array();
446 test_COMPLEX8Array();
447 test_COMPLEX16Array();
448
449 test_INT2TimeSeries();
450 test_INT4TimeSeries();
451 test_INT8TimeSeries();
452 test_UINT2TimeSeries();
453 test_UINT4TimeSeries();
454 test_UINT8TimeSeries();
455 test_REAL4TimeSeries();
456 test_REAL8TimeSeries();
457 test_COMPLEX8TimeSeries();
458 test_COMPLEX16TimeSeries();
459
460 test_REAL4FrequencySeries();
461 test_REAL8FrequencySeries();
462 test_COMPLEX8FrequencySeries();
463 test_COMPLEX16FrequencySeries();
464
465#if defined(GENERATE_HDF5_TEST_FILE)
466 /* define the macro GENERATE_HDF5_TEST_FILE to generate each file */
467 create_hdf5();
468#endif
469
470 check_string_reading_from_hdf5_attr(
471 TEST_DATA_DIR "hdf5_attr_ascii.h5",
472 "CANONICAL_FILE_BASENAME",
473 "test long string ascii",
474 "ascii"
475 );
476
477 check_string_reading_from_hdf5_attr(
478 TEST_DATA_DIR "hdf5_attr_utf8.h5",
479 "CANONICAL_FILE_BASENAME",
480 "La soupe est pr\xc3\xaate.",
481 "utf8"
482 );
483
485 return 0;
486}
487
488#endif /* ! HAVE_HDF5 */
struct tagLALH5File LALH5File
Incomplete type for a HDF5 file.
Definition: H5FileIO.h:93
int XLALH5AttributeQueryStringValue(char *value, size_t size, const LALH5Generic object, const char *key)
LALH5File * XLALH5FileOpen(const char *path, const char *mode)
void XLALH5FileClose(LALH5File *file)
int main(void)
Definition: H5FileIOTest.c:4
void LALCheckMemoryLeaks(void)
Definition: LALMalloc.c:784
#define fprintf
uint16_t UINT2
Two-byte unsigned integer.
#define XLALCalloc(m, n)
Definition: LALMalloc.h:45
#define XLALFree(p)
Definition: LALMalloc.h:47
char * XLALStringDuplicate(const char *s)
Like strdup but uses LAL allocation routines (free with LALFree).
Definition: LALString.c:89
LALStringVector * XLALCreateEmptyStringVector(UINT4 length)
Create an empty string vector of the given length.
Definition: StringVector.c:164
void XLALAbortErrorHandler(const char *func, const char *file, int line, int errnum)
The XLAL error handler that raises SIGABRT.
Definition: XLALError.c:599
XLALErrorHandlerType * XLALSetErrorHandler(XLALErrorHandlerType *newHandler)
Sets the error handler to a new handler and returns the old handler.
Definition: XLALError.c:372
Vector of type CHAR, see DATATYPE-Vector types for more details.
Definition: LALDatatypes.h:73
Multidimentional array of COMPLEX16, see DATATYPE-Array types for more details.
Definition: LALDatatypes.h:238
See DATATYPE-FrequencySeries types for documentation.
Definition: LALDatatypes.h:909
Time series of COMPLEX16 data, see DATATYPE-TimeSeries types for more details.
Definition: LALDatatypes.h:600
Vector of type COMPLEX16, see DATATYPE-Vector types for more details.
Definition: LALDatatypes.h:172
Multidimentional array of COMPLEX8, see DATATYPE-Array types for more details.
Definition: LALDatatypes.h:232
See DATATYPE-FrequencySeries types for documentation.
Definition: LALDatatypes.h:899
Time series of COMPLEX8 data, see DATATYPE-TimeSeries types for more details.
Definition: LALDatatypes.h:590
Vector of type COMPLEX8, see DATATYPE-Vector types for more details.
Definition: LALDatatypes.h:163
Multidimentional array of INT2, see DATATYPE-Array types for more details.
Definition: LALDatatypes.h:184
Time series of INT2 data, see DATATYPE-TimeSeries types for more details.
Definition: LALDatatypes.h:511
Vector of type INT2, see DATATYPE-Vector types for more details.
Definition: LALDatatypes.h:91
Multidimentional array of INT4, see DATATYPE-Array types for more details.
Definition: LALDatatypes.h:196
Time series of INT4 data, see DATATYPE-TimeSeries types for more details.
Definition: LALDatatypes.h:530
Vector of type INT4, see DATATYPE-Vector types for more details.
Definition: LALDatatypes.h:109
Multidimentional array of INT8, see DATATYPE-Array types for more details.
Definition: LALDatatypes.h:208
Time series of INT8 data, see DATATYPE-TimeSeries types for more details.
Definition: LALDatatypes.h:550
Vector of type INT8, see DATATYPE-Vector types for more details.
Definition: LALDatatypes.h:127
Vector of type CHAR*, ie 'strings', see DATATYPE-Vector types for more details.
Definition: LALDatatypes.h:82
UINT4 length
Number of elements in array.
Definition: LALDatatypes.h:86
CHAR ** data
Pointer to the data array.
Definition: LALDatatypes.h:87
Epoch relative to GPS epoch, see LIGOTimeGPS type for more details.
Definition: LALDatatypes.h:458
Multidimentional array of REAL4, see DATATYPE-Array types for more details.
Definition: LALDatatypes.h:220
See DATATYPE-FrequencySeries types for documentation.
Definition: LALDatatypes.h:879
Time series of REAL4 data, see DATATYPE-TimeSeries types for more details.
Definition: LALDatatypes.h:570
Vector of type REAL4, see DATATYPE-Vector types for more details.
Definition: LALDatatypes.h:145
Multidimentional array of REAL8, see DATATYPE-Array types for more details.
Definition: LALDatatypes.h:226
See DATATYPE-FrequencySeries types for documentation.
Definition: LALDatatypes.h:889
Time series of REAL8 data, see DATATYPE-TimeSeries types for more details.
Definition: LALDatatypes.h:580
Vector of type REAL8, see DATATYPE-Vector types for more details.
Definition: LALDatatypes.h:154
Multidimentional array of UINT2, see DATATYPE-Array types for more details.
Definition: LALDatatypes.h:190
Time series of UINT2 data, see DATATYPE-TimeSeries types for more details.
Definition: LALDatatypes.h:521
Vector of type UINT2, see DATATYPE-Vector types for more details.
Definition: LALDatatypes.h:100
Multidimentional array of UINT4, see DATATYPE-Array types for more details.
Definition: LALDatatypes.h:202
Time series of UINT4 data, see DATATYPE-TimeSeries types for more details.
Definition: LALDatatypes.h:540
Vector of type UINT4, see DATATYPE-Vector types for more details.
Definition: LALDatatypes.h:118
Multidimentional array of UINT8, see DATATYPE-Array types for more details.
Definition: LALDatatypes.h:214
Time series of UINT8 data, see DATATYPE-TimeSeries types for more details.
Definition: LALDatatypes.h:560
Vector of type UINT8, see DATATYPE-Vector types for more details.
Definition: LALDatatypes.h:136
enum @1 epoch
Incomplete type for a pointer to an HDF5 file or group or dataset.
Definition: H5FileIO.h:110
LALH5File * file
Pointer to a LALH5File file.
Definition: H5FileIO.h:112