r120: *** empty log message ***
[ctsim.git] / src / phm2pj.cpp
index a4510c40bb3b09312325570cae510776cf0ab143..4ed549ee36271a4a80f93fa47657871005c098fa 100644 (file)
@@ -9,7 +9,7 @@
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2000 Kevin Rosenberg
 **
-**  $Id: phm2pj.cpp,v 1.3 2000/06/22 10:17:28 kevin Exp $
+**  $Id: phm2pj.cpp,v 1.4 2000/06/25 17:32:24 kevin Exp $
 **
 **  This program is free software; you can redistribute it and/or modify
 **  it under the terms of the GNU General Public License (version 2) as
@@ -88,15 +88,15 @@ int
 phm2pj_main (int argc, char* argv[])
 {
   Phantom phm;
-  ScannerGeometry opt_geometry = DETECTOR_PARALLEL;
+  string optGeometryName = Scanner::GEOMETRY_PARALLEL_STR;
   char *opt_outfile = NULL;
   string opt_desc;
-  string opt_phmfilename;
+  string optPhmFileName;
   int opt_ndet;
   int opt_nview;
   int opt_nray = 1;
   int opt_trace = 0;
-  string optPhmName;
+  string optPhmName = Phantom::PHM_HERMAN_STR;
   int opt_verbose = 0;
   int opt_debug = 0;
   double opt_rotangle = 1;
@@ -121,20 +121,9 @@ phm2pj_main (int argc, char* argv[])
       switch (c) {
       case O_PHANTOM:
        optPhmName = optarg;
-       if (! phm.createFromPhantom (optPhmName.c_str())) {
-         cout << "ERROR: Invalid phantom name " << optPhmName << endl << endl;
-         phm2pj_usage(argv[0]);
-         return (1);
-       }
        break;
       case O_PHMFILE:
-#ifdef HAVE_MPI
-       if (mpiWorld.getRank() == 0)
-         cerr << "Can not read phantom from file in MPI mode" << endl;
-       return (1);
-#endif
-       opt_phmfilename = optarg;
-       phm.createFromFile (opt_phmfilename.c_str());
+       optPhmFileName = optarg;
        break;
       case O_VERBOSE:
        opt_verbose = 1;
@@ -187,8 +176,8 @@ phm2pj_main (int argc, char* argv[])
       }
     }
   
-    if (phm.nPElem() == 0) {
-      cerr << "No phantom defined" << endl;
+    if (optPhmName == "" && optPhmFileName == "") {
+      cerr << "No phantom defined" << endl << endl;
       phm2pj_usage(argv[0]);
       return (1);
     }
@@ -215,8 +204,8 @@ phm2pj_main (int argc, char* argv[])
 
     ostringstream desc;
     desc << "Raysum_Collect: NDet=" << opt_ndet << ", Nview=" << opt_nview << ", NRay=" << opt_nray << ", RotAngle=" << opt_rotangle << ", ";
-    if (opt_phmfilename.length()) {
-      desc << "PhantomFile=" << opt_phmfilename;
+    if (optPhmFileName.length()) {
+      desc << "PhantomFile=" << optPhmFileName;
     } else if (optPhmName != "") {
       desc << "Phantom=" << optPhmName;
     }
@@ -224,6 +213,24 @@ phm2pj_main (int argc, char* argv[])
       desc << ": " << opt_desc;
     }
     opt_desc = desc.str();
+
+    if (optPhmName != "") {
+      phm.createFromPhantom (optPhmName.c_str());
+      if (phm.fail()) {
+       cout << phm.failMessage() << endl << endl;
+       phm2pj_usage(argv[0]);
+       return (1);
+      }
+    }
+
+    if (optPhmFileName != "") {
+#ifdef HAVE_MPI
+      cerr << "Can not read phantom from file in MPI mode" << endl;
+      return (1);
+#endif
+      phm.createFromFile (optPhmFileName.c_str());
+    }
+
 #ifdef HAVE_MPI
   }
 #endif
@@ -245,8 +252,11 @@ phm2pj_main (int argc, char* argv[])
 #endif
 
   opt_rotangle *= PI;
-  Scanner scanner (phm, opt_geometry, opt_ndet, opt_nview, opt_nray, opt_rotangle);
-
+  Scanner scanner (phm, optGeometryName.c_str(), opt_ndet, opt_nview, opt_nray, opt_rotangle);
+  if (scanner.fail()) {
+    cout << "Scanner Creation Error: " << scanner.failMessage() << endl;
+    return (1);
+  }
 #ifdef HAVE_MPI
   mpiWorld.setTotalWorkUnits (opt_nview);