diff options
author | Thomas White <taw@physics.org> | 2014-06-26 11:22:24 +0200 |
---|---|---|
committer | Thomas White <taw@physics.org> | 2014-06-26 11:22:24 +0200 |
commit | 19f977c6d62ffca9f13bcdefef32b5b27a326b7a (patch) | |
tree | d2abc2503e321c24a74c28ccb232f3785852d2e0 | |
parent | f623ac19805a60e0eb9ad58c9132fbc655dfdb98 (diff) |
Rationalise counting of filtered eigenvalues
-rw-r--r-- | src/partialator.c | 11 | ||||
-rw-r--r-- | src/post-refinement.c | 14 | ||||
-rw-r--r-- | src/post-refinement.h | 1 | ||||
-rw-r--r-- | src/scaling-report.c | 3 | ||||
-rw-r--r-- | src/scaling-report.h | 7 |
5 files changed, 25 insertions, 11 deletions
diff --git a/src/partialator.c b/src/partialator.c index 8823990f..2ef01dba 100644 --- a/src/partialator.c +++ b/src/partialator.c @@ -129,7 +129,10 @@ static void done_image(void *vqargs, void *task) struct refine_args *pargs = task; qargs->n_done++; - qargs->srdata->n_filtered += pargs->prdata.n_filtered; + if ( pargs->prdata.refined ) { + qargs->srdata->n_refined += pargs->prdata.refined; + qargs->srdata->n_filtered += pargs->prdata.n_filtered; + } progress_bar(qargs->n_done, qargs->n_crystals, "Refining"); free(task); @@ -150,6 +153,7 @@ static void refine_all(Crystal **crystals, int n_crystals, task_defaults.full = full; task_defaults.crystal = NULL; task_defaults.pmodel = pmodel; + task_defaults.prdata.refined = 0; task_defaults.prdata.n_filtered = 0; qargs.task_defaults = task_defaults; @@ -164,6 +168,10 @@ static void refine_all(Crystal **crystals, int n_crystals, run_threads(nthreads, refine_image, get_image, done_image, &qargs, n_crystals, 0, 0, 0); + + STATUS("%5.2f eigenvalues filtered on final iteration per successfully " + "refined crystal\n", + (double)srdata->n_filtered/srdata->n_refined); } @@ -462,6 +470,7 @@ int main(int argc, char *argv[]) srdata.n = n_crystals; srdata.full = full; srdata.n_filtered = 0; + srdata.n_refined = 0; sr = sr_titlepage(crystals, n_crystals, "scaling-report.pdf", infile, cmdline); diff --git a/src/post-refinement.c b/src/post-refinement.c index 535f7cff..5de8a246 100644 --- a/src/post-refinement.c +++ b/src/post-refinement.c @@ -469,7 +469,7 @@ static gsl_vector *solve_svd(gsl_vector *v, gsl_matrix *M, int *n_filt, /* Perform one cycle of post refinement on 'image' against 'full' */ static double pr_iterate(Crystal *cr, const RefList *full, - PartialityModel pmodel, struct prdata *prdata) + PartialityModel pmodel, int *n_filtered) { gsl_matrix *M; gsl_vector *v; @@ -482,6 +482,8 @@ static double pr_iterate(Crystal *cr, const RefList *full, int nref = 0; const int verbose = 0; + *n_filtered = 0; + reflections = crystal_get_reflections(cr); M = gsl_matrix_calloc(NUM_PARAMS, NUM_PARAMS); @@ -574,7 +576,7 @@ static double pr_iterate(Crystal *cr, const RefList *full, } max_shift = 0.0; - shifts = solve_svd(v, M, &prdata->n_filtered, verbose); + shifts = solve_svd(v, M, n_filtered, verbose); if ( shifts != NULL ) { for ( param=0; param<NUM_PARAMS; param++ ) { @@ -698,6 +700,7 @@ struct prdata pr_refine(Crystal *cr, const RefList *full, struct prdata prdata; double mean_p_change = 0.0; + prdata.refined = 0; prdata.n_filtered = 0; /* Don't refine crystal if scaling was bad */ @@ -727,8 +730,7 @@ struct prdata pr_refine(Crystal *cr, const RefList *full, cell_get_reciprocal(crystal_get_cell(cr), &asx, &asy, &asz, &bsx, &bsy, &bsz, &csx, &csy, &csz); - prdata.n_filtered = 0; - pr_iterate(cr, full, pmodel, &prdata); + pr_iterate(cr, full, pmodel, &prdata.n_filtered); update_partialities_2(cr, pmodel, &n_gained, &n_lost, &mean_p_change); @@ -755,5 +757,9 @@ struct prdata pr_refine(Crystal *cr, const RefList *full, free_backup_crystal(backup); + if ( crystal_get_user_flag(cr) == 0 ) { + prdata.refined = 1; + } + return prdata; } diff --git a/src/post-refinement.h b/src/post-refinement.h index abf2364b..e419c51d 100644 --- a/src/post-refinement.h +++ b/src/post-refinement.h @@ -63,6 +63,7 @@ enum { struct prdata { + int refined; int n_filtered; }; diff --git a/src/scaling-report.c b/src/scaling-report.c index 351d2dbd..ca4c5cbc 100644 --- a/src/scaling-report.c +++ b/src/scaling-report.c @@ -888,9 +888,6 @@ void sr_iteration(SRContext *sr, int iteration, struct srdata *d) cairo_restore(sr->cr); } - - STATUS("%i filtered total, %5.2f filtered per crystal\n", - d->n_filtered, (double)d->n_filtered / d->n); } diff --git a/src/scaling-report.h b/src/scaling-report.h index 5f6e2cb4..55037038 100644 --- a/src/scaling-report.h +++ b/src/scaling-report.h @@ -3,11 +3,11 @@ * * Write a nice PDF of scaling parameters * - * Copyright © 2012 Deutsches Elektronen-Synchrotron DESY, - * a research centre of the Helmholtz Association. + * Copyright © 2012-2014 Deutsches Elektronen-Synchrotron DESY, + * a research centre of the Helmholtz Association. * * Authors: - * 2011-2012 Thomas White <taw@physics.org> + * 2011-2014 Thomas White <taw@physics.org> * * This file is part of CrystFEL. * @@ -46,6 +46,7 @@ struct srdata RefList *full; int n_filtered; + int n_refined; }; #if defined(HAVE_CAIRO) && defined(HAVE_PANGO) && defined(HAVE_PANGOCAIRO) |