X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=src%2Fphm2rs.c;h=3c4217d1c3e4551e66ad45d5e04152690182c0a0;hb=cda35cc393bfef9a53de1a5c611e09992fb77022;hp=13a4e85eb44c776e68140923f2c078fb6ede7aff;hpb=13838bda88b63a2535b5baaf7197006767de4b8e;p=ctsim.git diff --git a/src/phm2rs.c b/src/phm2rs.c index 13a4e85..3c4217d 100644 --- a/src/phm2rs.c +++ b/src/phm2rs.c @@ -2,10 +2,30 @@ ** This is part of the CTSim program ** Copyright (C) 1983-2000 Kevin Rosenberg ** -** $Id: phm2rs.c,v 1.1 2000/04/28 13:02:44 kevin Exp $ +** $Id: phm2rs.c,v 1.7 2000/05/03 08:49:50 kevin Exp $ ** $Log: phm2rs.c,v $ -** Revision 1.1 2000/04/28 13:02:44 kevin -** Initial revision +** 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 +** +** Revision 1.1.1.1 2000/04/28 13:02:44 kevin +** Initial CVS import for first public release +** ** ** ** This program is free software; you can redistribute it and/or modify @@ -38,15 +58,14 @@ #define O_TRACE 5 #define O_VERBOSE 6 #define O_HELP 7 -#define O_PICFILE 8 -#define O_INMEMORY 9 +#define O_PHMFILE 8 #define O_DEBUG 10 #define O_VERSION 11 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}, @@ -54,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} }; @@ -66,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"); @@ -78,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"); @@ -108,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); @@ -137,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(); @@ -149,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; @@ -160,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; @@ -178,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]); @@ -222,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); @@ -250,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)); @@ -272,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 = detect_create (phm, 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; @@ -317,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 @@ -347,16 +359,14 @@ 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) + if (opt_trace >= TRACE_PHM) { - crt_set_mode (GM_TEXT, TRUE); crt_set_cpos (1, 1); printf("Finished\n"); }