LCOV - code coverage report
Current view: top level - elsa/projectors - LutProjector.cpp (source / functions) Hit Total Coverage
Test: coverage-all.lcov Lines: 8 55 14.5 %
Date: 2022-08-25 03:05:39 Functions: 4 20 20.0 %

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

Generated by: LCOV version 1.14