1 #ifndef CTL_PROJECTIONDATA_H 2 #define CTL_PROJECTIONDATA_H 22 template<
class DataType,
class NestedIteratorType>
29 typedef std::reverse_iterator<iterator> reverse_iterator;
30 typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
47 reverse_iterator rbegin();
48 reverse_iterator rend();
49 const_reverse_iterator rbegin()
const;
50 const_reverse_iterator rend()
const;
51 const_reverse_iterator crbegin()
const;
52 const_reverse_iterator crend()
const;
55 const std::vector<SingleViewData>&
constData()
const;
56 const std::vector<SingleViewData>&
data()
const;
57 std::vector<SingleViewData>&
data();
72 void fill(
float fillValue);
107 template <
class Function>
137 bool operator==(
const Dimensions& other)
const;
138 bool operator!=(
const Dimensions& other)
const;
140 std::string
info()
const;
145 template<
class DataType,
class NestedIteratorType>
146 class ProjectionData::PixelIterator
149 using iterator_category = std::bidirectional_iterator_tag;
150 using value_type =
typename NestedIteratorType::value_type;
151 using difference_type = std::ptrdiff_t;
152 using pointer =
typename NestedIteratorType::pointer;
153 using reference =
typename NestedIteratorType::reference;
155 PixelIterator(DataType* projData =
nullptr,
uint view = 0,
uint module = 0,
uint pixel = 0);
157 friend bool operator==(
const PixelIterator& left,
const PixelIterator& right)
158 {
return left._viewIterator == right._viewIterator; }
159 friend bool operator!=(
const PixelIterator& left,
const PixelIterator& right)
160 {
return left._viewIterator != right._viewIterator; }
162 PixelIterator& operator++();
163 PixelIterator operator++(
int);
164 PixelIterator& operator--();
165 PixelIterator operator--(
int);
167 reference operator*() {
return *_viewIterator; }
168 const reference operator*()
const {
return *_viewIterator; }
169 pointer operator->() {
return _viewIterator.operator->(); }
171 template<
class DataType2,
class NestedIteratorType2>
172 operator PixelIterator<DataType2, NestedIteratorType2>()
const;
179 NestedIteratorType _viewIterator;
187 template<
class DataType,
class NestedIteratorType>
188 ProjectionData::PixelIterator<DataType, NestedIteratorType>::PixelIterator(DataType* projData,
198 _viewIterator = NestedIteratorType(&_dataPtr->view(
view), module, pixel);
201 template<
class DataType,
class NestedIteratorType>
202 ProjectionData::PixelIterator<DataType, NestedIteratorType>&
203 ProjectionData::PixelIterator<DataType, NestedIteratorType>::operator++()
206 if(_viewIterator == _dataPtr->view(_curViewIdx).end())
212 template<
class DataType,
class NestedIteratorType>
213 ProjectionData::PixelIterator<DataType, NestedIteratorType>
214 ProjectionData::PixelIterator<DataType, NestedIteratorType>::operator++(
int)
221 template<
class DataType,
class NestedIteratorType>
222 ProjectionData::PixelIterator<DataType, NestedIteratorType>&
223 ProjectionData::PixelIterator<DataType, NestedIteratorType>::operator--()
225 if(_viewIterator == _dataPtr->view(_curViewIdx).begin())
233 template<
class DataType,
class NestedIteratorType>
234 ProjectionData::PixelIterator<DataType, NestedIteratorType>
235 ProjectionData::PixelIterator<DataType, NestedIteratorType>::operator--(
int)
242 template<
class DataType,
class NestedIteratorType>
243 uint ProjectionData::PixelIterator<DataType, NestedIteratorType>::module()
const 245 return _viewIterator.module();
248 template<
class DataType,
class NestedIteratorType>
249 uint ProjectionData::PixelIterator<DataType, NestedIteratorType>::view()
const 254 template<
class DataType,
class NestedIteratorType>
255 void ProjectionData::PixelIterator<DataType, NestedIteratorType>::nextView()
259 if(_curViewIdx < _dataPtr->
nbViews())
260 _viewIterator = NestedIteratorType(&_dataPtr->view(_curViewIdx), 0, 0);
265 template<
class DataType,
class NestedIteratorType>
266 void ProjectionData::PixelIterator<DataType, NestedIteratorType>::prevView()
271 _viewIterator = _dataPtr->view(_curViewIdx).end();
280 #endif // CTL_PROJECTIONDATA_H Simple class that holds the layout of a multi module detector.
Definition: modulelayout.h:32
uint nbChannels
Number of channels in each module.
Definition: projectiondata.h:120
SingleViewData::Dimensions viewDimensions() const
Definition: projectiondata.cpp:761
std::vector< float > toVector() const
Definition: projectiondata.cpp:341
uint nbModules
Number of modules.
Definition: projectiondata.h:122
uint nbViews
Number of views.
Definition: projectiondata.h:123
bool hasEqualSizeAs(const SingleViewData &other) const
Definition: projectiondata.cpp:503
const std::vector< SingleViewData > & constData() const
Definition: projectiondata.cpp:696
void fill(float fillValue)
Definition: projectiondata.cpp:323
void transformToExtinction(double i0=1.0)
Definition: projectiondata.cpp:370
ProjectionData combined(const ModuleLayout &layout=ModuleLayout()) const
Definition: projectiondata.cpp:301
Definition: projectiondata.h:23
ProjectionData & operator+=(const ProjectionData &other)
Definition: projectiondata.cpp:544
uint nbRows
Number of rows in each module.
Definition: projectiondata.h:121
SingleViewData::Dimensions _viewDim
The dimensions of the individual single views.
Definition: projectiondata.h:101
ProjectionData split(const ModuleLayout &layout) const
Splits the projection data from a single module dataset into different modules according to the detec...
Definition: projectiondata.cpp:273
void parallelExecution(const Function &f) const
Definition: projectiondata.cpp:770
ProjectionData operator/(float divisor) const
Definition: projectiondata.cpp:650
ProjectionData operator *(float factor) const
Definition: projectiondata.cpp:639
The ProjectionData class is the container class used to store all projections from all views.
Definition: projectiondata.h:19
ProjectionData operator+(const ProjectionData &other) const
Definition: projectiondata.cpp:616
ProjectionData & operator *=(float factor)
Definition: projectiondata.cpp:592
float max() const
Definition: projectiondata.cpp:181
std::string info() const
Definition: projectiondata.cpp:679
void append(SingleViewData &&singleView)
Definition: projectiondata.cpp:151
size_t totalNbElements() const
Definition: projectiondata.cpp:688
Struct that holds the dimensions of a ProjectionData object.
Definition: projectiondata.h:118
const SingleViewData & first() const
Definition: projectiondata.cpp:721
void freeMemory()
Definition: projectiondata.cpp:332
float min() const
Definition: projectiondata.cpp:204
uint nbViews() const
Definition: projectiondata.cpp:737
bool operator!=(const Dimensions &other) const
Definition: projectiondata.cpp:670
ProjectionData & operator/=(float divisor)
Definition: projectiondata.cpp:604
Struct that holds the dimensions, namely number of channels, rows and modules, of a SingleViewData ob...
Definition: singleviewdata.h:114
Dimensions dimensions() const
Definition: projectiondata.cpp:713
unsigned int uint
Qt style alias for unsigned int.
Definition: modulelayout.h:6
void transformToCounts(double n0=1.0)
Definition: projectiondata.cpp:427
const std::vector< SingleViewData > & data() const
Definition: projectiondata.cpp:701
bool operator==(const Dimensions &other) const
Definition: projectiondata.cpp:661
void setDataFromVector(const std::vector< float > &dataVector)
Definition: projectiondata.cpp:230
ProjectionData(const SingleViewData::Dimensions &viewDimensions)
Definition: projectiondata.cpp:11
void transformToIntensity(double i0=1.0)
Definition: projectiondata.cpp:414
SingleViewData & view(uint i)
Definition: projectiondata.cpp:742
void allocateMemory(uint nbViews)
Definition: projectiondata.cpp:518
static ProjectionData dummy()
Constructs a ProjectionData object with dimensions (0, 0, 0).
Definition: projectiondata.cpp:76
std::vector< SingleViewData > _data
The internal data storage vector.
Definition: projectiondata.h:103
The SingleViewData class is the container class used to store all projections from one particular vie...
Definition: singleviewdata.h:19