X-Git-Url: http://git.kpe.io/?p=ctsim.git;a=blobdiff_plain;f=tools%2Fphm2pj.cpp;fp=tools%2Fphm2pj.cpp;h=2bd7e3facb045a8acd4877ac8288b3feffd72832;hp=7fa9bde79fe8133c34b3472905d70b4e51237533;hb=747a2ec9e0f3c49723b36da0cc77270fbecc9dfe;hpb=728543fba0d875b2977ea2b6562df1ee4a6af8f7 diff --git a/tools/phm2pj.cpp b/tools/phm2pj.cpp index 7fa9bde..2bd7e3f 100644 --- a/tools/phm2pj.cpp +++ b/tools/phm2pj.cpp @@ -27,13 +27,14 @@ #include "timer.h" -enum { O_PHANTOM, O_DESC, O_NRAY, O_ROTANGLE, O_PHMFILE, O_GEOMETRY, O_FOCAL_LENGTH, O_CENTER_DETECTOR_LENGTH, +enum { O_PHANTOM, O_DESC, O_NRAY, O_ROTANGLE, O_PHMFILE, O_IMAGEFILE, O_GEOMETRY, O_FOCAL_LENGTH, O_CENTER_DETECTOR_LENGTH, O_VIEW_RATIO, O_SCAN_RATIO, O_OFFSETVIEW, O_TRACE, O_VERBOSE, O_HELP, O_DEBUG, O_VERSION }; static struct option phm2pj_options[] = { {"phantom", 1, 0, O_PHANTOM}, {"phmfile", 1, 0, O_PHMFILE}, + {"imagefile", 1, 0, O_IMAGEFILE}, {"desc", 1, 0, O_DESC}, {"nray", 1, 0, O_NRAY}, {"rotangle", 1, 0, O_ROTANGLE}, @@ -62,12 +63,14 @@ phm2pj_usage (const char *program) std::cout << " outfile Name of output file for projections\n"; std::cout << " ndet Number of detectors\n"; std::cout << " nview Number of rotated views\n"; + std::cout << " SELECT PHANTOM Use either --phantom, --phmfile, or --imagefile\n"; std::cout << " --phantom Phantom to use for projection\n"; std::cout << " herman Herman head phantom\n"; std::cout << " shepp-logan Shepp-Logan head phantom\n"; std::cout << " unit-pulse Unit pulse phantom\n"; std::cout << " --phmfile Get Phantom from phantom file\n"; - std::cout << " --desc Description of raysum\n"; + std::cout << " --imagefile Get Phantom from imagefile\n"; + std::cout << " --desc Add description for projection file\n"; std::cout << " --nray Number of rays per detector (default = 1)\n"; std::cout << " --rotangle Angle to rotate view through (fraction of a circle)\n"; std::cout << " (default = select appropriate for geometry)\n"; @@ -106,6 +109,7 @@ phm2pj_main (int argc, char* const argv[]) std::string opt_desc; std::string optPhmName; std::string optPhmFileName; + std::string optImageFileName; int opt_ndet; int opt_nview; int opt_offsetview = 0; @@ -121,7 +125,7 @@ phm2pj_main (int argc, char* const argv[]) char* endptr = NULL; char* endstr; UNUSED(opt_debug); - + #ifdef HAVE_MPI MPIWorld mpiWorld (argc, argv); #endif @@ -144,6 +148,9 @@ phm2pj_main (int argc, char* const argv[]) case O_PHMFILE: optPhmFileName = optarg; break; + case O_IMAGEFILE: + optImageFileName = optarg; + break; case O_VERBOSE: opt_verbose = 1; break; @@ -244,11 +251,19 @@ phm2pj_main (int argc, char* const argv[]) } } - if (optPhmName == "" && optPhmFileName == "") { + if (optPhmName.empty() && optPhmFileName.empty() && optImageFileName.empty()) { std::cerr << "No phantom defined\n" << std::endl; phm2pj_usage(argv[0]); return (1); } + if ((! optPhmName.empty() && !optPhmFileName.empty()) || + (! optPhmName.empty() && !optImageFileName.empty()) || + (! optPhmFileName.empty() && !optImageFileName.empty())) { + std::cerr << "Multiple phantoms define. Use only --phantom, --phmfile, or --imagefile\n" << std::endl; + phm2pj_usage(argv[0]); + return (1); + } + if (optind + 3 != argc) { phm2pj_usage(argv[0]); return (1); @@ -279,31 +294,38 @@ phm2pj_main (int argc, char* const argv[]) std::ostringstream desc; desc << "phm2pj: NDet=" << opt_ndet << ", Nview=" << opt_nview << ", NRay=" << opt_nray << ", RotAngle=" << opt_rotangle << ", OffsetView =" << opt_offsetview << ", Geometry=" << optGeometryName << ", "; - if (optPhmFileName.length()) { + + if (!optPhmFileName.empty()) { desc << "PhantomFile=" << optPhmFileName; - } else if (optPhmName != "") { + } else if (!optPhmName.empty()) { desc << "Phantom=" << optPhmName; + } else if (!optImageFileName.empty()) { + desc << "Imagefile=" << optImageFileName; } if (opt_desc.length()) { desc << ": " << opt_desc; } opt_desc = desc.str(); - if (optPhmName != "") { + if (!optPhmName.empty()) { phm.createFromPhantom (optPhmName.c_str()); if (phm.fail()) { std::cout << phm.failMessage() << std::endl << std::endl; phm2pj_usage(argv[0]); return (1); } - } - - if (optPhmFileName != "") { + } else if (!optPhmFileName.empty()) { #ifdef HAVE_MPI std::cerr << "Can not read phantom from file in MPI mode\n"; return (1); #endif - phm.createFromFile (optPhmFileName.c_str()); + phm.createFromPhmFile (optPhmFileName.c_str()); + } else if (!optImageFileName.empty()) { +#ifdef HAVE_MPI + std::cerr << "Can not read image from file in MPI mode\n"; + return (1); +#endif + phm.createFromImageFile (optImageFileName.c_str()); } #ifdef HAVE_MPI