-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},
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},
{"desc", 1, 0, O_DESC},
{"nray", 1, 0, O_NRAY},
{"rotangle", 1, 0, O_ROTANGLE},
{"desc", 1, 0, O_DESC},
{"nray", 1, 0, O_NRAY},
{"rotangle", 1, 0, O_ROTANGLE},
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 << " 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 << " --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 << " --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 << " --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";
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";
+ 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);
+ }
+
- desc << "phm2pj: NDet=" << opt_ndet << ", Nview=" << opt_nview << ", NRay=" << opt_nray << ", RotAngle=" << opt_rotangle << "OffsetView =" << opt_offsetview << ", Geometry=" << optGeometryName << ", ";
- if (optPhmFileName.length()) {
+ desc << "phm2pj: NDet=" << opt_ndet << ", Nview=" << opt_nview << ", NRay=" << opt_nray << ", RotAngle=" << opt_rotangle << ", OffsetView =" << opt_offsetview << ", Geometry=" << optGeometryName << ", ";
+
+ if (!optPhmFileName.empty()) {
phm.createFromPhantom (optPhmName.c_str());
if (phm.fail()) {
std::cout << phm.failMessage() << std::endl << std::endl;
phm2pj_usage(argv[0]);
return (1);
}
phm.createFromPhantom (optPhmName.c_str());
if (phm.fail()) {
std::cout << phm.failMessage() << std::endl << std::endl;
phm2pj_usage(argv[0]);
return (1);
}
- 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());