aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas White <taw@bitwiz.org.uk>2015-08-01 20:32:06 +0200
committerThomas White <taw@bitwiz.org.uk>2015-08-01 20:32:06 +0200
commit4ae1cc859bad66f611677ce34e87be44580b0929 (patch)
tree1ec84d1277cf3855f25b70a221e693741a03d1a7
parentf6f8c8046766b93f8be847fa2c71f0cbaf7c5919 (diff)
partialator: Rationalise rejection diagnostics
-rw-r--r--src/partialator.c60
-rw-r--r--src/post-refinement.c28
-rw-r--r--src/post-refinement.h1
-rw-r--r--src/rejection.c30
4 files changed, 60 insertions, 59 deletions
diff --git a/src/partialator.c b/src/partialator.c
index 8a594116..24f8a6d1 100644
--- a/src/partialator.c
+++ b/src/partialator.c
@@ -100,34 +100,6 @@ static void display_progress(int n_images, int n_crystals)
}
-static const char *str_flags(flag)
-{
- switch ( flag ) {
-
- case PRFLAG_OK :
- return "OK";
-
- case PRFLAG_FEWREFL :
- return "not enough reflections";
-
- case PRFLAG_SOLVEFAIL :
- return "PR solve failed";
-
- case PRFLAG_EARLY :
- return "early rejection";
-
- case PRFLAG_CC :
- return "low CC";
-
- case PRFLAG_BIGB :
- return "B too big";
-
- default :
- return "Unknown flag";
- }
-}
-
-
static RefList *apply_max_adu(RefList *list, double max_adu)
{
RefList *nlist;
@@ -192,33 +164,6 @@ static int set_initial_params(Crystal *cr, FILE *fh)
}
-static void show_duds(Crystal **crystals, int n_crystals)
-{
- int j;
- int bads[32];
- int any_bad = 0;
-
- for ( j=0; j<32; j++ ) bads[j] = 0;
-
- for ( j=0; j<n_crystals; j++ ) {
- int flag;
- flag = crystal_get_user_flag(crystals[j]);
- assert(flag < 32);
- bads[flag]++;
- if ( flag != PRFLAG_OK ) any_bad++;
- }
-
- if ( any_bad ) {
- STATUS("%i bad crystals:\n", any_bad);
- for ( j=0; j<32; j++ ) {
- if ( bads[j] ) {
- STATUS(" %i %s\n", bads[j], str_flags(j));
- }
- }
- }
-}
-
-
/* Flag a random 5% of reflections */
static void select_free_reflections(RefList *list, gsl_rng *rng)
{
@@ -696,8 +641,6 @@ int main(int argc, char *argv[])
check_rejection(crystals, n_crystals, full);
- show_duds(crystals, n_crystals);
-
write_pgraph(full, crystals, n_crystals, 0);
/* Iterate */
@@ -718,7 +661,6 @@ int main(int argc, char *argv[])
STATUS("Overall free residual: initial = %e, final = %e\n",
init_free_dev, final_free_dev);
- show_duds(crystals, n_crystals);
check_rejection(crystals, n_crystals, full);
normalise_scales(crystals, n_crystals);
@@ -773,7 +715,7 @@ int main(int argc, char *argv[])
crystal_get_osf(crystals[i]),
crystal_get_Bfac(crystals[i])*1e20,
crystal_get_image(crystals[i])->div,
- str_flags(crystal_get_user_flag(crystals[i])));
+ str_prflag(crystal_get_user_flag(crystals[i])));
}
fclose(fh);
}
diff --git a/src/post-refinement.c b/src/post-refinement.c
index 83bb0d0e..d21108fd 100644
--- a/src/post-refinement.c
+++ b/src/post-refinement.c
@@ -54,6 +54,34 @@
/* Maximum number of iterations of NLSq to do for each image per macrocycle. */
#define MAX_CYCLES (10)
+const char *str_prflag(enum prflag flag)
+{
+ switch ( flag ) {
+
+ case PRFLAG_OK :
+ return "OK";
+
+ case PRFLAG_FEWREFL :
+ return "not enough reflections";
+
+ case PRFLAG_SOLVEFAIL :
+ return "PR solve failed";
+
+ case PRFLAG_EARLY :
+ return "early rejection";
+
+ case PRFLAG_CC :
+ return "low CC";
+
+ case PRFLAG_BIGB :
+ return "B too big";
+
+ default :
+ return "Unknown flag";
+ }
+}
+
+
/* Returns dp(gauss)/dr at "r" */
static double gaussian_fraction_gradient(double r, double R)
{
diff --git a/src/post-refinement.h b/src/post-refinement.h
index 536dea2d..fc72918f 100644
--- a/src/post-refinement.h
+++ b/src/post-refinement.h
@@ -64,6 +64,7 @@ enum prflag
};
+extern const char *str_prflag(enum prflag flag);
extern void refine_all(Crystal **crystals, int n_crystals,
RefList *full, int nthreads, PartialityModel pmodel,
diff --git a/src/rejection.c b/src/rejection.c
index e49aaf19..cea43701 100644
--- a/src/rejection.c
+++ b/src/rejection.c
@@ -165,6 +165,34 @@ static void check_ccs(Crystal **crystals, int n_crystals, RefList *full)
}
+
+static void show_duds(Crystal **crystals, int n_crystals)
+{
+ int j;
+ int bads[32];
+ int any_bad = 0;
+
+ for ( j=0; j<32; j++ ) bads[j] = 0;
+
+ for ( j=0; j<n_crystals; j++ ) {
+ int flag;
+ flag = crystal_get_user_flag(crystals[j]);
+ assert(flag < 32);
+ bads[flag]++;
+ if ( flag != PRFLAG_OK ) any_bad++;
+ }
+
+ if ( any_bad ) {
+ STATUS("%i bad crystals:\n", any_bad);
+ for ( j=0; j<32; j++ ) {
+ if ( bads[j] ) {
+ STATUS(" %i %s\n", bads[j], str_prflag(j));
+ }
+ }
+ }
+}
+
+
void check_rejection(Crystal **crystals, int n, RefList *full)
{
int i;
@@ -184,6 +212,8 @@ void check_rejection(Crystal **crystals, int n, RefList *full)
}
+ show_duds(crystals, n);
+
if ( n_acc < 2 ) {
ERROR("Not enough crystals left to proceed (%i). Sorry.\n",
n_acc);