r184: *** empty log message ***
[ctsim.git] / libctsim / phantom.cpp
index ccf728a11d503c34c9ea1d507461c60efd1d78dd..c74c37a19252a0406df097b5f969d632a1e41ac0 100644 (file)
@@ -9,7 +9,7 @@
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2000 Kevin Rosenberg
 **
-**  $Id: phantom.cpp,v 1.14 2000/07/31 14:48:35 kevin Exp $
+**  $Id: phantom.cpp,v 1.16 2000/08/25 15:59:13 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
 
 const int Phantom::PHM_INVALID = -1;
 const int Phantom::PHM_HERMAN = 0;
-const int Phantom::PHM_BHERMAN = 1;
-const int Phantom::PHM_ROWLAND = 2;
-const int Phantom::PHM_BROWLAND = 3;
+const int Phantom::PHM_B_HERMAN = 1;
+const int Phantom::PHM_SHEPP_LOGAN = 2;
+const int Phantom::PHM_B_SHEPP_LOGAN = 3;
 const int Phantom::PHM_UNITPULSE = 4;
 
 const char* Phantom::s_aszPhantomName[] = 
 {
   {"herman"},
-  {"bherman"},
-  {"rowland"},
-  {"browland"},
+  {"herman-b"},
+  {"shepp-logan"},
+  {"shepp-logan-b"},
   {"unitpulse"},
 };
 
 const char* Phantom::s_aszPhantomTitle[] = 
 {
   {"Herman Head"},
-  {"Herman Head Bordered"},
-  {"Rowland Head"},
-  {"Rowland Head Bordered"},
+  {"Herman Head (Bordered)"},
+  {"Shepp-Logan"},
+  {"Shepp-Logan (Bordered)"},
   {"Unit Pulse"},
 };
 
@@ -155,14 +155,14 @@ Phantom::createFromPhantom (const int phmid)
     case PHM_HERMAN:
       addStdHerman();
       break;
-    case PHM_BHERMAN:
+    case PHM_B_HERMAN:
       addStdHermanBordered();
       break;
-    case PHM_ROWLAND:
-      addStdRowland();
+    case PHM_SHEPP_LOGAN:
+      addStdSheppLogan();
       break;
-    case PHM_BROWLAND:
-      addStdRowlandBordered ();
+    case PHM_B_SHEPP_LOGAN:
+      addStdSheppLoganBordered();
       break;
     case PHM_UNITPULSE:
       m_composition = P_UNIT_PULSE;
@@ -204,19 +204,25 @@ Phantom::createFromFile (const char* const fname)
     return (false);
 
   do {
-    double cx, cy, u, v, rot, dens;
-    char pelemtype[80];
-    int n = fscanf (fp, "%79s %lf %lf %lf %lf %lf %lf",
-               pelemtype, &cx, &cy, &u, &v, &rot, &dens);
+    if (! feof(fp)) {
+      double cx, cy, u, v, rot, dens;
+      char pelemtype[80];
+      char str[1024];
+      fgets (str, sizeof(str), fp);
+      int n = sscanf (str, "%79s %lf %lf %lf %lf %lf %lf", pelemtype, &cx, &cy, &u, &v, &rot, &dens);
     
-    if (n == EOF || n == 0) {  /* end of file */
-      stoploop = true;
-      retval = false;
-    } else if (n != 7) {
-      stoploop = true;
-      retval = false;
+      if (n == EOF || n == 0) {        /* end of file */
+       stoploop = true;
+       retval = false;
+      } else if (n != 7) {
+       stoploop = true;
+       retval = false;
+      } else {
+       addPElem (pelemtype, cx, cy, u, v, rot, dens);
+       retval = true;
+      }
     } else {
-      addPElem (pelemtype, cx, cy, u, v, rot, dens);
+      stoploop = true;
       retval = true;
     }
   } while (stoploop == false);
@@ -352,7 +358,7 @@ Phantom::draw (SGP& sgp) const
 
 
 /* NAME
- *   addStdRowland             Make head phantom of S.W. Rowland
+ *   addStdSheppLogan  Make head phantom of Shepp-Logan
  *
  * REFERENCES
  *   S. W. Rowland, "Computer Implementation of Image Reconstruction
@@ -361,7 +367,7 @@ Phantom::draw (SGP& sgp) const
  */
 
 void 
-Phantom::addStdRowland ()
+Phantom::addStdSheppLogan ()
 {
   addPElem ("ellipse",  0.0000,  0.0000, 0.6900,  0.9200,   0.0,  1.00);
   addPElem ("ellipse",  0.0000, -0.0184, 0.6624,  0.8740,   0.0, -0.98);
@@ -377,9 +383,9 @@ Phantom::addStdRowland ()
 }
 
 void 
-Phantom::addStdRowlandBordered ()
+Phantom::addStdSheppLoganBordered ()
 {
-  addStdRowland ();
+  addStdSheppLogan ();
   addPElem ("rectangle", 0.000, 0.0000, 0.7500, 1.000, 0.0, 0.00);
 }
 
@@ -415,7 +421,7 @@ void
 Phantom::addStdHermanBordered ()
 {
   addStdHerman();
-  addPElem ("rectangle",  0.000, 0.000, 8.650, 8.650,  0.00, 0.000);
+  addPElem ("rectangle",  0.000, 0.00, 9.000, 6.800,  0.00, 0.000);
 }