X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;ds=sidebyside;f=include%2Fprojections.h;fp=include%2Fprojections.h;h=67cae86462ad282856fdf99733c1756f5425481f;hb=999a754d1519a49ca062ee87b22bf601c1ee9f21;hp=9e64f260d49fd9da53e39468223900565053e625;hpb=d850a3477e9ccaecfa85e00bc619848fcc29bdb6;p=ctsim.git diff --git a/include/projections.h b/include/projections.h index 9e64f26..67cae86 100644 --- a/include/projections.h +++ b/include/projections.h @@ -9,7 +9,7 @@ ** This is part of the CTSim program ** Copyright (c) 1983-2001 Kevin Rosenberg ** -** $Id: projections.h,v 1.29 2001/03/10 23:56:58 kevin Exp $ +** $Id: projections.h,v 1.30 2001/03/11 06:34:37 kevin Exp $ ** ** ** This program is free software; you can redistribute it and/or modify @@ -45,19 +45,19 @@ class ParallelRaysumCoordinate { public: double m_dT; // Distance from center of origin double m_dTheta; // perpendicular angle to origin - int m_iViewNum; // View number for this raysum - int m_iDetNum; // Detector number for this raysum + double m_dRaysum; bool lessThanT (ParallelRaysumCoordinate& rCompare) {return m_dT < rCompare.m_dT; } bool lessThanTheta (ParallelRaysumCoordinate& rCompare) {return m_dTheta < rCompare.m_dTheta; } - static compareByTheta(ParallelRaysumCoordinate* a, ParallelRaysumCoordinate* b) - { return a->m_dTheta > b->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; } - static compareByT(ParallelRaysumCoordinate* a, ParallelRaysumCoordinate* b) - { return a->m_dT > b->m_dT; } + // sort first by T, then Theta + static bool compareByT (ParallelRaysumCoordinate* a, ParallelRaysumCoordinate* b) + { return a->m_dT == b->m_dT ? b->m_dTheta > a->m_dTheta : b->m_dT > a->m_dT; } }; @@ -74,12 +74,17 @@ public: 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); + void getThetaAndRaysumsForT (int iT, double* pdTheta, double* pdRaysum); + void getDetPositions (double* pdDetPos); private: CoordinateContainer m_vecpCoordinates; CoordinateContainer m_vecpSortedByT; CoordinateContainer m_vecpSortedByTheta; int m_iNumCoordinates; + int m_iNumView; + int m_iNumDet; }; @@ -120,7 +125,7 @@ class Projections bool detarrayRead (fnetorderstream& fs, DetectorArray& darray, const int view_num); bool detarrayWrite (fnetorderstream& fs, const DetectorArray& darray, const int view_num); - bool interpolateToParallel(); + Projections* interpolateToParallel(); bool convertPolar (ImageFile& rIF, int iInterpolation); bool convertFFTPolar (ImageFile& rIF, int iInterpolation, int iZeropad);