X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=include%2Fscanner.h;h=000aba1860117dc913d71f23364deb39f23f0b58;hb=27a474e0622ebb7229fd5705552021f63d8f932d;hp=8c5ab45a99dcea5614707eea9d5cfbee011e7675;hpb=f4a23943110823118f35756dd41fbd6707f04511;p=ctsim.git diff --git a/include/scanner.h b/include/scanner.h index 8c5ab45..000aba1 100644 --- a/include/scanner.h +++ b/include/scanner.h @@ -9,7 +9,7 @@ ** This is part of the CTSim program ** Copyright (C) 1983-2000 Kevin Rosenberg ** -** $Id: scanner.h,v 1.1 2000/06/17 20:12:14 kevin Exp $ +** $Id: scanner.h,v 1.7 2000/07/20 11:17:31 kevin Exp $ ** ** ** This program is free software; you can redistribute it and/or modify @@ -29,7 +29,9 @@ #ifndef SCANNER_H #define SCANNER_H -#include "projections.h" +class Projections; +class Phantom; +class PhantomElement; // Projections are collected along an array of ndet detectors. The data // for these detectors is stored in the class DetectorArray @@ -51,26 +53,41 @@ class DetectorArray { m_viewAngle = viewAngle; } private: - DetectorValue* m_detValues; /* Pointer to array of values recorded by detector */ - int m_nDet; /* Number of detectors in array */ - double m_viewAngle; /* View angle in radians */ -}; + DetectorValue* m_detValues; // Pointer to array of values recorded by detector + int m_nDet; // Number of detectors in array */ + double m_viewAngle; // View angle in radians -typedef enum { - DETECTOR_PARALLEL, - DETECTOR_EQUIANGLE, - DETECTOR_EQUILINEAR -} ScannerGeometry; - + DetectorArray& operator=(const DetectorArray& rhs); // assignment + DetectorArray (const DetectorArray& rhs); // copy constructor +}; class Scanner { public: - Scanner (const Phantom& phm, const ScannerGeometry geometry, int nDet, int nView, int nSample, const double rot_anglen); + typedef enum { + GEOMETRY_INVALID, + GEOMETRY_PARALLEL, + GEOMETRY_EQUILINEAR, + GEOMETRY_EQUIANGULAR, + } GeometryID; + + static const char GEOMETRY_PARALLEL_STR[]; + static const char GEOMETRY_EQUILINEAR_STR[]; + static const char GEOMETRY_EQUIANGULAR_STR[]; + + static const char GEOMETRY_PARALLEL_TITLE_STR[]; + static const char GEOMETRY_EQUILINEAR_TITLE_STR[]; + static const char GEOMETRY_EQUIANGULAR_TITLE_STR[]; + + Scanner (const Phantom& phm, const char* const geometryName, int nDet, int nView, int nSample, const double rot_anglen); ~Scanner(); void collectProjections (Projections& proj, const Phantom& phm, const int start_view, const int trace); + void setNView (int nView); + + const bool fail(void) const {return m_fail;} + const string& failMessage(void) const {return m_failMessage;} const unsigned int nDet(void) const {return m_nDet;} const unsigned int nView(void) const {return m_nView;} const double phmLen(void) const {return m_phmLen;} @@ -80,27 +97,19 @@ class Scanner private: - void projectSingleView (const Phantom& phm, DetectorArray& darray, const double xd1, const double yd1, const double xd2, const double yd2, const double xs1, const double ys1, const double xs2, const double ys2); - - double projectSingleLine (const Phantom& phm, const double x1, const double y1, const double x2, const double y2); - - double projectLineAgainstPElem (const PhantomElement& pelem, const double x1, const double y1, const double x2, const double y2); - - void traceShowParam (const char *label, const char *fmt, int row, int color, ...); - - - ScannerGeometry m_geometry; /* Geometry of detectory */ - unsigned int m_nDet; /* Number of detectors in array */ - unsigned int m_nView; /* Number of rotated views */ - unsigned int m_nSample; /* Number of rays per detector */ + bool m_fail; + string m_failMessage; + GeometryID m_idGeometry; + unsigned int m_nDet; /* Number of detectors in array */ + unsigned int m_nView; /* Number of rotated views */ + unsigned int m_nSample; /* Number of rays per detector */ double m_detLen; /* Total length of detector array */ double m_rotLen; /* Rotation angle length in radians (norm 2PI) */ double m_detInc; /* Increment between centers of detectors */ double m_rotInc; /* Increment in rotation angle between views */ - double m_radius; /* Radius of rotation. Distance from */ - /* center of phm to center of det */ - double m_phmLen; /* Maximum Length of phantom or area of interest */ - + double m_radius; /* Radius of rotation. Distance from center of phm to center of det */ + double m_phmLen; /* Maximum Length of phantom or area of interest */ + int m_trace; struct { double xd1,yd1,xd2,yd2; /* Coordinates of detector endpoints */ double xs1,ys1,xs2,ys2; /* Coordinates of source endpoints */ @@ -109,8 +118,31 @@ class Scanner static const int N_EXTRA_DETECTORS=4; /* Number of extra detectors widths when calculating detlen */ - int m_trace; + static GeometryID convertGeometryNameToID (const char* const geometryName); + + void projectSingleView (const Phantom& phm, DetectorArray& darray, const double xd1, const double yd1, const double xd2, const double yd2, const double xs1, const double ys1, const double xs2, const double ys2); + + double projectSingleLine (const Phantom& phm, const double x1, const double y1, const double x2, const double y2); + + double projectLineAgainstPElem (const PhantomElement& pelem, const double x1, const double y1, const double x2, const double y2); + + void traceShowParam (const char *label, const char *fmt, int row, int color, ...); + }; +const static int RAYSUM_TRACE_ROW_TITLE=1; +const static int RAYSUM_TRACE_ROW_TITLE2=2; +const static int RAYSUM_TRACE_ROW_PHANT_ID=4; +const static int RAYSUM_TRACE_ROW_CHROMATIC=7; +const static int RAYSUM_TRACE_ROW_SCATTER=8; +const static int RAYSUM_TRACE_ROW_PHOT_STAT=9; +const static int RAYSUM_TRACE_ROW_NDET=12; +const static int RAYSUM_TRACE_ROW_NVIEW=13; +const static int RAYSUM_TRACE_ROW_SAMPLES=14; +const static int RAYSUM_TRACE_ROW_CURR_VIEW=17; +const static int RAYSUM_TRACE_ROW_ATTEN=18; + + + #endif