LCOV - code coverage report
Current view: top level - elsa/projectors - LutProjector.cpp (source / functions) Hit Total Coverage
Test: coverage-all.lcov Lines: 6 51 11.8 %
Date: 2024-05-16 04:22:26 Functions: 2 16 12.5 %

          Line data    Source code
       1             : #include "LutProjector.h"
       2             : #include "Timer.h"
       3             : #include "SliceTraversal.h"
       4             : #include "Assertions.h"
       5             : 
       6             : namespace elsa
       7             : {
       8             :     template <typename data_t>
       9             :     BlobProjector<data_t>::BlobProjector(const VolumeDescriptor& domainDescriptor,
      10             :                                          const DetectorDescriptor& rangeDescriptor, data_t radius,
      11             :                                          data_t alpha, index_t order)
      12             :         : LutProjector<data_t, BlobProjector<data_t>>(domainDescriptor, rangeDescriptor),
      13             :           blob_(radius, alpha, order)
      14         871 :     {
      15             :         // sanity checks
      16         871 :         auto dim = domainDescriptor.getNumberOfDimensions();
      17         871 :         if (dim < 2 || dim > 3) {
      18           0 :             throw InvalidArgumentError("BlobProjector: only supporting 2d/3d operations");
      19           0 :         }
      20             : 
      21         871 :         if (dim != rangeDescriptor.getNumberOfDimensions()) {
      22           0 :             throw InvalidArgumentError("BlobProjector: domain and range dimension need to match");
      23           0 :         }
      24             : 
      25         871 :         if (rangeDescriptor.getNumberOfGeometryPoses() == 0) {
      26           0 :             throw InvalidArgumentError("BlobProjector: rangeDescriptor without any geometry");
      27           0 :         }
      28         871 :     }
      29             : 
      30             :     template <typename data_t>
      31             :     BlobProjector<data_t>* BlobProjector<data_t>::_cloneImpl() const
      32           0 :     {
      33           0 :         return new BlobProjector(downcast<VolumeDescriptor>(*this->_domainDescriptor),
      34           0 :                                  downcast<DetectorDescriptor>(*this->_rangeDescriptor));
      35           0 :     }
      36             : 
      37             :     template <typename data_t>
      38             :     bool BlobProjector<data_t>::_isEqual(const LinearOperator<data_t>& other) const
      39           0 :     {
      40           0 :         if (!Base::isEqual(other))
      41           0 :             return false;
      42             : 
      43           0 :         auto otherOp = downcast_safe<BlobProjector>(&other);
      44           0 :         return static_cast<bool>(otherOp);
      45           0 :     }
      46             : 
      47             :     template <typename data_t>
      48             :     BSplineProjector<data_t>::BSplineProjector(const VolumeDescriptor& domainDescriptor,
      49             :                                                const DetectorDescriptor& rangeDescriptor,
      50             :                                                index_t order)
      51             :         : LutProjector<data_t, BSplineProjector<data_t>>(domainDescriptor, rangeDescriptor),
      52             :           bspline_(domainDescriptor.getNumberOfDimensions(), order)
      53           0 :     {
      54             :         // sanity checks
      55           0 :         auto dim = domainDescriptor.getNumberOfDimensions();
      56           0 :         if (dim < 2 || dim > 3) {
      57           0 :             throw InvalidArgumentError("BSplineProjector: only supporting 2d/3d operations");
      58           0 :         }
      59             : 
      60           0 :         if (dim != rangeDescriptor.getNumberOfDimensions()) {
      61           0 :             throw InvalidArgumentError(
      62           0 :                 "BSplineProjector: domain and range dimension need to match");
      63           0 :         }
      64             : 
      65           0 :         if (rangeDescriptor.getNumberOfGeometryPoses() == 0) {
      66           0 :             throw InvalidArgumentError("BSplineProjector: rangeDescriptor without any geometry");
      67           0 :         }
      68           0 :     }
      69             : 
      70             :     template <typename data_t>
      71             :     data_t BSplineProjector<data_t>::weight(data_t distance) const
      72           0 :     {
      73           0 :         return bspline_.get_lut()(distance);
      74           0 :     }
      75             : 
      76             :     template <typename data_t>
      77             :     index_t BSplineProjector<data_t>::support() const
      78           0 :     {
      79           0 :         return static_cast<index_t>(2);
      80           0 :     }
      81             : 
      82             :     template <typename data_t>
      83             :     BSplineProjector<data_t>* BSplineProjector<data_t>::_cloneImpl() const
      84           0 :     {
      85           0 :         return new BSplineProjector(downcast<VolumeDescriptor>(*this->_domainDescriptor),
      86           0 :                                     downcast<DetectorDescriptor>(*this->_rangeDescriptor));
      87           0 :     }
      88             : 
      89             :     template <typename data_t>
      90             :     bool BSplineProjector<data_t>::_isEqual(const LinearOperator<data_t>& other) const
      91           0 :     {
      92           0 :         if (!Base::isEqual(other))
      93           0 :             return false;
      94             : 
      95           0 :         auto otherOp = downcast_safe<BSplineProjector>(&other);
      96           0 :         return static_cast<bool>(otherOp);
      97           0 :     }
      98             : 
      99             :     // ------------------------------------------
     100             :     // explicit template instantiation
     101             :     template class BlobProjector<float>;
     102             :     template class BlobProjector<double>;
     103             : 
     104             :     template class BSplineProjector<float>;
     105             :     template class BSplineProjector<double>;
     106             : } // namespace elsa

Generated by: LCOV version 1.14