19 #ifndef rtkThreeDCircularProjectionGeometry_h 20 #define rtkThreeDCircularProjectionGeometry_h 22 #include "RTKExport.h" 53 #if ITK_VERSION_MAJOR == 5 && ITK_VERSION_MINOR == 1 80 AddProjection(
const double sid,
82 const double gantryAngle,
83 const double projOffsetX = 0.,
84 const double projOffsetY = 0.,
85 const double outOfPlaneAngle = 0.,
86 const double inPlaneAngle = 0.,
87 const double sourceOffsetX = 0.,
88 const double sourceOffsetY = 0.);
92 AddProjectionInRadians(
const double sid,
94 const double gantryAngle,
95 const double projOffsetX = 0.,
96 const double projOffsetY = 0.,
97 const double outOfPlaneAngle = 0.,
98 const double inPlaneAngle = 0.,
99 const double sourceOffsetX = 0.,
100 const double sourceOffsetY = 0.);
113 AddProjection(
const PointType & sourcePosition,
132 const std::vector<double> &
135 return this->m_GantryAngles;
137 const std::vector<double> &
140 return this->m_OutOfPlaneAngles;
142 const std::vector<double> &
145 return this->m_InPlaneAngles;
147 const std::vector<double> &
150 return this->m_SourceToIsocenterDistances;
152 const std::vector<double> &
155 return this->m_SourceOffsetsX;
157 const std::vector<double> &
160 return this->m_SourceOffsetsY;
162 const std::vector<double> &
165 return this->m_SourceToDetectorDistances;
167 const std::vector<double> &
170 return this->m_ProjectionOffsetsX;
172 const std::vector<double> &
175 return this->m_ProjectionOffsetsY;
182 const std::vector<double> &
185 return this->m_SourceAngles;
190 const std::vector<double>
191 GetTiltAngles()
const;
195 const std::multimap<double, unsigned int>
196 GetSortedAngles(
const std::vector<double> & angles)
const;
200 const std::map<double, unsigned int>
201 GetUniqueSortedAngles(
const std::vector<double> & angles)
const;
204 const std::vector<double>
205 GetAngularGapsWithNext(
const std::vector<double> & angles)
const;
209 const std::vector<double>
210 GetAngularGaps(
const std::vector<double> & angles);
214 static ThreeDHomogeneousMatrixType
215 ComputeRotationHomogeneousMatrix(
double angleX,
double angleY,
double angleZ);
218 static TwoDHomogeneousMatrixType
219 ComputeTranslationHomogeneousMatrix(
double transX,
double transY);
220 static ThreeDHomogeneousMatrixType
221 ComputeTranslationHomogeneousMatrix(
double transX,
double transY,
double transZ);
226 static Superclass::MatrixType
227 ComputeProjectionMagnificationMatrix(
double sdd,
double sid);
231 const std::vector<TwoDHomogeneousMatrixType> &
234 return this->m_ProjectionTranslationMatrices;
236 TwoDHomogeneousMatrixType
239 return this->m_ProjectionTranslationMatrices[i];
243 const std::vector<ThreeDHomogeneousMatrixType> &
246 return this->m_RotationMatrices;
248 ThreeDHomogeneousMatrixType
251 return this->m_RotationMatrices[i];
254 const std::vector<ThreeDHomogeneousMatrixType> &
257 return this->m_SourceTranslationMatrices;
259 ThreeDHomogeneousMatrixType
262 return this->m_SourceTranslationMatrices[i];
265 const std::vector<Superclass::MatrixType> &
268 return this->m_MagnificationMatrices;
270 Superclass::MatrixType
273 return this->m_MagnificationMatrices[i];
278 const std::vector<double> &
281 return this->m_CollimationUInf;
283 const std::vector<double> &
286 return this->m_CollimationUSup;
288 const std::vector<double> &
291 return this->m_CollimationVInf;
293 const std::vector<double> &
296 return this->m_CollimationVSup;
303 SetCollimationOfLastProjection(
const double uinf,
const double usup,
const double vinf,
const double vsup);
307 const HomogeneousVectorType
308 GetSourcePosition(
const unsigned int i)
const;
315 const ThreeDHomogeneousMatrixType
316 GetProjectionCoordinatesToDetectorSystemMatrix(
const unsigned int i)
const;
323 const ThreeDHomogeneousMatrixType
324 GetProjectionCoordinatesToFixedSystemMatrix(
const unsigned int i)
const;
328 ConvertAngleBetween0And360Degrees(
const double a);
332 ConvertAngleBetween0And2PIRadians(
const double a);
336 ConvertAngleBetweenMinusAndPlusPIRadians(
const double a);
343 ToUntiltedCoordinateAtIsocenter(
const unsigned int noProj,
const double tiltedCoord)
const;
347 itkGetConstMacro(RadiusCylindricalDetector,
double);
358 this->m_ProjectionTranslationMatrices.push_back(m);
364 this->m_RotationMatrices.push_back(m);
370 this->m_SourceTranslationMatrices.push_back(m);
376 this->m_MagnificationMatrices.push_back(m);
397 VerifyAngles(
const double outOfPlaneAngleRAD,
398 const double gantryAngleRAD,
399 const double inPlaneAngleRAD,
400 const Matrix3x3Type & referenceMatrix)
const;
422 FixAngles(
double & outOfPlaneAngleRAD,
423 double & gantryAngleRAD,
424 double & inPlaneAngleRAD,
425 const Matrix3x3Type & referenceMatrix)
const;
430 InternalClone()
const override;
446 double m_RadiusCylindricalDetector{ 0. };
469 #endif // __rtkThreeDCircularProjectionGeometry_h
std::vector< ThreeDHomogeneousMatrixType > m_SourceTranslationMatrices
const std::vector< double > & GetSourceAngles() const
virtual void AddProjectionTranslationMatrix(const TwoDHomogeneousMatrixType &m)
const std::vector< double > & GetSourceOffsetsY() const
std::vector< double > m_CollimationUInf
ThreeDHomogeneousMatrixType GetRotationMatrix(const unsigned int i) const
Superclass::MatrixType GetMagnificationMatrices(const unsigned int i) const
const std::vector< ThreeDHomogeneousMatrixType > & GetSourceTranslationMatrices() const
const std::vector< double > & GetInPlaneAngles() const
std::vector< ThreeDHomogeneousMatrixType > m_RotationMatrices
virtual void AddMagnificationMatrix(const Superclass::MatrixType &m)
Projection geometry for a source and a 2-D flat panel.
std::vector< double > m_ProjectionOffsetsY
const std::vector< double > & GetGantryAngles() const
#define itkSetMacro(name, type)
virtual void AddRotationMatrix(const ThreeDHomogeneousMatrixType &m)
const std::vector< ThreeDHomogeneousMatrixType > & GetRotationMatrices() const
const std::vector< TwoDHomogeneousMatrixType > & GetProjectionTranslationMatrices() const
A templated class holding a vector of M x (M+1) matrices.
std::vector< double > m_SourceToDetectorDistances
const std::vector< double > & GetSourceToIsocenterDistances() const
const std::vector< double > & GetProjectionOffsetsY() const
TwoDHomogeneousMatrixType GetProjectionTranslationMatrix(const unsigned int i) const
std::vector< double > m_CollimationVSup
const std::vector< double > & GetProjectionOffsetsX() const
std::vector< double > m_CollimationVInf
virtual void AddSourceTranslationMatrix(const ThreeDHomogeneousMatrixType &m)
std::vector< double > m_SourceOffsetsY
ThreeDHomogeneousMatrixType GetSourceTranslationMatrices(const unsigned int i) const
std::vector< double > m_SourceAngles
std::vector< double > m_CollimationUSup
std::vector< TwoDHomogeneousMatrixType > m_ProjectionTranslationMatrices
const std::vector< Superclass::MatrixType > & GetMagnificationMatrices() const
std::vector< double > m_SourceToIsocenterDistances
const std::vector< double > & GetSourceOffsetsX() const
const std::vector< double > & GetCollimationUInf() const
const std::vector< double > & GetSourceToDetectorDistances() const
const std::vector< double > & GetOutOfPlaneAngles() const
const std::vector< double > & GetCollimationVInf() const
std::vector< double > m_SourceOffsetsX
const std::vector< double > & GetCollimationVSup() const
const std::vector< double > & GetCollimationUSup() const
std::vector< double > m_OutOfPlaneAngles
std::vector< double > m_InPlaneAngles
std::vector< Superclass::MatrixType > m_MagnificationMatrices
std::vector< double > m_GantryAngles
std::vector< double > m_ProjectionOffsetsX
Superclass::MatrixType HomogeneousProjectionMatrixType