aboutsummaryrefslogtreecommitdiff
path: root/libcrystfel/src/image.c
diff options
context:
space:
mode:
Diffstat (limited to 'libcrystfel/src/image.c')
-rw-r--r--libcrystfel/src/image.c33
1 files changed, 27 insertions, 6 deletions
diff --git a/libcrystfel/src/image.c b/libcrystfel/src/image.c
index 2209ffee..5d67ae2d 100644
--- a/libcrystfel/src/image.c
+++ b/libcrystfel/src/image.c
@@ -42,6 +42,7 @@
#include "image-hdf5.h"
#include "image-cbf.h"
#include "image-msgpack.h"
+#include "image-seedee.h"
#include "profile.h"
#include "datatemplate.h"
@@ -803,6 +804,11 @@ static int image_read_image_data(struct image *image,
return image_msgpack_read(image, dtempl, image->data_block,
image->data_block_size);
+ case DATA_SOURCE_TYPE_SEEDEE:
+ return image_seedee_read(image, dtempl, image->data_block,
+ image->data_block_size,
+ image->meta_data);
+
default:
ERROR("Unrecognised file type %i (image_read_image_data)\n",
image->data_source_type);
@@ -881,8 +887,7 @@ static void mark_flagged_pixels_naninf(float *dp, int *bad,
{
long int i;
for ( i=0; i<n; i++ ) {
- float val = dp[i];
- if ( isnan(val) || isinf(val) ) bad[i] = 1;
+ if ( !isfinite(dp[i]) ) bad[i] = 1;
}
}
@@ -898,8 +903,11 @@ static void mark_flagged_pixels(struct panel_template *p,
p_h = p->orig_max_ss - p->orig_min_ss + 1;
n = p_w * p_h;
+ profile_start("nan-inf");
mark_flagged_pixels_naninf(dp, bad, n);
+ profile_end("nan-inf");
+ profile_start("flag-values");
for ( i=0; i<MAX_FLAG_VALUES; i++ ) {
float fv = p->flag_values[i];
@@ -923,6 +931,7 @@ static void mark_flagged_pixels(struct panel_template *p,
}
}
+ profile_end("flag-values");
}
@@ -1096,27 +1105,34 @@ static int create_badmap(struct image *image,
/* Panel marked as bad? */
if ( p->bad ) {
+ profile_start("whole-panel");
/* NB this sets every element to 0x1111,
* but that's OK - value is still 'true'. */
memset(image->bad[i], 1, p_w*p_h);
+ profile_end("whole-panel");
}
/* Add bad regions (skip if panel is bad anyway) */
if ( !p->bad ) {
+ profile_start("flagged-pixels");
mark_flagged_pixels(p, image->dp[i],
image->bad[i]);
+ profile_end("flagged-pixels");
}
/* Mask panel edges (skip if panel is bad anyway) */
if ( (p->mask_edge_pixels > 0) && !p->bad ) {
+ profile_start("panel-edges");
mask_panel_edges(image->bad[i], p_w, p_h,
p->mask_edge_pixels);
+ profile_end("panel-edges");
}
/* Load masks (skip if panel is bad anyway) */
if ( (!no_mask_data) && (!p->bad) ) {
int j;
+ profile_start("load-masks");
for ( j=0; j<MAX_MASKS; j++ ) {
@@ -1138,10 +1154,13 @@ static int create_badmap(struct image *image,
p->masks[j].bad_bits);
}
+ profile_end("load-masks");
}
}
+ profile_start("mark-regions");
mark_bad_regions(image, dtempl);
+ profile_end("mark-regions");
return 0;
}
@@ -1385,13 +1404,13 @@ struct image *image_read(const DataTemplate *dtempl,
struct image *image_read_data_block(const DataTemplate *dtempl,
void *data_block,
size_t data_block_size,
+ char *meta_data,
DataSourceType type,
int serial,
int no_image_data,
int no_mask_data)
{
struct image *image;
- char tmp[64];
if ( dtempl == NULL ) {
ERROR("NULL data template!\n");
@@ -1404,11 +1423,11 @@ struct image *image_read_data_block(const DataTemplate *dtempl,
return NULL;
}
- snprintf(tmp, 63, "datablock-%i", serial);
- image->filename = strdup(tmp);
- image->ev = strdup("//");
+ image->filename = NULL;
+ image->ev = NULL;
image->data_block = data_block;
image->data_block_size = data_block_size;
+ image->meta_data = meta_data;
image->data_source_type = type;
@@ -1433,6 +1452,7 @@ void image_free(struct image *image)
free(image->filename);
free(image->ev);
free(image->data_block);
+ free(image->meta_data);
if ( image->detgeom != NULL ) {
np = image->detgeom->n_panels;
@@ -1478,6 +1498,7 @@ struct image *image_new()
image->ev = NULL;
image->data_block = NULL;
image->data_block_size = 0;
+ image->meta_data = NULL;
image->data_source_type = DATA_SOURCE_TYPE_UNKNOWN;
image->n_cached_headers = 0;