diff options
Diffstat (limited to 'src/hdf5_utils.c')
-rw-r--r-- | src/hdf5_utils.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/src/hdf5_utils.c b/src/hdf5_utils.c index 2a8f396..2da7d58 100644 --- a/src/hdf5_utils.c +++ b/src/hdf5_utils.c @@ -30,7 +30,7 @@ char *GitDirty(void); * chunked and extensible to allow the cat-grid-jobs script to work. * */ -int save_output(const char *output, HDF5Event *hdf5_events, size_t nevents, HDF5MCGN *hdf5_mcgn, size_t nmcgn, HDF5Fit *hdf5_fits, size_t nfits) +int save_output(const char *output, HDF5Event *hdf5_events, size_t nevents, HDF5MCGN *hdf5_mcgn, size_t nmcgn, HDF5Fit *hdf5_fits, size_t nfits, HDF5RHDR *hdf5_rhdr, size_t nrhdr) { hid_t hdf5_events_tid; /* File datatype identifier */ hid_t file, dataset, space; /* Handles */ @@ -39,6 +39,9 @@ int save_output(const char *output, HDF5Event *hdf5_events, size_t nevents, HDF5 hid_t hdf5_mcgn_tid; /* File datatype identifier */ hid_t dataset_mcgn, space_mcgn; /* Handles */ hsize_t dim_mcgn[1]; /* Dataspace dimensions */ + hid_t hdf5_rhdr_tid; /* File datatype identifier */ + hid_t dataset_rhdr, space_rhdr; /* Handles */ + hsize_t dim_rhdr[1]; /* Dataspace dimensions */ hid_t hdf5_fits_tid; /* File datatype identifier */ hid_t dataset_fits, space_fits; /* Handles */ hsize_t dim_fits[1]; /* Dataspace dimensions */ @@ -53,6 +56,8 @@ int save_output(const char *output, HDF5Event *hdf5_events, size_t nevents, HDF5 space = H5Screate_simple(1, dim, NULL); dim_mcgn[0] = nmcgn; space_mcgn = H5Screate_simple(1, dim_mcgn, NULL); + dim_rhdr[0] = nrhdr; + space_rhdr = H5Screate_simple(1, dim_rhdr, NULL); dim_fits[0] = nfits; space_fits = H5Screate_simple(1, dim_fits, maxdims); chunk_dims[0] = 10; @@ -100,6 +105,11 @@ int save_output(const char *output, HDF5Event *hdf5_events, size_t nevents, HDF5 /* * Create the memory data type. */ + hdf5_rhdr_tid = H5Tcreate(H5T_COMPOUND, sizeof(HDF5RHDR)); + H5Tinsert(hdf5_rhdr_tid, "run", HOFFSET(HDF5RHDR, run), H5T_NATIVE_INT); + H5Tinsert(hdf5_rhdr_tid, "run_mask", HOFFSET(HDF5RHDR, run_mask), H5T_NATIVE_UINT32); + H5Tinsert(hdf5_rhdr_tid, "first_gtid", HOFFSET(HDF5RHDR, first_gtid), H5T_NATIVE_UINT32); + hdf5_events_tid = H5Tcreate(H5T_COMPOUND, sizeof(HDF5Event)); H5Tinsert(hdf5_events_tid, "run", HOFFSET(HDF5Event, run), H5T_NATIVE_INT); H5Tinsert(hdf5_events_tid, "sub_run", HOFFSET(HDF5Event, sub_run), H5T_NATIVE_INT); @@ -156,6 +166,7 @@ int save_output(const char *output, HDF5Event *hdf5_events, size_t nevents, HDF5 * Create the dataset. */ dataset = H5Dcreate2(file, "ev", hdf5_events_tid, space, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); + dataset_rhdr = H5Dcreate2(file, "rhdr", hdf5_rhdr_tid, space_rhdr, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); dataset_mcgn = H5Dcreate2(file, "mcgn", hdf5_mcgn_tid, space_mcgn, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); dataset_fits = H5Dcreate2(file, "fits", hdf5_fits_tid, space_fits, H5P_DEFAULT, dcpl_id, H5P_DEFAULT); @@ -166,6 +177,8 @@ int save_output(const char *output, HDF5Event *hdf5_events, size_t nevents, HDF5 status = H5Dwrite(dataset, hdf5_events_tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, hdf5_events); if (nmcgn) status = H5Dwrite(dataset_mcgn, hdf5_mcgn_tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, hdf5_mcgn); + if (nrhdr) + status = H5Dwrite(dataset_rhdr, hdf5_rhdr_tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, hdf5_rhdr); if (nfits) status = H5Dwrite(dataset_fits, hdf5_fits_tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, hdf5_fits); @@ -180,13 +193,16 @@ int save_output(const char *output, HDF5Event *hdf5_events, size_t nevents, HDF5 H5Aclose(attr2); H5Tclose(hdf5_events_tid); H5Tclose(hdf5_mcgn_tid); + H5Tclose(hdf5_rhdr_tid); H5Tclose(hdf5_fits_tid); H5Sclose(space); H5Sclose(space_mcgn); + H5Sclose(space_rhdr); H5Sclose(space_fits); H5Pclose(dcpl_id); H5Dclose(dataset); H5Dclose(dataset_mcgn); + H5Dclose(dataset_rhdr); H5Dclose(dataset_fits); H5Fclose(file); |