From dc41a80525167b201e2de12ae33c934c93ea1d10 Mon Sep 17 00:00:00 2001 From: Charles Mita Date: Wed, 28 Mar 2018 13:19:19 +0100 Subject: [PATCH] Internally use zero-based indexing for selecting dataset frame Convert the one-based index at the plugin level and use zero-based indexing elsewhere. --- src/file.c | 7 +++---- src/plugin.c | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/file.c b/src/file.c index 3a71bae..5dea441 100644 --- a/src/file.c +++ b/src/file.c @@ -183,10 +183,9 @@ int get_nxs_frame( int data_width, void *buffer) { /* detector data are the two inner most indices */ - /* n is indexed from one - hdf5 slices start at zero */ /* TODO: handle ndims > 3 and select appropriately */ int retval = 0; - hsize_t frame_idx[3] = {n - 1, 0, 0}; + hsize_t frame_idx[3] = {n, 0, 0}; hsize_t frame_size[3] = {1, ds_prop->dims[1], ds_prop->dims[2]}; retval = get_frame(desc->data_group_id, "data", frame_idx, frame_size, data_width, buffer); if (retval < 0) { @@ -214,8 +213,8 @@ int get_dectris_eiger_frame( /* determine the relevant data block */ frame_count = 0; block = 0; - while ((frame_count += eiger_desc->block_sizes[block]) < (n-1)) block++; - idx = n - (frame_count - eiger_desc->block_sizes[block]) - 1; /* index in current block */ + while ((frame_count += eiger_desc->block_sizes[block]) <= n) block++; + idx = n - (frame_count - eiger_desc->block_sizes[block]); /* index in current block */ printf("n: %d -> Block: %d, idx: %d\n", n, block, idx); frame_idx[0] = idx; sprintf(data_name, "data_%06d", block + 1); diff --git a/src/plugin.c b/src/plugin.c index cae17d0..5d94ea9 100644 --- a/src/plugin.c +++ b/src/plugin.c @@ -130,7 +130,7 @@ void plugin_get_data( int retval = 0; reset_error_stack(); fill_info_array(info); - if (data_desc.get_data_frame(&data_desc, &ds_prop, *frame_number, sizeof(int), data_array) < 0) { + if (data_desc.get_data_frame(&data_desc, &ds_prop, (*frame_number) - 1, sizeof(int), data_array) < 0) { char message[64] = {0}; sprintf(message, "Failed to retrieve data for frame %d", *frame_number); ERROR_JUMP(-2, done, message);