r628: no message
[ctsim.git] / libctsim / scanner.cpp
index ff3cd9af366833c74a3e7e3e52641aeeaaa43a2b..f28d9fa56030032499095b13596f433a466510f5 100644 (file)
@@ -9,7 +9,7 @@
 **  This is part of the CTSim program
 **  Copyright (c) 1983-2001 Kevin Rosenberg
 **
-**  $Id: scanner.cpp,v 1.34 2001/03/10 23:14:16 kevin Exp $
+**  $Id: scanner.cpp,v 1.35 2001/03/11 06:34:37 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
@@ -125,6 +125,7 @@ Scanner::Scanner (const Phantom& phm, const char* const geometryName,
   if (m_idGeometry == GEOMETRY_PARALLEL) {
     m_dFanBeamAngle = 0;
     m_detLen   = m_dScanDiameter;
+    m_detStart = -m_detLen / 2;
     m_detInc  = m_detLen / m_nDet;
     double dDetectorArrayEndOffset = 0;
     // For even number of detectors, make detInc slightly larger so that center lies
@@ -144,6 +145,7 @@ Scanner::Scanner (const Phantom& phm, const char* const geometryName,
     m_initPos.xd2 = m_dXCenter + dHalfDetLen + dDetectorArrayEndOffset;
     m_initPos.yd2 = m_dYCenter - m_dCenterDetectorLength;
     m_initPos.angle = 0.0;
+    m_detLen += dDetectorArrayEndOffset;
   } else if (m_idGeometry == GEOMETRY_EQUILINEAR) {
   if (m_dScanDiameter / 2 >= m_dFocalLength) {
       m_fail = true;
@@ -155,11 +157,13 @@ Scanner::Scanner (const Phantom& phm, const char* const geometryName,
     const double dHalfDetLen = m_dSourceDetectorLength * tan (dAngle);
     
     m_detLen = dHalfDetLen * 2;
+    m_detStart = -dHalfDetLen;
     m_detInc  = m_detLen / m_nDet;
     double dDetectorArrayEndOffset = 0;
     if (m_nDet % 2 == 0) { // Adjust for Even number of detectors
       m_detInc = m_detLen / (m_nDet - 1); // center detector = (nDet/2)
       dDetectorArrayEndOffset = m_detInc;
+      m_detLen += dDetectorArrayEndOffset;
     }
   
     m_dFanBeamAngle = dAngle * 2;
@@ -182,6 +186,7 @@ Scanner::Scanner (const Phantom& phm, const char* const geometryName,
     const double dAngle = asin ((m_dScanDiameter / 2) / m_dFocalLength);
 
     m_detLen = 2 * dAngle;
+    m_detStart = -dAngle;
     m_detInc = m_detLen / m_nDet;
     double dDetectorArrayEndOffset = 0;
     if (m_nDet % 2 == 0) { // Adjust for Even number of detectors
@@ -202,6 +207,7 @@ Scanner::Scanner (const Phantom& phm, const char* const geometryName,
     m_initPos.ys1 = m_dYCenter + m_dFocalLength;;
     m_initPos.xs2 = m_dXCenter;
     m_initPos.ys2 = m_dYCenter + m_dFocalLength;
+    m_detLen += dDetectorArrayEndOffset;
   }
   
   // Calculate incrementatal rotation matrix