STIR 6.4.0
VoxelsOnCartesianGrid.h
Go to the documentation of this file.
1//
2//
3/*
4 Copyright (C) 2000 PARAPET partners
5 Copyright (C) 2000- 2007, Hammersmith Imanet Ltd
6 Copyright (C) 2018-2019, 2025, University College London
7 This file is part of STIR.
8
9 SPDX-License-Identifier: Apache-2.0 AND License-ref-PARAPET-license
10
11 See STIR/LICENSE.txt for details
12*/
13
14#ifndef __stir_VoxelsOnCartesianGrid_H__
15#define __stir_VoxelsOnCartesianGrid_H__
16
30
31START_NAMESPACE_STIR
32
33class ProjDataInfo;
34template <typename elemT>
35class PixelsOnCartesianGrid;
36
44template <class elemT>
46{
47#ifdef STIR_COMPILING_SWIG_WRAPPER
48 // work-around swig problem. It gets confused when using a private (or protected)
49 // typedef in a definition of a public typedef/member
50public:
51#endif
52 typedef VoxelsOnCartesianGrid<elemT> self_type;
54
55public:
56#if 0
58static VoxelsOnCartesianGrid ask_parameters();
59#endif
60
63
66 const CartesianCoordinate3D<float>& origin,
67 const BasicCoordinate<3, float>& grid_spacing);
68
71 const CartesianCoordinate3D<float>& origin,
72 const BasicCoordinate<3, float>& grid_spacing);
73
75
77 const CartesianCoordinate3D<float>& origin,
78 const BasicCoordinate<3, float>& grid_spacing);
79
81 VoxelsOnCartesianGrid(const shared_ptr<const ExamInfo>& exam_info_sptr,
82 const Array<3, elemT>& v,
83 const CartesianCoordinate3D<float>& origin,
84 const BasicCoordinate<3, float>& grid_spacing);
85
87 VoxelsOnCartesianGrid(const shared_ptr<const ExamInfo>& exam_info_sptr,
89 const CartesianCoordinate3D<float>& origin,
90 const BasicCoordinate<3, float>& grid_spacing);
91
93
94 VoxelsOnCartesianGrid(const shared_ptr<const ExamInfo>& exam_info_sptr,
95 const IndexRange<3>& range,
96 const CartesianCoordinate3D<float>& origin,
97 const BasicCoordinate<3, float>& grid_spacing);
98
99 // KT 10/12/2001 replace 2 constructors with the more general one below
101
124 VoxelsOnCartesianGrid(const ProjDataInfo& proj_data_info_ptr,
125 const float zoom = 1.F,
126 const CartesianCoordinate3D<float>& origin = CartesianCoordinate3D<float>(0.F, 0.F, 0.F),
127 const CartesianCoordinate3D<int>& sizes = CartesianCoordinate3D<int>(-1, -1, -1));
128
130
135 VoxelsOnCartesianGrid(const shared_ptr<const ExamInfo>& exam_info_sptr,
136 const ProjDataInfo& proj_data_info,
137 const float zoom = 1.F,
138 const CartesianCoordinate3D<float>& origin = CartesianCoordinate3D<float>(0.F, 0.F, 0.F),
139 const CartesianCoordinate3D<int>& sizes = CartesianCoordinate3D<int>(-1, -1, -1));
140
142
147 VoxelsOnCartesianGrid(const shared_ptr<const ExamInfo>& exam_info_sptr_v,
148 const ProjDataInfo& proj_data_info,
149 const CartesianCoordinate3D<float>& zooms,
150 const CartesianCoordinate3D<float>& origin = CartesianCoordinate3D<float>(0.F, 0.F, 0.F),
151 const CartesianCoordinate3D<int>& sizes = CartesianCoordinate3D<int>(-1, -1, -1));
152
155
158
160
163
165 void set_plane(const PixelsOnCartesianGrid<elemT>& plane, const int z);
166
169
172
174 void grow_z_range(const int min_z, const int max_z);
175
177
180 inline int get_x_size() const;
181
182 inline int get_y_size() const;
183
184 inline int get_z_size() const;
185
186 inline int get_min_x() const;
187
188 inline int get_min_y() const;
189
190 inline int get_min_z() const;
191
192 inline int get_max_x() const;
193
194 inline int get_max_y() const;
195
196 inline int get_max_z() const;
197
198 BasicCoordinate<3, int> get_lengths() const;
199 BasicCoordinate<3, int> get_min_indices() const;
200 BasicCoordinate<3, int> get_max_indices() const;
201
203
205
206 // tedious reimplementation to fix return types. This could be avoided by using boost::operators.
207 // However, reimplementing them explicitly helps SWIG.
208 inline self_type& operator+=(const self_type& x)
209 {
210 base_type::operator+=(x);
211 return *this;
212 }
213 inline self_type& operator-=(const self_type& x)
214 {
215 base_type::operator-=(x);
216 return *this;
217 }
218 inline self_type& operator*=(const self_type& x)
219 {
220 base_type::operator*=(x);
221 return *this;
222 }
223 inline self_type& operator/=(const self_type& x)
224 {
225 base_type::operator/=(x);
226 return *this;
227 }
228 inline self_type& operator+=(const elemT x)
229 {
230 base_type::operator+=(x);
231 return *this;
232 }
233 inline self_type& operator-=(const elemT x)
234 {
235 base_type::operator-=(x);
236 return *this;
237 }
238 inline self_type& operator*=(const elemT x)
239 {
240 base_type::operator*=(x);
241 return *this;
242 }
243 inline self_type& operator/=(const elemT x)
244 {
245 base_type::operator/=(x);
246 return *this;
247 }
248 inline self_type operator+(const self_type& x) const
249 {
250 self_type c(*this);
251 return c += x;
252 }
253 inline self_type operator+(const elemT x) const
254 {
255 self_type c(*this);
256 return c += x;
257 }
258 inline self_type operator-(const self_type& x) const
259 {
260 self_type c(*this);
261 return c -= x;
262 }
263 inline self_type operator-(const elemT x) const
264 {
265 self_type c(*this);
266 return c -= x;
267 }
268 inline self_type operator*(const self_type& x) const
269 {
270 self_type c(*this);
271 return c *= x;
272 }
273 inline self_type operator*(const elemT x) const
274 {
275 self_type c(*this);
276 return c *= x;
277 }
278 inline self_type operator/(const self_type& x) const
279 {
280 self_type c(*this);
281 return c /= x;
282 }
283 inline self_type operator/(const elemT x) const
284 {
285 self_type c(*this);
286 return c /= x;
287 }
289
290private:
291 void construct_from_projdata_info(const shared_ptr<const ExamInfo>& exam_info_sptr_v,
292 const ProjDataInfo& proj_data_info,
293 const CartesianCoordinate3D<float>& zooms,
294 const CartesianCoordinate3D<float>& origin,
295 const CartesianCoordinate3D<int>& sizes);
296};
297
298END_NAMESPACE_STIR
299
301#endif
defines the stir::CartesianCoordinate3D<coordT> class
defines the stir::DiscretisedDensityOnCartesianGrid class
inline implementations for the stir::VoxelsOnCartesianGrid class
This class defines multi-dimensional (numeric) arrays.
Definition Array.h:78
class BasicCoordinate<int num_dimensions, typename coordT> defines num_dimensions -dimensional coordi...
Definition BasicCoordinate.h:57
a templated class for 3-dimensional coordinates.
Definition CartesianCoordinate3D.h:53
This class defines ranges which can be 'irregular'.
Definition IndexRange.h:69
This class is used to represent pixelised densities on a rectangular grid (2D).
Definition PixelsOnCartesianGrid.h:41
An (abstract base) class that contains information on the projection data.
Definition ProjDataInfo.h:70
void set_voxel_size(const BasicCoordinate< 3, float > &)
is the same as set_grid_spacing()
Definition VoxelsOnCartesianGrid.cxx:322
PixelsOnCartesianGrid< elemT > get_plane(const int z) const
Extract a single plane.
Definition VoxelsOnCartesianGrid.cxx:329
int get_x_size() const
Definition VoxelsOnCartesianGrid.inl:55
VoxelsOnCartesianGrid(Array< 3, elemT > &&v, const CartesianCoordinate3D< float > &origin, const BasicCoordinate< 3, float > &grid_spacing)
Construct a VoxelsOnCartesianGrid, moving data from the Array<3,elemT> object.
Definition VoxelsOnCartesianGrid.cxx:146
VoxelsOnCartesianGrid()
Construct an empty VoxelsOnCartesianGrid (empty range, 0 origin, 0 grid_spacing)
Definition VoxelsOnCartesianGrid.cxx:132
VoxelsOnCartesianGrid< elemT > * clone() const override
Allocate a new DiscretisedDensity object which is a copy of the current one.
Definition VoxelsOnCartesianGrid.cxx:313
VoxelsOnCartesianGrid(const Array< 3, elemT > &v, const CartesianCoordinate3D< float > &origin, const BasicCoordinate< 3, float > &grid_spacing)
Construct a VoxelsOnCartesianGrid, initialising data from the Array<3,elemT> object.
Definition VoxelsOnCartesianGrid.cxx:137
VoxelsOnCartesianGrid(const IndexRange< 3 > &range, const CartesianCoordinate3D< float > &origin, const BasicCoordinate< 3, float > &grid_spacing)
Construct a VoxelsOnCartesianGrid from an index range.
Definition VoxelsOnCartesianGrid.cxx:157
VoxelsOnCartesianGrid(const shared_ptr< const ExamInfo > &exam_info_sptr, Array< 3, elemT > &&v, const CartesianCoordinate3D< float > &origin, const BasicCoordinate< 3, float > &grid_spacing)
Construct a VoxelsOnCartesianGrid, moving data from the Array<3,elemT> object.
Definition VoxelsOnCartesianGrid.cxx:174
void set_plane(const PixelsOnCartesianGrid< elemT > &plane, const int z)
Set a single plane.
Definition VoxelsOnCartesianGrid.cxx:339
VoxelsOnCartesianGrid(const shared_ptr< const ExamInfo > &exam_info_sptr, const Array< 3, elemT > &v, const CartesianCoordinate3D< float > &origin, const BasicCoordinate< 3, float > &grid_spacing)
Construct a VoxelsOnCartesianGrid, initialising data from the Array<3,elemT> object.
Definition VoxelsOnCartesianGrid.cxx:164
CartesianCoordinate3D< float > get_voxel_size() const
is the same as get_grid_spacing(), but now returns CartesianCoordinate3D for convenience
Definition VoxelsOnCartesianGrid.inl:27
void grow_z_range(const int min_z, const int max_z)
Growing of outer dimension only.
Definition VoxelsOnCartesianGrid.cxx:354
VoxelsOnCartesianGrid(const shared_ptr< const ExamInfo > &exam_info_sptr_v, const ProjDataInfo &proj_data_info, const CartesianCoordinate3D< float > &zooms, const CartesianCoordinate3D< float > &origin=CartesianCoordinate3D< float >(0.F, 0.F, 0.F), const CartesianCoordinate3D< int > &sizes=CartesianCoordinate3D< int >(-1, -1, -1))
Constructor from exam_info and proj_data_info.
Definition VoxelsOnCartesianGrid.cxx:219
VoxelsOnCartesianGrid(const shared_ptr< const ExamInfo > &exam_info_sptr, const IndexRange< 3 > &range, const CartesianCoordinate3D< float > &origin, const BasicCoordinate< 3, float > &grid_spacing)
Construct a VoxelsOnCartesianGrid from an index range.
Definition VoxelsOnCartesianGrid.cxx:187
VoxelsOnCartesianGrid(const ProjDataInfo &proj_data_info_ptr, const float zoom=1.F, const CartesianCoordinate3D< float > &origin=CartesianCoordinate3D< float >(0.F, 0.F, 0.F), const CartesianCoordinate3D< int > &sizes=CartesianCoordinate3D< int >(-1, -1, -1))
use ProjDataInfo to obtain the size information
Definition VoxelsOnCartesianGrid.cxx:196
VoxelsOnCartesianGrid(const shared_ptr< const ExamInfo > &exam_info_sptr, const ProjDataInfo &proj_data_info, const float zoom=1.F, const CartesianCoordinate3D< float > &origin=CartesianCoordinate3D< float >(0.F, 0.F, 0.F), const CartesianCoordinate3D< int > &sizes=CartesianCoordinate3D< int >(-1, -1, -1))
Constructor from exam_info and proj_data_info.
Definition VoxelsOnCartesianGrid.cxx:208
VoxelsOnCartesianGrid< elemT > * get_empty_voxels_on_cartesian_grid() const
Alias of get_empty_copy (for backwards compatibility)
Definition VoxelsOnCartesianGrid.cxx:297
VoxelsOnCartesianGrid< elemT > * get_empty_copy() const override
Definition of the pure virtual defined in DiscretisedDensity.
Definition VoxelsOnCartesianGrid.cxx:306