19 #ifndef rtkThreeDCircularProjectionGeometry_h 20 #define rtkThreeDCircularProjectionGeometry_h 22 #include "RTKExport.h" 77 AddProjection(
const double sid,
79 const double gantryAngle,
80 const double projOffsetX = 0.,
81 const double projOffsetY = 0.,
82 const double outOfPlaneAngle = 0.,
83 const double inPlaneAngle = 0.,
84 const double sourceOffsetX = 0.,
85 const double sourceOffsetY = 0.);
89 AddProjectionInRadians(
const double sid,
91 const double gantryAngle,
92 const double projOffsetX = 0.,
93 const double projOffsetY = 0.,
94 const double outOfPlaneAngle = 0.,
95 const double inPlaneAngle = 0.,
96 const double sourceOffsetX = 0.,
97 const double sourceOffsetY = 0.);
110 AddProjection(
const PointType & sourcePosition,
155 const std::vector<double> &
158 return this->m_GantryAngles;
160 const std::vector<double> &
163 return this->m_OutOfPlaneAngles;
165 const std::vector<double> &
168 return this->m_InPlaneAngles;
170 const std::vector<double> &
173 return this->m_SourceToIsocenterDistances;
175 const std::vector<double> &
178 return this->m_SourceOffsetsX;
180 const std::vector<double> &
183 return this->m_SourceOffsetsY;
185 const std::vector<double> &
188 return this->m_SourceToDetectorDistances;
190 const std::vector<double> &
193 return this->m_ProjectionOffsetsX;
195 const std::vector<double> &
198 return this->m_ProjectionOffsetsY;
205 const std::vector<double> &
208 return this->m_SourceAngles;
213 const std::vector<double>
214 GetTiltAngles()
const;
218 const std::multimap<double, unsigned int>
219 GetSortedAngles(
const std::vector<double> & angles)
const;
223 const std::map<double, unsigned int>
224 GetUniqueSortedAngles(
const std::vector<double> & angles)
const;
227 const std::vector<double>
228 GetAngularGapsWithNext(
const std::vector<double> & angles)
const;
232 const std::vector<double>
233 GetAngularGaps(
const std::vector<double> & angles);
237 static ThreeDHomogeneousMatrixType
238 ComputeRotationHomogeneousMatrix(
double angleX,
double angleY,
double angleZ);
241 static TwoDHomogeneousMatrixType
242 ComputeTranslationHomogeneousMatrix(
double transX,
double transY);
243 static ThreeDHomogeneousMatrixType
244 ComputeTranslationHomogeneousMatrix(
double transX,
double transY,
double transZ);
249 static Superclass::MatrixType
250 ComputeProjectionMagnificationMatrix(
double sdd,
double sid);
254 const std::vector<TwoDHomogeneousMatrixType> &
257 return this->m_ProjectionTranslationMatrices;
259 TwoDHomogeneousMatrixType
262 return this->m_ProjectionTranslationMatrices[i];
266 const std::vector<ThreeDHomogeneousMatrixType> &
269 return this->m_RotationMatrices;
271 ThreeDHomogeneousMatrixType
274 return this->m_RotationMatrices[i];
277 const std::vector<ThreeDHomogeneousMatrixType> &
280 return this->m_SourceTranslationMatrices;
282 ThreeDHomogeneousMatrixType
285 return this->m_SourceTranslationMatrices[i];
288 const std::vector<Superclass::MatrixType> &
291 return this->m_MagnificationMatrices;
293 Superclass::MatrixType
296 return this->m_MagnificationMatrices[i];
300 const std::vector<double> &
303 return this->m_CollimationUInf;
305 const std::vector<double> &
308 return this->m_CollimationUSup;
310 const std::vector<double> &
313 return this->m_CollimationVInf;
315 const std::vector<double> &
318 return this->m_CollimationVSup;
325 SetCollimationOfLastProjection(
const double uinf,
const double usup,
const double vinf,
const double vsup);
329 const HomogeneousVectorType
330 GetSourcePosition(
const unsigned int i)
const;
337 const ThreeDHomogeneousMatrixType
338 GetProjectionCoordinatesToDetectorSystemMatrix(
const unsigned int i)
const;
345 const ThreeDHomogeneousMatrixType
346 GetProjectionCoordinatesToFixedSystemMatrix(
const unsigned int i)
const;
350 ConvertAngleBetween0And360Degrees(
const double a);
354 ConvertAngleBetween0And2PIRadians(
const double a);
358 ConvertAngleBetweenMinusAndPlusPIRadians(
const double a);
365 ToUntiltedCoordinateAtIsocenter(
const unsigned int noProj,
const double tiltedCoord)
const;
369 itkGetConstMacro(RadiusCylindricalDetector,
double);
374 itkGetConstMacro(VerifyAnglesTolerance,
double);
378 itkGetConstMacro(FixAnglesTolerance,
double);
388 this->m_ProjectionTranslationMatrices.push_back(m);
394 this->m_RotationMatrices.push_back(m);
400 this->m_SourceTranslationMatrices.push_back(m);
406 this->m_MagnificationMatrices.push_back(m);
427 VerifyAngles(
const double outOfPlaneAngleRAD,
428 const double gantryAngleRAD,
429 const double inPlaneAngleRAD,
430 const Matrix3x3Type & referenceMatrix)
const;
452 FixAngles(
double & outOfPlaneAngleRAD,
453 double & gantryAngleRAD,
454 double & inPlaneAngleRAD,
455 const Matrix3x3Type & referenceMatrix)
const;
460 InternalClone()
const override;
476 double m_RadiusCylindricalDetector{ 0. };
497 double m_VerifyAnglesTolerance{ 1e-4 };
498 double m_FixAnglesTolerance{ 1e-6 };
503 #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