r327: Added textfile output
[ctsim.git] / include / phantom.h
index ae6a2350d845ded0409afc111ae36ab8f6009fc4..7d9b43392837c47e7b3cdd22a803095eaa346b78 100644 (file)
@@ -9,7 +9,7 @@
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2000 Kevin Rosenberg
 **
-**  $Id: phantom.h,v 1.11 2000/07/28 08:28:08 kevin Exp $
+**  $Id: phantom.h,v 1.18 2001/01/02 05:33: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
 #ifndef PHANTOM_H
 #define PHANTOM_H
 
-#include <slist>
+#include <list>
 #include "ctsupport.h"
 
-using namespace std;
-
 typedef enum {
     PELEM_INVALID,
     PELEM_RECTANGLE,
@@ -66,8 +64,10 @@ class PhantomElement
 
     const int nOutlinePoints() const {return m_nPoints;}
     double* rectLimits() {return m_rectLimits;}
-    double* xOutline() {return m_xOutline;}
-    double* yOutline() {return m_yOutline;}
+    double* xOutline() {return m_xOutline;}\r
+    double* yOutline() {return m_yOutline;}\r
+    double* const xOutline() const {return m_xOutline;}\r
+    double* const yOutline() const {return m_yOutline;}\r
     const double atten() const {return m_atten;}
     const double diameter() const {return m_diameter;}
     const double xmin() const {return m_xmin;}
@@ -78,7 +78,9 @@ class PhantomElement
     const double cx() const {return m_cx;}
     const double cy() const {return m_cy;}
     const double u() const {return m_u;}
-    const double v() const {return m_v;}
+    const double v() const {return m_v;}\r
+\r
+    void printDefinition (std::ostream& os) const;
 
  private:
     PhmElemType m_type;             // pelem type (box, ellipse, etc)
@@ -96,10 +98,11 @@ class PhantomElement
     double* m_yOutline;
     double  m_rectLimits[4];
 
-    static const int POINTS_PER_CIRCLE = 360;
-    static const double SCALE_PELEM_EXTENT=0.005;  // increase pelem limits by 0.5% 
+    static const int POINTS_PER_CIRCLE;
+    static const double SCALE_PELEM_EXTENT;  // increase pelem limits by 0.5% 
 
-    static PhmElemType PhantomElement::convertNameToType (const char* const typeName);
+    static PhmElemType convertNameToType (const char* const typeName);
+    static const char* const convertTypeToName (PhmElemType iType);\r
 
     void makeTransformMatrices ();
 
@@ -134,9 +137,9 @@ class Phantom
  public:
     static const int PHM_INVALID;
     static const int PHM_HERMAN;
-    static const int PHM_BHERMAN;
-    static const int PHM_ROWLAND;
-    static const int PHM_BROWLAND;
+    static const int PHM_B_HERMAN;
+    static const int PHM_SHEPP_LOGAN;
+    static const int PHM_B_SHEPP_LOGAN;
     static const int PHM_UNITPULSE;
 
     Phantom ();
@@ -155,31 +158,36 @@ class Phantom
     bool createFromPhantom (const int phmid);
 
     bool createFromFile (const char* const fname);
+\r
+    bool fileWrite (const char* const fname);\r
 
     void addPElem (const PhantomElement& pelem);
 
     void addPElem (const char* const composition, const double cx, const double cy, const double u, const double v, const double rot, const double atten);
 
-    void convertToImagefile (ImageFile& im, const int in_nsample, const int trace, const int colStart, const int colCount) const;
+    void convertToImagefile (ImageFile& im, const int in_nsample, const int trace, const int colStart, const int colCount, bool bStoreAtColumnPos) const;
 
     void convertToImagefile (ImageFile& im, const int in_nsample, const int trace) const;
+\r
+    void printDefinitions (std::ostream& os) const;\r
 
     bool fail() const             {return m_fail;}
-    const string& failMessage() const {return m_failMessage;}
-    const string& name() const     {return m_name;}
+    const std::string& failMessage() const {return m_failMessage;}
+    const std::string& name() const     {return m_name;}
     const int id() const     {return m_id;}
 
 #if HAVE_SGP
     void show () const;
+    void show (SGP& sgp) const;
     void draw (SGP& sgp) const;
 #endif
     
     void addStdHerman ();
     void addStdHermanBordered ();
-    void addStdRowland ();
-    void addStdRowlandBordered ();
+    void addStdSheppLogan ();
+    void addStdSheppLoganBordered ();
 
-    void print () const;
+    void print (std::ostream& os) const;
 
     const double maxAxisLength () const {return (((m_xmax - m_xmin) > (m_ymax - m_ymin)) ? (m_xmax - m_xmin) : (m_ymax - m_ymin));}
 
@@ -188,8 +196,8 @@ class Phantom
     const double xmax() const {return m_xmax;}
     const double ymin() const {return m_ymin;}
     const double ymax() const {return m_ymax;}
-    slist<PhantomElement*>& listPElem() {return m_listPElem;}
-    const slist<PhantomElement*>& listPElem() const {return m_listPElem;}
+         std::list<PhantomElement*>& listPElem() {return m_listPElem;}
+    const std::list<PhantomElement*>& listPElem() const {return m_listPElem;}
     const int nPElem() const {return m_nPElem;}
 
     static const int getPhantomCount() {return s_iPhantomCount;}
@@ -204,11 +212,11 @@ class Phantom
     int m_nPElem;                          // number of pelems in phantom 
     double m_xmin, m_xmax, m_ymin, m_ymax;  // extent of pelems in pelem coordinates
     double m_diameter;                        // diameter of object
-    mutable slist<PhantomElement*> m_listPElem;      // pelem lists
-    string m_name;
+    mutable std::list<PhantomElement*> m_listPElem;      // pelem lists
+    std::string m_name;
     int m_id;
     bool m_fail;
-    string m_failMessage;
+    std::string m_failMessage;
 
     static const char* s_aszPhantomName[];
     static const char* s_aszPhantomTitle[];
@@ -220,7 +228,7 @@ class Phantom
     Phantom& operator= (const Phantom&); // assignment operator
 };
 
-typedef slist<PhantomElement*>::iterator PElemIterator;
-typedef slist<PhantomElement*>::const_iterator PElemConstIterator;
+typedef std::list<PhantomElement*>::iterator PElemIterator;
+typedef std::list<PhantomElement*>::const_iterator PElemConstIterator;
 
 #endif