aboutsummaryrefslogtreecommitdiff
path: root/test-charge.c
diff options
context:
space:
mode:
Diffstat (limited to 'test-charge.c')
-rw-r--r--test-charge.c86
1 files changed, 86 insertions, 0 deletions
diff --git a/test-charge.c b/test-charge.c
new file mode 100644
index 0000000..0b73d24
--- /dev/null
+++ b/test-charge.c
@@ -0,0 +1,86 @@
+#include <stdio.h>
+#include "sno_charge.h"
+#include <unistd.h>
+#include <stdlib.h>
+#include <errno.h> /* for errno */
+#include <string.h> /* for strerror() */
+
+void usage(void)
+{
+ fprintf(stderr,"Usage: ./test-charge\n");
+ fprintf(stderr," -n number of PE\n");
+ fprintf(stderr," -b number of bins\n");
+ fprintf(stderr," --xmin Lowest value of charge\n");
+ fprintf(stderr," --xmax Highest value of charge\n");
+ fprintf(stderr," -h Display this help message\n");
+ exit(1);
+}
+
+int main(int argc, char **argv)
+{
+ size_t i, j, nq, n;
+ double *x;
+ double qlo, qhi;
+
+ n = 10;
+ nq = 1000;
+ qlo = -1.0;
+ qhi = 1.0;
+
+ for (i = 1; i < argc; i++) {
+ if (!strncmp(argv[i], "--", 2)) {
+ if (!strcmp(argv[i]+2,"xmin")) {
+ qlo = strtod(argv[++i],NULL);
+ continue;
+ } else if (!strcmp(argv[i]+2,"xmax")) {
+ qhi = strtod(argv[++i],NULL);
+ continue;
+ }
+ } else if (argv[i][0] == '-') {
+ switch (argv[i][1]) {
+ case 'n':
+ n = atoi(argv[++i]);
+ break;
+ case 'b':
+ nq = atoi(argv[++i]);
+ break;
+ case 'h':
+ usage();
+ default:
+ fprintf(stderr, "unrecognized option '%s'\n", argv[i]);
+ exit(1);
+ }
+ }
+ }
+
+ init_charge();
+
+ x = malloc(nq*sizeof(double));
+
+ for (i = 0; i < nq; i++) {
+ x[i] = qlo + (qhi-qlo)*i/(nq-1);
+ }
+
+ FILE *pipe = popen("graph -T X --bitmap-size 2000x2000 -X 'Charge (PE)' -Y Probability", "w");
+
+ if (!pipe) {
+ fprintf(stderr, "error running graph command: %s\n", strerror(errno));
+ exit(1);
+ }
+
+ for (i = 1; i <= n; i++) {
+ for (j = 0; j < nq; j++) {
+ fprintf(pipe, "%.10f %.10f\n", x[j], pq(x[j],i));
+ }
+ fprintf(pipe, "\n\n");
+ }
+
+ if (pclose(pipe)) {
+ fprintf(stderr, "error closing graph command: %s\n", strerror(errno));
+ exit(1);
+ }
+
+ free(x);
+
+ return 0;
+}