** This is part of the CTSim program
** Copyright (C) 1983-2000 Kevin Rosenberg
**
-** $Id: ctrec.c,v 1.10 2000/05/11 01:06:30 kevin Exp $
+** $Id: ctrec.c,v 1.11 2000/05/16 04:33:59 kevin Exp $
** $Log: ctrec.c,v $
+** Revision 1.11 2000/05/16 04:33:59 kevin
+** Improved option processing
+**
** Revision 1.10 2000/05/11 01:06:30 kevin
** Changed sprintf to snprintf
**
};
void
-usage (const char *program)
+ctrec_usage (const char *program)
{
fprintf(stdout,"usage: %s raysum-file image-file nx-image ny-image [OPTIONS]\n", kbasename(program));
fprintf(stdout,"Image reconstruction from raysum projections\n");
fprintf(stdout," --debug Turn on debug mode\n");
fprintf(stdout," --version Print version\n");
fprintf(stdout," --help Print this help message\n");
- exit(1);
}
#ifdef MPI_CT
static void mpi_scatter_rs (RAYSUM *rs_global, RAYSUM *rs_local, const int debug);
#endif
+
static void print_raysum_info(const RAYSUM *rs);
int
-main (const int argc, char *const argv[])
+ctrec_main (const int argc, char *const argv[])
{
IMAGE *im_global = NULL;
RAYSUM *rs_global = NULL;
switch (c)
{
case O_INTERP:
- opt_interp = opt_set_interpolation(optarg, argv[0]);
+ if ((opt_interp = opt_set_interpolation(optarg)) < 0) {
+ ctrec_usage(argv[0]);
+ return (1);
+ }
break;
case O_FILTER:
- opt_filter = opt_set_filter(optarg, argv[0]);
+ if ((opt_filter = opt_set_filter(optarg)) < 0) {
+ ctrec_usage(argv[0]);
+ return (1);
+ }
break;
case O_BACKPROJ:
- opt_backproj = opt_set_backproj(optarg, argv[0]);
+ if ((opt_backproj = opt_set_backproj(optarg)) < 0) {
+ ctrec_usage(argv[0]);
+ return (1);
+ }
break;
case O_FILTER_PARAM:
opt_filter_param = strtod(optarg, &endptr);
if (endptr != optarg + strlen(optarg)) {
- usage(argv[0]);
- exit(1);
+ ctrec_usage(argv[0]);
}
break;
case O_VERBOSE:
opt_debug = 1;
break;
case O_TRACE:
- opt_trace = opt_set_trace(optarg, argv[0]);
+ if ((opt_trace = opt_set_trace(optarg)) < 0) {
+ ctrec_usage(argv[0]);
+ return (1);
+ }
break;
case O_VERSION:
#ifdef VERSION
exit(0);
case O_HELP:
case '?':
- usage(argv[0]);
- exit(0);
+ ctrec_usage(argv[0]);
+ return (0);
default:
- usage(argv[0]);
- exit(1);
+ ctrec_usage(argv[0]);
+ return (1);
}
}
if (optind + 4 != argc) {
- usage(argv[0]);
- exit(1);
+ ctrec_usage(argv[0]);
+ return (1);
}
rs_name = argv[optind];
#endif
#ifdef MPI_CT
- if (mpi_ct.my_rank == 0) {
- raysum_close (rs_global);
- }
-
if (opt_verbose)
mpi_t1 = MPI_Wtime();
if (mpi_ct.my_rank == 0)
printf("Time to reduce image = %f secs, max time = %f\n", mpi_t, mpi_t_g);
}
- if (mpi_ct.my_rank == 0) {
- strncpy (im_global->remark, remark, sizeof(im_global->remark));
- time_end = MPI_Wtime();
- im_global->calctime = time_end - time_start;
- image_save (im_global);
- if (opt_verbose)
- fprintf (stdout, "Time active = %.2f\n", im_global->calctime);
- }
-#else
- raysum_close (rs_global);
- strncpy (im_global->remark, remark, sizeof(im_global->remark));
+
+ if (mpi_ct.my_rank == 0)
+ time_end = MPI_Wtime();
+#else
time_end = td_current_sec();
- im_global->calctime = time_end - time_start;
- image_save (im_global);
- if (opt_verbose)
- fprintf (stdout, "Time active = %.2f secs\n", im_global->calctime);
#endif
+
+#ifdef MPI_CT
+ if (mpi_ct.my_rank == 0)
+#endif
+ {
+ raysum_close (rs_global);
+ strncpy (im_global->remark, remark, sizeof(im_global->remark));
+ im_global->calctime = time_end - time_start;
+ image_save (im_global);
+ if (opt_verbose)
+ fprintf (stdout, "Time active = %.2f\n", im_global->calctime);
+ }
+
#ifdef MPI_CT
MPI_Finalize();
#endif
printf (" rot_start: %f\n", rs->rot_start);
printf (" rot_inc: %f\n", rs->rot_inc);
}
+
+#ifndef NO_MAIN
+int
+main (const int argc, char *const argv[])
+{
+ return (ctrec_main(argc, argv));
+}
+#endif
+