r486: no message
[ctsim.git] / libctsim / scanner.cpp
index 120ddb515dc44080148cb054984befe2d0f543e0..6e2e57ad48bf962af80a9219c9638947f21bc713 100644 (file)
@@ -9,7 +9,7 @@
 **  This is part of the CTSim program
 **  Copyright (c) 1983-2001 Kevin Rosenberg
 **
-**  $Id: scanner.cpp,v 1.28 2001/02/02 00:46:38 kevin Exp $
+**  $Id: scanner.cpp,v 1.29 2001/02/04 21:28:19 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
@@ -132,7 +132,7 @@ Scanner::Scanner (const Phantom& phm, const char* const geometryName, int nDet,
     m_initPos.yd2 = m_dYCenter - m_dFocalLength;
     m_initPos.angle = 0.0;
   } else if (m_idGeometry == GEOMETRY_EQUILINEAR) {
-
+#if 0
     double dAngle1 = atan ((m_dFieldOfView / 2) / m_dFocalLength);
     double dHalfSquare = m_dFieldOfView / SQRT2 / 2;
     double dFocalPastPhm = m_dFocalLength - dHalfSquare;
@@ -143,8 +143,14 @@ Scanner::Scanner (const Phantom& phm, const char* const geometryName, int nDet,
     }
     double dAngle2 = atan( dHalfSquare / dFocalPastPhm );
     double dAngle = maxValue<double> (dAngle1, dAngle2);
-#if 0
-    double dAngle = (m_dFieldOfView / 2) / cos (asin (m_dFieldOfView / 2 / m_dFocalLength));
+    //double dAngle = (m_dFieldOfView / 2) / cos (asin (m_dFieldOfView / 2 / m_dFocalLength));
+#else
+    if (m_dFieldOfView/2 >= m_dFocalLength) {
+      m_fail = true;
+      m_failMessage = "Invalid geometry: Focal length must be larger than field of view";
+      return;
+    }
+    double dAngle = asin ((m_dFieldOfView/2) / m_dFocalLength);
 #endif    
 
     double dHalfDetLen = 2 * m_dFocalLength * tan (dAngle);
@@ -165,17 +171,12 @@ Scanner::Scanner (const Phantom& phm, const char* const geometryName, int nDet,
     m_initPos.yd2 = m_dYCenter - m_dFocalLength;
     m_initPos.angle = 0.0;
   } else if (m_idGeometry == GEOMETRY_EQUIANGULAR) {
-    double dAngle1 = atan ((m_dFieldOfView / 2) / m_dFocalLength);
-
-    double dHalfSquare = m_dFieldOfView / SQRT2 / 2;
-    double dFocalPastPhm = m_dFocalLength - dHalfSquare;
-    if (dFocalPastPhm <= 0.) {
+    if (m_dFieldOfView/2 > m_dFocalLength) {
       m_fail = true;
-      m_failMessage = "Focal Point inside of phantom";
+      m_failMessage = "Invalid geometry: Focal length must be larger than field of view";
       return;
     }
-    double dAngle2 =  atan ( dHalfSquare / dFocalPastPhm ); 
-    double dAngle = maxValue<double> (dAngle1, dAngle2);
+    double dAngle = asin ((m_dFieldOfView/2) / m_dFocalLength);
 
     m_detLen = 2 * dAngle;
     m_detInc = m_detLen / m_nDet;