aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas White <taw@physics.org>2015-05-19 14:57:20 +0200
committerThomas White <taw@physics.org>2015-05-19 14:59:10 +0200
commit511d35254618675938f3c3cc57768a13db21d9c3 (patch)
treeb0626d8a1bfc696c22a8848a68b57887724ed274
parent9a21ae0c6d0ae89be28ca0e2878b82faa1b8ce05 (diff)
partialator: Show initial and final residuals (including free)
-rw-r--r--src/partialator.c32
-rw-r--r--src/post-refinement.c4
-rw-r--r--src/post-refinement.h4
3 files changed, 38 insertions, 2 deletions
diff --git a/src/partialator.c b/src/partialator.c
index 9815695f..3f06ff73 100644
--- a/src/partialator.c
+++ b/src/partialator.c
@@ -99,6 +99,10 @@ struct queue_args
Crystal **crystals;
int n_crystals;
struct refine_args task_defaults;
+ double initial_residual;
+ double initial_free_residual;
+ double final_residual;
+ double final_free_residual;
};
@@ -134,6 +138,10 @@ static void done_image(void *vqargs, void *task)
struct refine_args *pargs = task;
qargs->n_done++;
+ qargs->initial_residual += pargs->prdata.initial_residual;
+ qargs->initial_free_residual += pargs->prdata.initial_free_residual;
+ qargs->final_residual += pargs->prdata.final_residual;
+ qargs->final_free_residual += pargs->prdata.final_free_residual;
progress_bar(qargs->n_done, qargs->n_crystals, "Refining");
free(task);
@@ -142,7 +150,9 @@ static void done_image(void *vqargs, void *task)
static void refine_all(Crystal **crystals, int n_crystals,
RefList *full, int nthreads, PartialityModel pmodel,
- int no_scale)
+ int no_scale,
+ double *initial_residual, double *initial_free_residual,
+ double *final_residual, double *final_free_residual)
{
struct refine_args task_defaults;
struct queue_args qargs;
@@ -159,12 +169,21 @@ static void refine_all(Crystal **crystals, int n_crystals,
qargs.n_done = 0;
qargs.n_crystals = n_crystals;
qargs.crystals = crystals;
+ qargs.initial_residual = 0.0;
+ qargs.initial_free_residual = 0.0;
+ qargs.final_residual = 0.0;
+ qargs.final_free_residual = 0.0;
/* Don't have threads which are doing nothing */
if ( n_crystals < nthreads ) nthreads = n_crystals;
run_threads(nthreads, refine_image, get_image, done_image,
&qargs, n_crystals, 0, 0, 0);
+
+ *initial_residual = qargs.initial_residual;
+ *initial_free_residual = qargs.initial_free_residual;
+ *final_residual = qargs.final_residual;
+ *final_free_residual = qargs.final_free_residual;
}
@@ -737,11 +756,20 @@ int main(int argc, char *argv[])
/* Iterate */
for ( i=0; i<n_iter; i++ ) {
+ double init_dev, init_free_dev;
+ double final_dev, final_free_dev;
+
STATUS("Refinement cycle %i of %i\n", i+1, n_iter);
/* Refine all crystals to get the best fit */
refine_all(crystals, n_crystals, full, nthreads, pmodel,
- no_scale);
+ no_scale, &init_dev, &init_free_dev,
+ &final_dev, &final_free_dev);
+
+ STATUS("Overall residual: initial = %e, final = %e\n",
+ init_dev, final_dev);
+ 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);
diff --git a/src/post-refinement.c b/src/post-refinement.c
index 27a74e76..ccf010e2 100644
--- a/src/post-refinement.c
+++ b/src/post-refinement.c
@@ -562,6 +562,8 @@ struct prdata pr_refine(Crystal *cr, const RefList *full,
if ( crystal_get_user_flag(cr) != 0 ) return prdata;
old_dev = residual(cr, full, 0, 0);
+ prdata.initial_free_residual = residual(cr, full, 0, 1);
+ prdata.initial_residual = old_dev;
if ( verbose ) {
STATUS("\n"); /* Deal with progress bar */
@@ -602,6 +604,8 @@ struct prdata pr_refine(Crystal *cr, const RefList *full,
if ( crystal_get_user_flag(cr) == 0 ) {
prdata.refined = 1;
}
+ prdata.final_free_residual = residual(cr, full, 0, 1);
+ prdata.final_residual = old_dev;
if ( verbose ) {
STATUS("Final G=%.2f, B=%e\n", crystal_get_osf(cr),
diff --git a/src/post-refinement.h b/src/post-refinement.h
index 844afbd1..fd2d771b 100644
--- a/src/post-refinement.h
+++ b/src/post-refinement.h
@@ -47,6 +47,10 @@ struct prdata
{
int refined;
int n_filtered;
+ double initial_residual;
+ double initial_free_residual;
+ double final_residual;
+ double final_free_residual;
};