aboutsummaryrefslogtreecommitdiff
path: root/src/post-refinement.c
diff options
context:
space:
mode:
authorThomas White <taw@physics.org>2015-09-08 15:30:48 +0200
committerThomas White <taw@physics.org>2015-09-24 13:28:30 +0200
commit63741b85b77d5a822e95318f549fe4d2392e29b8 (patch)
tree67b3f8f1069cad6f811b0b0805589ff66b49230e /src/post-refinement.c
parent950d25fda7ac78fc4f97c5b3ce12f549b6cb9995 (diff)
Reject big B factors before trying PR
Diffstat (limited to 'src/post-refinement.c')
-rw-r--r--src/post-refinement.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/post-refinement.c b/src/post-refinement.c
index fba301e6..9d1aa7a2 100644
--- a/src/post-refinement.c
+++ b/src/post-refinement.c
@@ -919,7 +919,8 @@ static void do_pr_refine(Crystal *cr, const RefList *full,
static struct prdata pr_refine(Crystal *cr, const RefList *full,
- PartialityModel pmodel, int no_scale, int no_pr)
+ PartialityModel pmodel, int no_scale, int no_pr,
+ double max_B)
{
int verbose = 0;
struct prdata prdata;
@@ -936,6 +937,12 @@ static struct prdata pr_refine(Crystal *cr, const RefList *full,
do_scale_refine(cr, full, pmodel, verbose);
}
+ /* Reject if B factor modulus is very large */
+ if ( fabs(crystal_get_Bfac(cr)) > max_B ) {
+ crystal_set_user_flag(cr, PRFLAG_BIGB);
+ return prdata;
+ }
+
if ( verbose ) {
write_residual_graph(cr, full);
}
@@ -968,6 +975,7 @@ struct refine_args
PartialityModel pmodel;
int no_scale;
int no_pr;
+ double max_B;
struct prdata prdata;
};
@@ -996,7 +1004,7 @@ static void refine_image(void *task, int id)
Crystal *cr = pargs->crystal;
pargs->prdata = pr_refine(cr, pargs->full, pargs->pmodel,
- pargs->no_scale, pargs->no_pr);
+ pargs->no_scale, pargs->no_pr, pargs->max_B);
}
@@ -1050,7 +1058,7 @@ static void done_image(void *vqargs, void *task)
void refine_all(Crystal **crystals, int n_crystals,
RefList *full, int nthreads, PartialityModel pmodel,
- int no_scale, int no_pr,
+ int no_scale, int no_pr, double max_B,
double *initial_residual, double *initial_free_residual,
double *initial_log_residual, double *initial_free_log_residual,
double *final_residual, double *final_free_residual,
@@ -1066,6 +1074,7 @@ void refine_all(Crystal **crystals, int n_crystals,
task_defaults.prdata.n_filtered = 0;
task_defaults.no_scale = no_scale;
task_defaults.no_pr = no_pr;
+ task_defaults.max_B = max_B;
task_defaults.prdata.initial_residual = 0.0;
task_defaults.prdata.initial_free_residual = 0.0;
task_defaults.prdata.initial_log_residual = 0.0;