** This is part of the CTSim program
** Copyright (c) 1983-2001 Kevin Rosenberg
**
-** $Id: projections.h,v 1.31 2001/03/11 12:37:34 kevin Exp $
+** $Id: projections.h,v 1.32 2001/03/13 04:44:25 kevin Exp $
**
**
** This program is free software; you can redistribute it and/or modify
double m_dTheta; // perpendicular angle to origin
double m_dRaysum;
- bool lessThanT (ParallelRaysumCoordinate& rCompare)
- {return m_dT < rCompare.m_dT; }
- bool lessThanTheta (ParallelRaysumCoordinate& rCompare)
- {return m_dTheta < rCompare.m_dTheta; }
-
static bool compareByTheta (ParallelRaysumCoordinate* a, ParallelRaysumCoordinate* b)
{ return a->m_dTheta == b->m_dTheta ? b->m_dT > a->m_dT : b->m_dTheta > a->m_dTheta; }
class ParallelRaysums {
public:
- ParallelRaysums (Projections* pProjections);
+
+ enum {
+ THETA_RANGE_UNCONSTRAINED = 0,
+ THETA_RANGE_NORMALIZE_TO_TWOPI,
+ THETA_RANGE_FOLD_TO_PI,
+ };
+
+ ParallelRaysums (Projections* pProjections, int iThetaRange);
~ParallelRaysums ();
typedef std::vector<ParallelRaysumCoordinate*> CoordinateContainer;
void getLimits (double* dMinT, double* dMaxT, double* dMinTheta, double* dMaxTheta) const;
CoordinateContainer& getSortedByT();
CoordinateContainer& getSortedByTheta();
- double interpolate (double* pdX, double* pdY, int n, double dXValue);
+ double interpolate (double* pdX, double* pdY, int n, double dXValue, int* iLastFloor = NULL);
void getThetaAndRaysumsForT (int iT, double* pdTheta, double* pdRaysum);
void getDetPositions (double* pdDetPos);
int m_iNumCoordinates;
int m_iNumView;
int m_iNumDet;
+ int m_iThetaRange;
};