+ if (m_idGeometry == GEOMETRY_PARALLEL) {
+ m_detLen = m_dFieldOfView;
+ m_detInc = m_detLen / m_nDet;
+ if (m_nDet % 2 == 0) // Adjust for Even number of detectors
+ m_detInc = m_detLen / (m_nDet - 1); // center detector = (nDet/2)-1
+
+ double dHalfDetLen = m_detLen / 2;
+ m_initPos.xs1 = m_dXCenter - dHalfDetLen;
+ m_initPos.ys1 = m_dYCenter + m_dFocalLength;
+ m_initPos.xs2 = m_dXCenter + dHalfDetLen;
+ m_initPos.ys2 = m_dYCenter + m_dFocalLength;
+ m_initPos.xd1 = m_dXCenter - dHalfDetLen;
+ m_initPos.yd1 = m_dYCenter - m_dFocalLength;
+ m_initPos.xd2 = m_dXCenter + dHalfDetLen;
+ m_initPos.yd2 = m_dYCenter - m_dFocalLength;
+ m_initPos.angle = 0.0;
+ } else if (m_idGeometry == GEOMETRY_EQUILINEAR) {
+#if 0
+ double dAngle = (m_dFieldOfView / 2) / cos (asin (m_dFieldOfView / 2 / m_dFocalLength));
+#else
+ double dHalfSquare = m_dFieldOfView / SQRT2 / 2;
+ double dFocalPastPhm = m_dFocalLength - dHalfSquare;
+ if (dFocalPastPhm <= 0.) {
+ m_fail = true;
+ m_failMessage = "Focal Point inside of phantom";
+ return;
+ }
+ double dAngle = atan( dHalfSquare / dFocalPastPhm );
+#endif
+ double dHalfDetLen = 2 * m_dFocalLength * tan (dAngle);
+
+ m_detLen = dHalfDetLen * 2;
+ m_detInc = m_detLen / m_nDet;
+ if (m_nDet % 2 == 0) // Adjust for Even number of detectors
+ m_detInc = m_detLen / (m_nDet - 1); // center detector = (nDet/2)-1
+
+ m_initPos.angle = 0.0;
+ m_initPos.xs1 = m_dXCenter;
+ m_initPos.ys1 = m_dYCenter + m_dFocalLength;
+ m_initPos.xs2 = m_dXCenter;
+ m_initPos.ys2 = m_dYCenter + m_dFocalLength;
+ m_initPos.xd1 = m_dXCenter - dHalfDetLen;
+ m_initPos.yd1 = m_dYCenter - m_dFocalLength;
+ m_initPos.xd2 = m_dXCenter + dHalfDetLen;
+ m_initPos.yd2 = m_dYCenter - m_dFocalLength;
+ m_initPos.angle = 0.0;
+ } else if (m_idGeometry == GEOMETRY_EQUIANGULAR) {
+#if 0
+ double dAngle = atan ((m_dFieldOfView / 2) / m_dFocalLength);
+#else
+ double dHalfSquare = m_dFieldOfView / SQRT2 / 2;
+ double dFocalPastPhm = m_dFocalLength - dHalfSquare;
+ if (dFocalPastPhm <= 0.) {
+ m_fail = true;
+ m_failMessage = "Focal Point inside of phantom";
+ return;
+ }
+ double dAngle = atan ( dHalfSquare / dFocalPastPhm );
+#endif
+ m_detLen = 2 * dAngle;
+ m_detInc = m_detLen / m_nDet;
+ if (m_nDet % 2 == 0) // Adjust for Even number of detectors
+ m_detInc = m_detLen / (m_nDet - 1); // center detector = (nDet/2)-1
+ m_dAngularDetIncrement = m_detInc * 2; // Angular Position 2x gamma angle
+ m_dAngularDetLen = m_detLen * 2;
+ m_initPos.dAngularDet = -m_dAngularDetLen / 2;
+
+ m_initPos.angle = 0;
+ m_initPos.xs1 = m_dXCenter;
+ m_initPos.ys1 = m_dYCenter + m_dFocalLength;;
+ m_initPos.xs2 = m_dXCenter;
+ m_initPos.ys2 = m_dYCenter + m_dFocalLength;
+ }