r591: Added Center-Detector length to scanning and reconstruction
[ctsim.git] / include / projections.h
index 4c93304f33040dbe5ffca502021f769b7e8d1179..c55b44c89f6c46ff8bf0470d8be875c47e5c5cc6 100644 (file)
@@ -7,9 +7,9 @@
 **   Date Started:  July 1, 1984
 **
 **  This is part of the CTSim program
-**  Copyright (C) 1983-2000 Kevin Rosenberg
+**  Copyright (c) 1983-2001 Kevin Rosenberg
 **
-**  $Id: projections.h,v 1.20 2001/01/04 21:28:41 kevin Exp $
+**  $Id: projections.h,v 1.26 2001/03/01 07:30:49 kevin Exp $
 **
 **
 **  This program is free software; you can redistribute it and/or modify
@@ -54,8 +54,8 @@ class Projections
   ~Projections ();
 
   static const int getInterpCount() {return s_iInterpCount;}
-  static const char** getInterpNameArray() {return s_aszInterpName;}
-  static const char** getInterpTitleArray() {return s_aszInterpTitle;}
+  static const char* const* getInterpNameArray() {return s_aszInterpName;}
+  static const char* const* getInterpTitleArray() {return s_aszInterpTitle;}
   static int convertInterpNameToID (const char* const interpName);
   static const char* convertInterpIDToName (const int interpID);
   static const char* convertInterpIDToTitle (const int interpID);
@@ -75,7 +75,7 @@ class Projections
 
   bool convertPolar (ImageFile& rIF, int iInterpolation);
   bool convertFFTPolar (ImageFile& rIF, int iInterpolation, int iZeropad);
-  void calcArrayPolarCoordinates (unsigned int nx, unsigned int ny, double** ppdView, double** ppdDet);
+  bool calcArrayPolarCoordinates (unsigned int nx, unsigned int ny, double** ppdView, double** ppdDet);
   void interpolatePolar (ImageFileArray& v, ImageFileArray& vImag, unsigned int nx, unsigned int ny, std::complex<double>** ppcDetValue,
     double** ppdDet, double** ppdView, unsigned int nView, unsigned int nDet, int iInterpolate);
 
@@ -84,7 +84,6 @@ class Projections
   void setNView (int nView);  // used in MPI to restrict # of views
   void setRotInc (double rotInc) { m_rotInc = rotInc;}
   void setDetInc (double detInc) { m_detInc = detInc;}
-  void setPhmLen (double phmLen) { m_phmLen = phmLen;}
   void setCalcTime (double calcTime) {m_calcTime = calcTime;}
   void setRemark (const char* remark) {m_remark = remark; m_label.setLabelString(remark);}
   void setRemark (const std::string& remark) {setRemark(remark.c_str());}
@@ -92,15 +91,18 @@ class Projections
   double detStart() const {return m_detStart;}
   double rotStart() const {return m_rotStart;}
   double calcTime() const {return m_calcTime;}
-  double phmLen() const {return m_phmLen;}
+  double viewLen() const {return m_dViewDiameter / SQRT2;}
   const char*  remark() const {return m_remark.c_str();}
   double detInc() const {return m_detInc;}
   double rotInc() const {return m_rotInc;}
   int nDet() const {return m_nDet;}
   int nView() const {return m_nView;}
   int geometry() const {return m_geometry;}
-  double focalLength() const {return m_focalLength;}
-  double fieldOfView() const {return m_fieldOfView;}
+  double focalLength() const {return m_dFocalLength;}
+  double sourceDetectorLength() const { return m_dSourceDetectorLength;}
+
+  double phmLen() const { return m_dViewDiameter / SQRT2; }
+  void setPhmLen(double phmLen) { m_dViewDiameter = phmLen * SQRT2; }
 
   const std::string& getFilename() const {return m_filename;}
   Array2dFileLabel& getLabel() {return m_label;}
@@ -130,9 +132,10 @@ class Projections
   double m_rotInc;             // angle between rotations 
   double m_detStart;           // distance of beginning detector to center phantom
   double m_detInc;             // increment between detectors 
-  double m_phmLen;             // Length of phantom edge (phm is square) 
-  double m_focalLength;
-  double m_fieldOfView;
+  double m_dFocalLength;
+  double m_dSourceDetectorLength;
+  double m_dViewDiameter;
+  double m_dFanBeamAngle;
   kuint32 m_year;                   // Creation date & time
   kuint32 m_month;
   kuint32 m_day;
@@ -144,8 +147,8 @@ class Projections
 
   const static kuint16 m_signature;
 
-  static const char* s_aszInterpName[];
-  static const char* s_aszInterpTitle[];
+  static const char* const s_aszInterpName[];
+  static const char* const s_aszInterpTitle[];
   static const int s_iInterpCount;
 
   bool headerWrite (fnetorderstream& fs);