aboutsummaryrefslogtreecommitdiff
path: root/src/partialator.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/partialator.c')
-rw-r--r--src/partialator.c112
1 files changed, 5 insertions, 107 deletions
diff --git a/src/partialator.c b/src/partialator.c
index 46353c25..2ad20094 100644
--- a/src/partialator.c
+++ b/src/partialator.c
@@ -74,7 +74,8 @@ static void show_help(const char *s)
" --start-after=<n> Skip <n> crystals at the start of the stream.\n"
" --stop-after=<n> Stop after merging <n> crystals.\n"
" -n, --iterations=<n> Run <n> cycles of scaling and post-refinement.\n"
-" --no-scale Fix all the scaling factors at unity.\n"
+" --no-scale Disable scale factor (G, B) refinement.\n"
+" --no-pr Disable orientation/physics refinement.\n"
" -m, --model=<model> Specify partiality model.\n"
" --min-measurements=<n> Minimum number of measurements to require.\n"
" --no-polarisation Disable polarisation correction.\n"
@@ -84,111 +85,6 @@ static void show_help(const char *s)
}
-struct refine_args
-{
- RefList *full;
- Crystal *crystal;
- PartialityModel pmodel;
- int no_scale;
- struct prdata prdata;
-};
-
-
-struct queue_args
-{
- int n_started;
- int n_done;
- Crystal **crystals;
- int n_crystals;
- struct refine_args task_defaults;
- double initial_residual;
- double initial_free_residual;
- double final_residual;
- double final_free_residual;
-};
-
-
-static void refine_image(void *task, int id)
-{
- struct refine_args *pargs = task;
- Crystal *cr = pargs->crystal;
-
- pargs->prdata = pr_refine(cr, pargs->full, pargs->pmodel,
- pargs->no_scale);
-}
-
-
-static void *get_image(void *vqargs)
-{
- struct refine_args *task;
- struct queue_args *qargs = vqargs;
-
- task = malloc(sizeof(struct refine_args));
- memcpy(task, &qargs->task_defaults, sizeof(struct refine_args));
-
- task->crystal = qargs->crystals[qargs->n_started];
-
- qargs->n_started++;
-
- return task;
-}
-
-
-static void done_image(void *vqargs, void *task)
-{
- struct queue_args *qargs = vqargs;
- 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);
-}
-
-
-static void refine_all(Crystal **crystals, int n_crystals,
- RefList *full, int nthreads, PartialityModel pmodel,
- 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;
-
- task_defaults.full = full;
- task_defaults.crystal = NULL;
- task_defaults.pmodel = pmodel;
- task_defaults.prdata.refined = 0;
- task_defaults.prdata.n_filtered = 0;
- task_defaults.no_scale = no_scale;
-
- qargs.task_defaults = task_defaults;
- qargs.n_started = 0;
- 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;
-}
-
-
static void display_progress(int n_images, int n_crystals)
{
if ( !isatty(STDERR_FILENO) ) return;
@@ -475,6 +371,7 @@ int main(int argc, char *argv[])
int n_crystals_seen = 0;
char cmdline[1024];
int no_scale = 0;
+ int no_pr = 0;
Stream *st;
Crystal **crystals;
char *pmodel_str = NULL;
@@ -510,6 +407,7 @@ int main(int argc, char *argv[])
{"res-push", 1, NULL, 5}, /* compat */
{"no-scale", 0, &no_scale, 1},
+ {"no-pr", 0, &no_pr, 1},
{"no-polarisation", 0, &polarisation, 0},
{"no-polarization", 0, &polarisation, 0},
{"polarisation", 0, &polarisation, 1}, /* compat */
@@ -831,7 +729,7 @@ int main(int argc, char *argv[])
/* Refine all crystals to get the best fit */
refine_all(crystals, n_crystals, full, nthreads, pmodel,
- no_scale, &init_dev, &init_free_dev,
+ no_scale, no_pr, &init_dev, &init_free_dev,
&final_dev, &final_free_dev);
STATUS("Overall residual: initial = %e, final = %e\n",