1 #ifndef CTL_SINGLEVIEWDATA_H 2 #define CTL_SINGLEVIEWDATA_H 22 template<
class DataType,
class NestedIteratorType>
31 using reverse_iterator = std::reverse_iterator<iterator>;
32 using const_reverse_iterator = std::reverse_iterator<const_iterator>;
35 explicit SingleViewData(
const ModuleData::Dimensions& moduleDimensions);
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<ModuleData>&
constData()
const;
56 const std::vector<ModuleData>&
data()
const;
57 std::vector<ModuleData>&
data();
72 void append(std::vector<float>&& dataVector);
73 void append(
const std::vector<float>& dataVector);
75 void fill(
float fillValue);
123 std::string
info()
const;
124 size_t totalNbElements()
const;
127 template<
class DataType,
class NestedIteratorType>
131 using iterator_category = std::bidirectional_iterator_tag;
132 using value_type =
typename NestedIteratorType::value_type;
133 using difference_type = std::ptrdiff_t;
134 using pointer =
typename NestedIteratorType::pointer;
135 using reference =
typename NestedIteratorType::reference;
140 {
return left._moduleIterator == right._moduleIterator; }
141 friend bool operator!=(
const PixelIterator& left,
const PixelIterator& right)
142 {
return left._moduleIterator != right._moduleIterator; }
144 PixelIterator& operator++();
145 PixelIterator operator++(
int);
146 PixelIterator& operator--();
147 PixelIterator operator--(
int);
149 reference operator*() {
return *_moduleIterator;}
150 const reference operator*()
const {
return *_moduleIterator;}
151 pointer operator->() {
return _moduleIterator.operator->();}
153 template<
class DataType2,
class NestedIteratorType2>
154 operator PixelIterator<DataType2, NestedIteratorType2>()
const;
161 NestedIteratorType _moduleIterator;
169 template<
class DataType,
class NestedIteratorType>
170 SingleViewData::PixelIterator<DataType, NestedIteratorType>::PixelIterator(DataType* viewData,
179 _moduleIterator = std::next(_dataPtr->module(
module).begin(), pixel);
182 template<
class DataType,
class NestedIteratorType>
183 SingleViewData::PixelIterator<DataType, NestedIteratorType>&
184 SingleViewData::PixelIterator<DataType, NestedIteratorType>::operator++()
187 if(_moduleIterator == _dataPtr->module(_curModule).end())
193 template<
class DataType,
class NestedIteratorType>
194 SingleViewData::PixelIterator<DataType, NestedIteratorType>
195 SingleViewData::PixelIterator<DataType, NestedIteratorType>::operator++(
int)
202 template<
class DataType,
class NestedIteratorType>
204 SingleViewData::PixelIterator<DataType, NestedIteratorType>::operator--()
206 if(_moduleIterator == _dataPtr->module(_curModule).begin())
214 template<
class DataType,
class NestedIteratorType>
216 SingleViewData::PixelIterator<DataType, NestedIteratorType>::operator--(
int)
223 template<
class DataType,
class NestedIteratorType>
224 uint SingleViewData::PixelIterator<DataType, NestedIteratorType>::module()
const 229 template<
class DataType,
class NestedIteratorType>
230 uint SingleViewData::PixelIterator<DataType, NestedIteratorType>::pixel()
const 232 return std::distance(_dataPtr->module(_curModule).cbegin(),
233 ModuleData::const_iterator{ _moduleIterator });
236 template<
class DataType,
class NestedIteratorType>
237 void SingleViewData::PixelIterator<DataType, NestedIteratorType>::nextModule()
242 _moduleIterator = _dataPtr->module(_curModule).begin();
247 template<
class DataType,
class NestedIteratorType>
248 void SingleViewData::PixelIterator<DataType, NestedIteratorType>::prevModule()
253 _moduleIterator = _dataPtr->module(_curModule).end();
264 #endif // CTL_SINGLEVIEWDATA_H Simple class that holds the layout of a multi module detector.
Definition: modulelayout.h:32
ModuleData::Dimensions _moduleDim
The dimensions of the individual modules.
Definition: singleviewdata.h:100
void append(ModuleData &&moduleData)
Definition: singleviewdata.cpp:117
const ModuleData & first() const
Definition: singleviewdata.cpp:704
ModuleData & module(uint i)
Definition: singleviewdata.cpp:721
Chunk2D< float > combined(const ModuleLayout &layout=ModuleLayout(), bool *ok=nullptr) const
Definition: singleviewdata.cpp:360
Definition: singleviewdata.h:23
bool operator==(const Dimensions &other) const
Definition: singleviewdata.cpp:635
void transformToIntensity(double i0=1.0)
Definition: singleviewdata.cpp:212
SingleViewData operator/(float divisor) const
Definition: singleviewdata.cpp:624
float min() const
Definition: singleviewdata.cpp:462
size_t totalPixelCount() const
Definition: singleviewdata.cpp:748
void transformToExtinction(double i0orN0=1.0)
Definition: singleviewdata.cpp:196
void transformToCounts(double n0=1.0)
Definition: singleviewdata.cpp:228
SingleViewData split(const ModuleLayout &layout) const
Splits the projection data from a single module dataset into different modules according to the detec...
Definition: singleviewdata.cpp:307
SingleViewData operator *(float factor) const
Definition: singleviewdata.cpp:613
Dimensions dimensions() const
Definition: singleviewdata.cpp:686
uint nbModules
Number of modules.
Definition: singleviewdata.h:118
std::vector< float > toVector() const
Definition: singleviewdata.cpp:178
std::vector< ModuleData > _data
The internal data storage vector.
Definition: singleviewdata.h:102
uint nbModules() const
Definition: singleviewdata.cpp:740
void allocateMemory(uint nbModules)
Definition: singleviewdata.cpp:509
bool operator!=(const Dimensions &other) const
Definition: singleviewdata.cpp:644
void setDataFromVector(const std::vector< float > &dataVector)
Definition: singleviewdata.cpp:268
bool hasEqualSizeAs(const ModuleData &other) const
Definition: singleviewdata.cpp:483
float max() const
Definition: singleviewdata.cpp:439
std::string info() const
Definition: singleviewdata.cpp:653
uint nbChannels
Number of channels in each module.
Definition: singleviewdata.h:116
Struct that holds the dimensions, namely number of channels, rows and modules, of a SingleViewData ob...
Definition: singleviewdata.h:114
unsigned int uint
Qt style alias for unsigned int.
Definition: modulelayout.h:6
void fill(float fillValue)
Definition: singleviewdata.cpp:419
const std::vector< ModuleData > & data() const
Definition: singleviewdata.cpp:675
SingleViewData & operator *=(float factor)
Definition: singleviewdata.cpp:567
uint nbRows
Number of rows in each module.
Definition: singleviewdata.h:117
const std::vector< ModuleData > & constData() const
Definition: singleviewdata.cpp:667
SingleViewData(const ModuleData::Dimensions &moduleDimensions)
Definition: singleviewdata.cpp:13
Chunk2D< float > ModuleData
Alias for template specialization Chunk2D<float>.
Definition: singleviewdata.h:23
SingleViewData operator+(const SingleViewData &other) const
Definition: singleviewdata.cpp:590
uint elementsPerModule() const
Definition: singleviewdata.cpp:696
The SingleViewData class is the container class used to store all projections from one particular vie...
Definition: singleviewdata.h:19
SingleViewData & operator+=(const SingleViewData &other)
Definition: singleviewdata.cpp:532
void freeMemory()
Definition: singleviewdata.cpp:428
SingleViewData & operator/=(float divisor)
Definition: singleviewdata.cpp:578