Fix dataset rank (ndims) to three.

The get_frame code always assumed a dataset rank of three, so this
doesn't actually change much, but its one less dynamically allocated
buffer to keep track of.
This commit is contained in:
Charles Mita
2018-03-27 13:20:35 +01:00
parent 3c4b00f12f
commit af6c98765d
3 changed files with 14 additions and 33 deletions
+13 -28
View File
@@ -40,20 +40,12 @@ void clear_det_visit_objects(struct det_visit_objects_t *objects) {
}
void free_dataset_properties(struct dataset_properties_t *p) {
if (p->dims) {
free(p->dims);
p->dims = NULL;
}
p->ndims = 0;
}
void free_nxs_data_description(struct data_description_t *desc) {
if (desc->extra) free(desc->extra); /* should just be NULL */
desc->extra = NULL;
}
void free_eiger_data_description(struct data_description_t *desc) {
if (!desc->extra) return;
struct eiger_data_description_t *extra = desc->extra;
@@ -92,7 +84,7 @@ int get_nxs_dataset_dims(const struct data_description_t *desc, struct dataset_p
int retval = 0;
int ndims = 0;
int width = 0;
hsize_t *dims = NULL;
hsize_t dims[3] = {0};
g_id = desc->data_group_id;;
ds_id = H5Dopen2(g_id, "data", H5P_DEFAULT);
@@ -120,24 +112,18 @@ int get_nxs_dataset_dims(const struct data_description_t *desc, struct dataset_p
}
ndims = H5Sget_simple_extent_ndims(s_id);
if (ndims <= 0) {
if (ndims != 3) {
fprintf(stderr, "ERROR: Dataset rank is %d, not %d\n", ndims, 3);
retval = -1;
goto close_space;
}
dims = malloc(ndims * sizeof(hsize_t));
if (!dims) {
retval = -1;
goto close_space;
}
if (H5Sget_simple_extent_dims(s_id, dims, NULL) < 0) {
retval = -1;
free(dims);
goto close_space;
}
properties->ndims = ndims;
properties->dims = dims;
memcpy(properties->dims, dims, 3 * sizeof(*dims));
properties->data_width = width;
close_space:
@@ -246,12 +232,7 @@ int get_dectris_eiger_dataset_dims(const struct data_description_t *desc, struct
int ndims = 3;
char ds_name[16] = {0}; /* 12 chars in "data_xxxxxx\0" */
int *frame_counts = NULL;
hsize_t *dims = malloc(3 * sizeof(hsize_t));
if (!dims) {
retval = -1;
return retval;
}
memset(dims, 0, sizeof(hsize_t) * ndims);
hsize_t dims[3] = {0};
/* datasets are "data_%06d % n" - need to determine how many of these there are and what the ranges are */
@@ -288,6 +269,12 @@ int get_dectris_eiger_dataset_dims(const struct data_description_t *desc, struct
goto close_space;
}
ndims = H5Sget_simple_extent_ndims(s_id);
if (ndims != 3) {
fprintf(stderr, "ERROR: Dataset rank is %d, not %d\n", ndims, 3);
retval = -1;
goto close_space;
}
if (H5Sget_simple_extent_dims(s_id, block_dims, NULL) < 0) {
retval = -1;
goto close_space;
@@ -308,11 +295,9 @@ close_dataset:
}
if (retval < 0) {
free(dims);
free(frame_counts);
} else {
properties->ndims = ndims;
properties->dims = dims;
memcpy(properties->dims, dims, 3 * sizeof(*dims));
properties->data_width = data_width;
((struct eiger_data_description_t *) desc->extra)->n_data_blocks = n_datas;
((struct eiger_data_description_t *) desc->extra)->block_sizes = frame_counts;
+1 -4
View File
@@ -10,13 +10,10 @@
#include <hdf5.h>
struct dataset_properties_t {
int ndims;
int data_width;
hsize_t *dims;
hsize_t dims[3];
};
void free_dataset_properties(struct dataset_properties_t *p);
struct data_description_t {
hid_t det_group_id;
hid_t data_group_id;
-1
View File
@@ -130,7 +130,6 @@ void plugin_close(int *error_flag) {
if (mask_buffer) free(mask_buffer);
if (data_desc.free_extra) data_desc.free_extra(&data_desc);
free_dataset_properties(&ds_prop);
}
#ifdef __cplusplus