Line data Source code
1 : #pragma once 2 : 3 : #include "DetectorDescriptor.h" 4 : 5 : namespace elsa 6 : { 7 : /** 8 : * @brief Class representing metadata for a (planar) XGI detector 9 : * 10 : * @author Matthias Wieczorek (wieczore@cs.tum.edu) - initial code 11 : * @author Shen Hu (shen.hu@tum.de) - Port to elsa 12 : */ 13 : class XGIDetectorDescriptor : public DetectorDescriptor 14 : { 15 : public: 16 : using DirVec = axdt::DirVec<real_t>; 17 : 18 : XGIDetectorDescriptor() = delete; 19 38714 : ~XGIDetectorDescriptor() override = default; 20 : 21 : XGIDetectorDescriptor(const IndexVector_t& numOfCoeffsPerDim, 22 : const RealVector_t& spacingPerDim, 23 : const std::vector<Geometry>& geometryList, const DirVec& sensDir, 24 : bool isParallelBeam = true); 25 : 26 : bool isParallelBeam() const; 27 : const DirVec& getSensDir() const; 28 : 29 : using DetectorDescriptor::computeRayFromDetectorCoord; 30 : 31 : RealRay_t computeRayFromDetectorCoord(const RealVector_t& detectorCoord, 32 : const index_t poseIndex) const override; 33 : 34 : std::unique_ptr<DetectorDescriptor> 35 : cloneWithGeometry(std::vector<Geometry> geometries) const override; 36 : 37 : protected: 38 : XGIDetectorDescriptor* cloneImpl() const override; 39 : bool isEqual(const DataDescriptor& other) const override; 40 : 41 : private: 42 : const DirVec 43 : _sensDir; ///< sensitivity direction (in-plane orthogonal vector to the grating bars) 44 : const bool _isParallelBeam; ///< indicating if the geometry is assumed to represent an 45 : ///< approximation to a parallel beam geometry 46 : }; 47 : } // namespace elsa