** This is part of the CTSim program
** Copyright (C) 1983-2000 Kevin Rosenberg
**
-** $Id: scanner.h,v 1.2 2000/06/19 15:48:23 kevin Exp $
+** $Id: scanner.h,v 1.5 2000/06/25 17:32:24 kevin Exp $
**
**
** This program is free software; you can redistribute it and/or modify
#ifndef SCANNER_H
#define SCANNER_H
-#include "projections.h"
+class Projections;
+
// Projections are collected along an array of ndet detectors. The data
// for these detectors is stored in the 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_EQUIANGLE
+ } GeometryID;
+
+ static const char GEOMETRY_PARALLEL_STR[] = "parallel";
+ static const char GEOMETRY_EQUILINEAR_STR[] = "equilinear";
+ static const char GEOMETRY_EQUIANGLE_STR[] = "equiangle";
+
+ 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;}
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 */
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, ...);
+
};