aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorThomas White <taw@physics.org>2011-09-28 12:05:53 +0200
committerThomas White <taw@physics.org>2012-02-22 15:27:38 +0100
commit1e801eb8d029b9bc6cc51a059078f53a23c33832 (patch)
treee48c8a22c753202908ca34b70aacaa9a990e670a /src
parentf296fc3ec3174c444209001cb0e495029915190f (diff)
Get the amount of unit cell noise from the command line
Diffstat (limited to 'src')
-rw-r--r--src/partial_sim.c26
1 files changed, 20 insertions, 6 deletions
diff --git a/src/partial_sim.c b/src/partial_sim.c
index 87ef397b..ef1a48b1 100644
--- a/src/partial_sim.c
+++ b/src/partial_sim.c
@@ -33,15 +33,12 @@
#include "thread-pool.h"
-static void mess_up_cell(UnitCell *cell)
+static void mess_up_cell(UnitCell *cell, double cnoise)
{
double ax, ay, az;
double bx, by, bz;
double cx, cy, cz;
- /* Cell noise in percent */
- const double cnoise = 1.0;
-
//STATUS("Real:\n");
//cell_print(cell);
@@ -143,6 +140,10 @@ static void show_help(const char *s)
" -y, --symmetry=<sym> Symmetry of the input reflection list.\n"
" -n <n> Simulate <n> patterns. Default: 2.\n"
" -r, --save-random=<file> Save randomly generated intensities to file.\n"
+" -c, --cnoise=<val> Add random noise, with a flat distribution, to the\n"
+" reciprocal lattice vector components given in the\n"
+" stream, with maximum error +/- <val> percent.\n"
+"\n"
);
}
@@ -159,6 +160,7 @@ struct queue_args
SymOpList *sym;
int random_intensities;
UnitCell *cell;
+ double cnoise;
struct image *template_image;
@@ -208,7 +210,7 @@ static void run_job(void *vwargs, int cookie)
&qargs->full_lock);
/* Give a slightly incorrect cell in the stream */
- mess_up_cell(wargs->image.indexed_cell);
+ mess_up_cell(wargs->image.indexed_cell, qargs->cnoise);
}
@@ -249,6 +251,8 @@ int main(int argc, char *argv[])
struct queue_args qargs;
struct image image;
int n_threads = 1;
+ double cnoise = 0.0;
+ char *rval;
/* Long options */
const struct option longopts[] = {
@@ -260,11 +264,12 @@ int main(int argc, char *argv[])
{"geometry", 1, NULL, 'g'},
{"symmetry", 1, NULL, 'y'},
{"save-random", 1, NULL, 'r'},
+ {"cnoise", 1, NULL, 'c'},
{0, 0, NULL, 0}
};
/* Short options */
- while ((c = getopt_long(argc, argv, "hi:o:b:p:g:y:n:r:j:",
+ while ((c = getopt_long(argc, argv, "hi:o:b:p:g:y:n:r:j:c:",
longopts, NULL)) != -1)
{
switch (c) {
@@ -308,6 +313,14 @@ int main(int argc, char *argv[])
n_threads = atoi(optarg);
break;
+ case 'c' :
+ cnoise = strtod(optarg, &rval);
+ if ( *rval != '\0' ) {
+ ERROR("Invalid cell noise value.\n");
+ return 1;
+ }
+ break;
+
case 0 :
break;
@@ -430,6 +443,7 @@ int main(int argc, char *argv[])
qargs.cell = cell;
qargs.template_image = &image;
qargs.stream = ofh;
+ qargs.cnoise = cnoise;
run_threads(n_threads, run_job, create_job, finalise_job,
&qargs, n, n, 1, 0);