r189: *** empty log message ***
[ctsim.git] / libctsim / phantom.cpp
index c74c37a19252a0406df097b5f969d632a1e41ac0..aff37a0ac9242fae8dcd4b8e5bc72d7b970f443d 100644 (file)
@@ -9,7 +9,7 @@
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2000 Kevin Rosenberg
 **
-**  $Id: phantom.cpp,v 1.16 2000/08/25 15:59:13 kevin Exp $
+**  $Id: phantom.cpp,v 1.18 2000/09/04 09:06:46 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
@@ -203,6 +203,7 @@ Phantom::createFromFile (const char* const fname)
   if ((fp = fopen (fname, "r")) == NULL)
     return (false);
 
+  m_name = fname;
   do {
     if (! feof(fp)) {
       double cx, cy, u, v, rot, dens;
@@ -386,7 +387,7 @@ void
 Phantom::addStdSheppLoganBordered ()
 {
   addStdSheppLogan ();
-  addPElem ("rectangle", 0.000, 0.0000, 0.7500, 1.000, 0.0, 0.00);
+  addPElem ("rectangle", 0.000, 0.0000, 0.8600, 1.150, 0.0, 0.00);
 }
 
 /* NAME
@@ -421,7 +422,7 @@ void
 Phantom::addStdHermanBordered ()
 {
   addStdHerman();
-  addPElem ("rectangle",  0.000, 0.00, 9.000, 6.800,  0.00, 0.000);
+  addPElem ("rectangle",  0.000, 0.00, 10.780, 8.110,  90.00, 0.000);
 }
 
 
@@ -439,11 +440,11 @@ Phantom::addStdHermanBordered ()
 void
 Phantom::convertToImagefile (ImageFile& im, const int in_nsample, const int trace) const
 {
-  convertToImagefile (im, in_nsample, trace, 0, im.nx());
+  convertToImagefile (im, in_nsample, trace, 0, im.nx(), true);
 }
 
 void 
-Phantom::convertToImagefile (ImageFile& im, const int in_nsample, const int trace, const int colStart, const int colCount) const
+Phantom::convertToImagefile (ImageFile& im, const int in_nsample, const int trace, const int colStart, const int colCount, bool bStoreAtColumnPos) const
 {
   int nx = im.nx();
   int ny = im.ny();
@@ -485,8 +486,12 @@ Phantom::convertToImagefile (ImageFile& im, const int in_nsample, const int trac
   ImageFileArray v = im.getArray();
 
   for (int ix = 0; ix < colCount; ix++)
-      for (int iy = 0; iy < ny; iy++)
-         v[ix][iy] = 0;
+    for (int iy = 0; iy < ny; iy++) {
+      int iColStore = ix;
+      if (bStoreAtColumnPos)
+       iColStore += colStart;
+      v[iColStore][iy] = 0;
+    }
 
   double x_start = xmin + (colStart * xinc);
   for (PElemConstIterator pelem = m_listPElem.begin(); pelem != m_listPElem.end(); pelem++) {
@@ -494,11 +499,14 @@ Phantom::convertToImagefile (ImageFile& im, const int in_nsample, const int trac
       double x, y, xi, yi;
       int ix, iy, kx, ky;
       for (ix = 0, x = x_start; ix < colCount; ix++, x += xinc) {
-         for (iy = 0, y = ymin; iy < ny; iy++, y += yinc) {
-             for (kx = 0, xi = x + kxofs; kx < nsample; kx++, xi += kxinc) {
-                 for (ky = 0, yi = y + kyofs; ky < nsample; ky++, yi += kyinc)
-                     if (rPElem.isPointInside (xi, yi, PHM_COORD) == TRUE)
-                         v[ix][iy] += rPElem.atten();
+       int iColStore = ix;
+       if (bStoreAtColumnPos)
+         iColStore += colStart;
+       for (iy = 0, y = ymin; iy < ny; iy++, y += yinc) {
+         for (kx = 0, xi = x + kxofs; kx < nsample; kx++, xi += kxinc) {
+           for (ky = 0, yi = y + kyofs; ky < nsample; ky++, yi += kyinc)
+             if (rPElem.isPointInside (xi, yi, PHM_COORD) == TRUE)
+               v[iColStore][iy] += rPElem.atten();
              } // for kx
          } /* for iy */
       }  /* for ix */