aboutsummaryrefslogtreecommitdiff
path: root/libcrystfel/src
diff options
context:
space:
mode:
Diffstat (limited to 'libcrystfel/src')
-rw-r--r--libcrystfel/src/image.h2
-rw-r--r--libcrystfel/src/peaks.c19
-rw-r--r--libcrystfel/src/stream.c8
3 files changed, 24 insertions, 5 deletions
diff --git a/libcrystfel/src/image.h b/libcrystfel/src/image.h
index ac011d14..afa9e4a7 100644
--- a/libcrystfel/src/image.h
+++ b/libcrystfel/src/image.h
@@ -104,6 +104,7 @@ typedef struct _imagefeaturelist ImageFeatureList;
* int height;
*
* RefList *reflections;
+ * long long unsigned int n_saturated;
*
* ImageFeatureList *features;
* };
@@ -169,6 +170,7 @@ struct image {
/* Integrated (or about-to-be-integrated) reflections */
RefList *reflections;
+ long long int n_saturated; /* Number of overloads */
/* Detected peaks */
ImageFeatureList *features;
diff --git a/libcrystfel/src/peaks.c b/libcrystfel/src/peaks.c
index 4ae4bb30..f5fa6c70 100644
--- a/libcrystfel/src/peaks.c
+++ b/libcrystfel/src/peaks.c
@@ -216,7 +216,7 @@ static int integrate_peak(struct image *image, int cfs, int css,
double *pfs, double *pss,
double *intensity, double *sigma,
double ir_inn, double ir_mid, double ir_out,
- int use_max_adu, int *bgPkMask)
+ int use_max_adu, int *bgPkMask, int *saturated)
{
signed int dfs, dss;
double lim_sq, out_lim_sq, mid_lim_sq;
@@ -292,7 +292,10 @@ static int integrate_peak(struct image *image, int cfs, int css,
val = image->data[idx];
/* Veto peak if it contains saturation in bg region */
- if ( use_max_adu && (val > p->max_adu) ) return 1;
+ if ( use_max_adu && (val > p->max_adu) ) {
+ if ( saturated != NULL ) *saturated = 1;
+ return 1;
+ }
bg_tot += val;
bg_tot_sq += pow(val, 2.0);
@@ -347,7 +350,10 @@ static int integrate_peak(struct image *image, int cfs, int css,
val = image->data[idx] - bg_mean;
/* Veto peak if it contains saturation */
- if ( use_max_adu && (image->data[idx] > p->max_adu) ) return 1;
+ if ( use_max_adu && (val > p->max_adu) ) {
+ if ( saturated != NULL ) *saturated = 1;
+ return 1;
+ }
pk_counts++;
pk_total += val;
@@ -481,7 +487,7 @@ static void search_peaks_in_panel(struct image *image, float threshold,
/* Centroid peak and get better coordinates. */
r = integrate_peak(image, mask_fs, mask_ss,
&f_fs, &f_ss, &intensity, &sigma,
- ir_inn, ir_mid, ir_out, 0, NULL);
+ ir_inn, ir_mid, ir_out, 0, NULL, NULL);
if ( r ) {
/* Bad region - don't detect peak */
@@ -730,6 +736,7 @@ void integrate_reflections(struct image *image, int use_closer, int bgsub,
signed int h, k, l;
struct panel *p;
int pnum, j, found;
+ int saturated;
refl = il[i].refl;
@@ -781,7 +788,9 @@ void integrate_reflections(struct image *image, int use_closer, int bgsub,
r = integrate_peak(image, pfs, pss, &fs, &ss,
&intensity, &sigma, ir_inn, ir_mid, ir_out,
- 1, bgMasks[pnum]);
+ 1, bgMasks[pnum], &saturated);
+
+ if ( saturated ) image->n_saturated++;
/* I/sigma(I) cutoff */
if ( intensity/sigma < min_snr ) r = 1;
diff --git a/libcrystfel/src/stream.c b/libcrystfel/src/stream.c
index 6627e7ea..b8ff9238 100644
--- a/libcrystfel/src/stream.c
+++ b/libcrystfel/src/stream.c
@@ -261,6 +261,9 @@ void write_chunk(FILE *ofh, struct image *i, struct hdfile *hdfile, int f)
i->diffracting_resolution/1e9,
1e9 / i->diffracting_resolution);
+ fprintf(ofh, "num_saturated_reflections"
+ " = %lli\n", i->n_saturated);
+
}
if ( i->det != NULL ) {
@@ -343,6 +346,7 @@ int read_chunk(FILE *fh, struct image *image)
image->features = NULL;
image->reflections = NULL;
image->indexed_cell = NULL;
+ image->n_saturated = 0;
do {
@@ -417,6 +421,10 @@ int read_chunk(FILE *fh, struct image *image)
have_ev = 1;
}
+ if ( strncmp(line, "num_saturated_reflections = ", 28) == 0 ) {
+ image->n_saturated = atoi(line+28);
+ }
+
if ( strcmp(line, PEAK_LIST_START_MARKER) == 0 ) {
if ( read_peaks(fh, image) ) {
ERROR("Failed while reading peaks\n");