** This is part of the CTSim program
** Copyright (C) 1983-2000 Kevin Rosenberg
**
-** $Id: scanner.h,v 1.5 2000/06/25 17:32:24 kevin Exp $
+** $Id: scanner.h,v 1.11 2000/08/02 18:06:00 kevin Exp $
**
**
** This program is free software; you can redistribute it and/or modify
#ifndef SCANNER_H
#define SCANNER_H
-class Projections;
+#include "trace.h"
+class Projections;
+class Phantom;
+class PhantomElement;
+class SGP;
// Projections are collected along an array of ndet detectors. The data
// for these detectors is stored in the class DetectorArray
DetectorArray (const DetectorArray& rhs); // copy constructor
};
+
class Scanner
{
public:
- 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";
+ static const int Scanner::GEOMETRY_INVALID;
+ static const int Scanner::GEOMETRY_PARALLEL;
+ static const int Scanner::GEOMETRY_EQUILINEAR;
+ static const int Scanner::GEOMETRY_EQUIANGULAR;
+
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 collectProjections (Projections& proj, const Phantom& phm, const int start_view = 0, const int trace = TRACE_NONE, SGP* pSGP = NULL);
void setNView (int nView);
const double detInc(void) const {return m_detInc;}
const double radius(void) const {return m_radius;}
-
+ static const int getGeometryCount() {return s_iGeometryCount;}
+ static const char** getGeometryNameArray() {return s_aszGeometryName;}
+ static const char** getGeometryTitleArray() {return s_aszGeometryTitle;}
+ static int convertGeometryNameToID (const char* const geometryName);
+ static const char* convertGeometryIDToName (const int idGeometry);
+ static const char* convertGeometryIDToTitle (const int idGeometry);
+
private:
bool m_fail;
string m_failMessage;
- GeometryID m_idGeometry;
+ int 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 angle; /* Starting angle */
} m_initPos;
- static const int N_EXTRA_DETECTORS=4; /* Number of extra detectors widths when calculating detlen */
+ static const char* s_aszGeometryName[];
+ static const char* s_aszGeometryTitle[];
+ static const int s_iGeometryCount;
+ static const int N_EXTRA_DETECTORS=0; // Number of extra detectors widths when calculating detlen
- 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);
+ 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, SGP* pSGP);
- double projectSingleLine (const Phantom& phm, const double x1, const double y1, const double x2, const double y2);
+ double projectSingleLine (const Phantom& phm, const double x1, const double y1, const double x2, const double y2, SGP* pSGP);
- double projectLineAgainstPElem (const PhantomElement& pelem, 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, SGP* pSGP);
void traceShowParam (const char *label, const char *fmt, int row, int color, ...);