aboutsummaryrefslogtreecommitdiff
path: root/src/partialator.c
diff options
context:
space:
mode:
authorThomas White <taw@physics.org>2021-01-06 15:03:26 +0100
committerThomas White <taw@physics.org>2021-01-06 15:03:26 +0100
commit6445bd6887ac815d07f38692a98d0b1dd166fed6 (patch)
tree2b994b2da95a326ad663627e7565c83cb03cb161 /src/partialator.c
parentd7adbd7e4a316cbb7d9fd9ca2fef234239e62797 (diff)
partialator: Reject crystals with obviously too large profile radii
The criterion for "too large" is 20% of the 1/d value for the lowest reflection which is not systematically absent according to the centering. A profile radius larger than the 1/d value for a reflection will crash the xsphere partiality model, and some visualisation shows that this is a clearly non-physical situation. The profile radius shouldn't be anywhere near the inter-Bragg spacing for reasonable data. However, feedback shows that this is happening quite often in real data, probably due to bad indexing.
Diffstat (limited to 'src/partialator.c')
-rw-r--r--src/partialator.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/partialator.c b/src/partialator.c
index 31ebb8c9..8422c05a 100644
--- a/src/partialator.c
+++ b/src/partialator.c
@@ -3,7 +3,7 @@
*
* Scaling and post refinement for coherent nanocrystallography
*
- * Copyright © 2012-2020 Deutsches Elektronen-Synchrotron DESY,
+ * Copyright © 2012-2021 Deutsches Elektronen-Synchrotron DESY,
* a research centre of the Helmholtz Association.
*
* Authors:
@@ -1430,12 +1430,23 @@ int main(int argc, char *argv[])
Crystal **crystals_new;
RefList *cr_refl;
struct image *image_for_crystal;
+ double lowest_r;
n_crystals_seen++;
if ( n_crystals_seen <= start_after ) continue;
if ( crystal_get_resolution_limit(image->crystals[i]) < min_res ) continue;
+ lowest_r = lowest_reflection(crystal_get_cell(image->crystals[i]));
+ if ( crystal_get_profile_radius(image->crystals[i]) > 0.2*lowest_r ) {
+ ERROR("Rejecting %s %s crystal %i because "
+ "profile radius is obviously too big (%e %e).\n",
+ image->filename, image->ev, i,
+ crystal_get_profile_radius(image->crystals[i]),
+ lowest_r);
+ continue;
+ }
+
crystals_new = realloc(crystals,
(n_crystals+1)*sizeof(Crystal *));
if ( crystals_new == NULL ) {