aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorThomas White <taw@physics.org>2014-03-11 16:43:06 +0100
committerThomas White <taw@physics.org>2014-03-11 16:43:06 +0100
commit9df6e29846ad8d7d69069400bd3419fa4749deb6 (patch)
treecddc1627899472fac90eb1b9bb42d2841f17e883 /src
parent22678ec74ccaf34c4b88b4b7ba23869b3074d55a (diff)
ambigator: Add --really-random
Diffstat (limited to 'src')
-rw-r--r--src/ambigator.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/ambigator.c b/src/ambigator.c
index 86d6d71c..bf9db16a 100644
--- a/src/ambigator.c
+++ b/src/ambigator.c
@@ -73,6 +73,7 @@ static void show_help(const char *s)
" --fg-graph=<fn> Save f and g correlation values to file <fn>.\n"
" --ncorr=<n> Use <n> correlations per crystal. Default 1000\n"
" -j <n> Use <n> threads for CC calculation.\n"
+" --really-random Be non-deterministic.\n"
);
}
@@ -721,6 +722,7 @@ int main(int argc, char *argv[])
int ncorr_set = 0;
float mean_nac;
int n_threads = 1;
+ int config_random = 0;
/* Long options */
const struct option longopts[] = {
@@ -735,6 +737,8 @@ int main(int argc, char *argv[])
{"fg-graph", 1, NULL, 5},
{"ncorr", 1, NULL, 6},
+ {"really-random", 0, &config_random, 1},
+
{0, 0, NULL, 0}
};
@@ -943,6 +947,24 @@ int main(int argc, char *argv[])
}
rng = gsl_rng_alloc(gsl_rng_mt19937);
+
+ if ( config_random ) {
+
+ FILE *fh;
+ unsigned long int seed;
+
+ fh = fopen("/dev/urandom", "r");
+ if ( fh == NULL ) {
+ ERROR("Failed to open /dev/urandom. Try again without"
+ " --really-random.\n");
+ return 1;
+ }
+
+ fread(&seed, sizeof(seed), 1, fh);
+ gsl_rng_set(rng, seed);
+ fclose(fh);
+ }
+
for ( i=0; i<n_crystals; i++ ) {
assignments[i] = (random_flat(rng, 1.0) > 0.5);
orig_assignments[i] = assignments[i];