X-Git-Url: http://git.kpe.io/?p=ctsim.git;a=blobdiff_plain;f=src%2Fphm2rs.c;h=cf47837ef61df46947ba3c1189ce098f3ebd3ab6;hp=53c6690028b103245275621f34cfb92bc1472a7d;hb=249f195fc5ec53e539dd91397a1adafb2f8b5cfb;hpb=2a0006ec846e8da055fe002cb1611853dd01270c diff --git a/src/phm2rs.c b/src/phm2rs.c index 53c6690..cf47837 100644 --- a/src/phm2rs.c +++ b/src/phm2rs.c @@ -2,8 +2,33 @@ ** This is part of the CTSim program ** Copyright (C) 1983-2000 Kevin Rosenberg ** -** $Id: phm2rs.c,v 1.2 2000/04/28 13:50:45 kevin Exp $ +** $Id: phm2rs.c,v 1.10 2000/05/11 14:07:55 kevin Exp $ ** $Log: phm2rs.c,v $ +** Revision 1.10 2000/05/11 14:07:55 kevin +** *** empty log message *** +** +** Revision 1.9 2000/05/08 20:02:32 kevin +** ANSI C changes +** +** Revision 1.8 2000/05/04 18:16:34 kevin +** renamed filter definitions +** +** Revision 1.7 2000/05/03 08:49:50 kevin +** Code cleanup +** +** Revision 1.6 2000/04/30 18:23:53 kevin +** Code cleaning +** +** Revision 1.5 2000/04/30 10:13:27 kevin +** Fixed MPI bugs +** +** Revision 1.4 2000/04/30 04:06:13 kevin +** Update Raysum i/o routines +** Fix MPI bug in ctrec (scatter_raysum) that referenced rs_global +** +** Revision 1.3 2000/04/29 23:24:56 kevin +** *** empty log message *** +** ** Revision 1.2 2000/04/28 13:50:45 kevin ** Removed Makefile Makefile.in that are automatically generated by autoconf ** @@ -35,22 +60,12 @@ #include "ct.h" -#define O_PHANTOM 1 -#define O_DESC 2 -#define O_NRAY 3 -#define O_ROTANGLE 4 -#define O_TRACE 5 -#define O_VERBOSE 6 -#define O_HELP 7 -#define O_PICFILE 8 -#define O_INMEMORY 9 -#define O_DEBUG 10 -#define O_VERSION 11 +enum { O_PHANTOM, O_DESC, O_NRAY, O_ROTANGLE, O_TRACE, O_VERBOSE, O_HELP, O_PHMFILE, O_DEBUG, O_VERSION }; static struct option my_options[] = { {"phantom", 1, 0, O_PHANTOM}, - {"picfile", 1, 0, O_PICFILE}, + {"phmfile", 1, 0, O_PHMFILE}, {"desc", 1, 0, O_DESC}, {"nray", 1, 0, O_NRAY}, {"rotangle", 1, 0, O_ROTANGLE}, @@ -58,7 +73,6 @@ static struct option my_options[] = {"verbose", 0, 0, O_VERBOSE}, {"help", 0, 0, O_HELP}, {"debug", 0, 0, O_DEBUG}, - {"inmemory", 0, 0, O_INMEMORY}, {"version", 0, 0, O_VERSION}, {0, 0, 0, 0} }; @@ -70,9 +84,9 @@ usage (const char *program) if (mpi_ct.my_rank == 0) { #endif - fprintf(stdout,"usage: %s outfile ndet nview [--phantom phantom-name] [--picfile filename] [OPTIONS]\n", kbasename(program)); + fprintf(stdout,"usage: %s outfile ndet nview [--phantom phantom-name] [--phmfile filename] [OPTIONS]\n", kbasename(program)); fprintf(stdout,"Calculate raysums (projections) through phantom object, either\n"); - fprintf(stdout,"a predefined --phantom or a --picfile\n"); + fprintf(stdout,"a predefined --phantom or a --phmfile\n"); fprintf(stdout,"\n"); fprintf(stdout," outfile Name of output file for raysums\n"); fprintf(stdout," ndet Number of detectors\n"); @@ -82,18 +96,17 @@ if (mpi_ct.my_rank == 0) fprintf(stdout," rowland Rowland head phantom\n"); fprintf(stdout," browland Bordered Rowland head phantom\n"); fprintf(stdout," unitpulse Unit pulse phantom\n"); - fprintf(stdout," --picfile Get Phantom from picture file\n"); + fprintf(stdout," --phmfile Get Phantom from phantom file\n"); fprintf(stdout," --desc Description of raysum\n"); fprintf(stdout," --nray Number of rays per detector (default = 1)\n"); fprintf(stdout," --rotangle Degrees to rotate view through, multiple of PI (default = 1)\n"); fprintf(stdout," --trace Trace level to use\n"); fprintf(stdout," none No tracing (default)\n"); fprintf(stdout," text Trace text level\n"); - fprintf(stdout," pic Trace picture\n"); + fprintf(stdout," phm Trace PHANTOM\n"); fprintf(stdout," rays Trace rays\n"); fprintf(stdout," plot Trace plot\n"); fprintf(stdout," clipping Trace clipping\n"); - fprintf(stdout," --inmemory Use memory storage\n"); fprintf(stdout," --verbose Verbose mode\n"); fprintf(stdout," --debug Debug mode\n"); fprintf(stdout," --version Print version\n"); @@ -112,24 +125,23 @@ int main (const int argc, char *const argv[]) { DETECTOR *det; - PICTURE *pic = NULL; - RAYSUM *rs_global; - char str[256], *opt_outfile, opt_desc[MAXREMARK+1]; - char opt_picfilename[256]; + PHANTOM *phm = NULL; + RAYSUM *rs_global = NULL; + char str[256], *opt_outfile = NULL, opt_desc[MAXREMARK+1]; + char opt_phmfilename[256]; char *endptr, *endstr; int opt_ndet, opt_nview; int opt_nray = 1; - int opt_trace = 0, opt_picnum = -1; + int opt_trace = 0, opt_phmnum = -1; int opt_verbose = 0; int opt_debug = 0; - int opt_in_memory = FALSE; double opt_rotangle = 1; - double time_start, time_end; + double time_start = 0, time_end = 0; #ifdef MPI_CT RAYSUM *rs_local; int mpi_argc = argc; char **mpi_argv = (char **) argv; - double mpi_t1, mpi_t2, mpi_t, mpi_t_g; + double mpi_t1 = 0, mpi_t2 = 0, mpi_t, mpi_t_g; MPI_Init(&mpi_argc, &mpi_argv); MPI_Comm_dup (MPI_COMM_WORLD, &mpi_ct.comm); @@ -141,9 +153,6 @@ main (const int argc, char *const argv[]) mpi_ct.nproc, MPI_MAX_PROCESS); exit(1); } -#endif - -#ifdef MPI_CT time_start = MPI_Wtime(); #else time_start = td_current_sec(); @@ -153,7 +162,7 @@ main (const int argc, char *const argv[]) if (mpi_ct.my_rank == 0) { #endif strcpy(opt_desc, ""); - strcpy(opt_picfilename, ""); + strcpy(opt_phmfilename, ""); while (1) { int c = getopt_long(argc, argv, "", my_options, NULL); char *endptr = NULL; @@ -164,17 +173,17 @@ main (const int argc, char *const argv[]) switch (c) { case O_PHANTOM: - opt_picnum = opt_set_picture(optarg, argv[0]); - pic = create_pic(opt_picnum); + opt_phmnum = opt_set_phantom (optarg, argv[0]); + phm = phm_create (opt_phmnum); break; - case O_PICFILE: + case O_PHMFILE: #ifdef MPI_CT if (mpi_ct.my_rank == 0) - fprintf(stderr, "Can not read picture from file in MPI mode\n"); + fprintf(stderr, "Can not read phantom from file in MPI mode\n"); exit(1); #endif - strncpy(opt_picfilename, optarg, sizeof(opt_picfilename)); - pic = create_pic_from_file(opt_picfilename); + strncpy(opt_phmfilename, optarg, sizeof(opt_phmfilename)); + phm = phm_create_from_file(opt_phmfilename); break; case O_VERBOSE: opt_verbose = 1; @@ -182,8 +191,6 @@ main (const int argc, char *const argv[]) case O_DEBUG: opt_debug = 1; break; - case O_INMEMORY: - opt_in_memory = 1; break; case O_TRACE: opt_trace = opt_set_trace(optarg, argv[0]); @@ -226,7 +233,7 @@ main (const int argc, char *const argv[]) } } - if (pic == NULL) { + if (phm == NULL) { fprintf(stderr, "No phantom defined\n"); usage(argv[0]); exit(1); @@ -254,12 +261,12 @@ main (const int argc, char *const argv[]) snprintf(str, sizeof(str), "Raysum_Collect: NDet=%d, Nview=%d, NRay=%d, RotAngle=%.2f, ", opt_ndet, opt_nview, opt_nray, opt_rotangle); - if (opt_picfilename[0]) { + if (opt_phmfilename[0]) { strncat(str, "Phantom=", sizeof(str)); - strncat(str, opt_picfilename, sizeof(str)); - } else if (opt_picnum != -1) { + strncat(str, opt_phmfilename, sizeof(str)); + } else if (opt_phmnum != -1) { strncat(str, "Phantom=", sizeof(str)); - strncat(str, name_of_picture(opt_picnum), sizeof(str)); + strncat(str, name_of_phantom(opt_phmnum), sizeof(str)); } if (opt_desc[0]) { strncat(str, ": ", sizeof(str)); @@ -276,32 +283,33 @@ main (const int argc, char *const argv[]) MPI_Bcast(&opt_nview, 1, MPI_INT, 0, mpi_ct.comm); MPI_Bcast(&opt_ndet, 1, MPI_INT, 0, mpi_ct.comm); MPI_Bcast(&opt_nray, 1, MPI_INT, 0, mpi_ct.comm); - MPI_Bcast(&opt_picnum, 1, MPI_INT, 0, mpi_ct.comm); + MPI_Bcast(&opt_phmnum, 1, MPI_INT, 0, mpi_ct.comm); MPI_Bcast(&opt_verbose, 1, MPI_INT, 0, mpi_ct.comm); MPI_Bcast(&opt_debug, 1, MPI_INT, 0, mpi_ct.comm); MPI_Bcast(&opt_trace, 1, MPI_INT, 0, mpi_ct.comm); - if (mpi_ct.my_rank > 0 && opt_picnum > 0) - pic = create_pic(opt_picnum); + if (mpi_ct.my_rank > 0 && opt_phmnum >= 0) + phm = phm_create (opt_phmnum); #endif opt_rotangle *= PI; - det = detect_create (pic, opt_ndet, opt_nview, opt_nray, opt_rotangle); + det = detector_create (phm, DETECTOR_PARALLEL, opt_ndet, opt_nview, opt_nray, opt_rotangle); #ifdef MPI_CT mpi_ct_calc_work_units(opt_nview); if (mpi_ct.my_rank == 0) { - rs_global = raysum_create_from_det (opt_outfile, det, TRUE); + rs_global = raysum_create_from_det (opt_outfile, det); + raysum_alloc_views(rs_global); } - rs_local = raysum_create_from_det (NULL, det, TRUE); + rs_local = raysum_create_from_det (NULL, det); rs_local->nview = mpi_ct.local_work_units[mpi_ct.my_rank]; if (opt_debug) printf("rs_local->nview = %d (process %d)\n", rs_local->nview, mpi_ct.my_rank); if (opt_verbose) mpi_t1 = MPI_Wtime(); - raysum_collect (rs_local, det, pic, mpi_ct.start_work_unit[mpi_ct.my_rank], opt_trace, FALSE); + raysum_collect (rs_local, det, phm, mpi_ct.start_work_unit[mpi_ct.my_rank], opt_trace, FALSE); if (opt_verbose) { mpi_t2 = MPI_Wtime(); mpi_t = mpi_t2 - mpi_t1; @@ -321,8 +329,8 @@ main (const int argc, char *const argv[]) printf("Time to gather rs = %f secs, Max = %f secs\n", mpi_t, mpi_t_g); } #else - rs_global = raysum_create_from_det (opt_outfile, det, opt_in_memory); - raysum_collect (rs_global, det, pic, 0, opt_trace, FALSE); + rs_global = raysum_create_from_det (opt_outfile, det); + raysum_collect (rs_global, det, phm, 0, opt_trace, FALSE); #endif #ifdef MPI_CT @@ -351,18 +359,11 @@ main (const int argc, char *const argv[]) raysum_close (rs_global); } #else - if (opt_in_memory) - raysum_write (rs_global); + raysum_write (rs_global); raysum_close (rs_global); #endif - detect_free (det); - - if (opt_trace >= TRACE_PIC) - { - crt_set_cpos (1, 1); - printf("Finished\n"); - } + detector_free (det); return (0); }