14 #ifndef __stir_VoxelsOnCartesianGrid_H__ 15 #define __stir_VoxelsOnCartesianGrid_H__ 34 template <
typename elemT>
35 class PixelsOnCartesianGrid;
44 template <
class elemT>
45 class VoxelsOnCartesianGrid :
public DiscretisedDensityOnCartesianGrid<3, elemT>
47 #ifdef STIR_COMPILING_SWIG_WRAPPER 52 typedef VoxelsOnCartesianGrid<elemT> self_type;
53 typedef DiscretisedDensityOnCartesianGrid<3, elemT> base_type;
57 static VoxelsOnCartesianGrid ask_parameters();
62 VoxelsOnCartesianGrid();
65 VoxelsOnCartesianGrid(
const Array<3, elemT>& v,
66 const CartesianCoordinate3D<float>& origin,
67 const BasicCoordinate<3, float>& grid_spacing);
71 VoxelsOnCartesianGrid(
const IndexRange<3>& range,
72 const CartesianCoordinate3D<float>& origin,
73 const BasicCoordinate<3, float>& grid_spacing);
76 VoxelsOnCartesianGrid(
const shared_ptr<const ExamInfo>& exam_info_sptr,
77 const Array<3, elemT>& v,
78 const CartesianCoordinate3D<float>& origin,
79 const BasicCoordinate<3, float>& grid_spacing);
83 VoxelsOnCartesianGrid(
const shared_ptr<const ExamInfo>& exam_info_sptr,
84 const IndexRange<3>& range,
85 const CartesianCoordinate3D<float>& origin,
86 const BasicCoordinate<3, float>& grid_spacing);
113 VoxelsOnCartesianGrid(
const ProjDataInfo& proj_data_info_ptr,
114 const float zoom = 1.F,
115 const CartesianCoordinate3D<float>& origin = CartesianCoordinate3D<float>(0.F, 0.F, 0.F),
116 const CartesianCoordinate3D<int>& sizes = CartesianCoordinate3D<int>(-1, -1, -1));
124 VoxelsOnCartesianGrid(
const shared_ptr<const ExamInfo>& exam_info_sptr,
125 const ProjDataInfo& proj_data_info,
126 const float zoom = 1.F,
127 const CartesianCoordinate3D<float>& origin = CartesianCoordinate3D<float>(0.F, 0.F, 0.F),
128 const CartesianCoordinate3D<int>& sizes = CartesianCoordinate3D<int>(-1, -1, -1));
136 VoxelsOnCartesianGrid(
const shared_ptr<const ExamInfo>& exam_info_sptr_v,
137 const ProjDataInfo& proj_data_info,
138 const CartesianCoordinate3D<float>& zooms,
139 const CartesianCoordinate3D<float>& origin = CartesianCoordinate3D<float>(0.F, 0.F, 0.F),
140 const CartesianCoordinate3D<int>& sizes = CartesianCoordinate3D<int>(-1, -1, -1));
143 #ifdef STIR_NO_COVARIANT_RETURN_TYPES 144 DiscretisedDensity<3, elemT>*
146 VoxelsOnCartesianGrid<elemT>*
148 get_empty_copy()
const override;
151 VoxelsOnCartesianGrid<elemT>* get_empty_voxels_on_cartesian_grid()
const;
153 #ifdef STIR_NO_COVARIANT_RETURN_TYPES 154 virtual DiscretisedDensity<3, elemT>*
156 VoxelsOnCartesianGrid<elemT>*
158 clone()
const override;
161 PixelsOnCartesianGrid<elemT> get_plane(
const int z)
const;
164 void set_plane(
const PixelsOnCartesianGrid<elemT>& plane,
const int z);
167 inline CartesianCoordinate3D<float> get_voxel_size()
const;
170 void set_voxel_size(
const BasicCoordinate<3, float>&);
173 void grow_z_range(
const int min_z,
const int max_z);
179 inline int get_x_size()
const;
181 inline int get_y_size()
const;
183 inline int get_z_size()
const;
185 inline int get_min_x()
const;
187 inline int get_min_y()
const;
189 inline int get_min_z()
const;
191 inline int get_max_x()
const;
193 inline int get_max_y()
const;
195 inline int get_max_z()
const;
197 BasicCoordinate<3, int> get_lengths()
const;
199 BasicCoordinate<3, int> get_max_indices()
const;
207 inline self_type& operator+=(
const self_type& x)
209 base_type::operator+=(x);
212 inline self_type& operator-=(
const self_type& x)
214 base_type::operator-=(x);
217 inline self_type& operator*=(
const self_type& x)
219 base_type::operator*=(x);
222 inline self_type& operator/=(
const self_type& x)
224 base_type::operator/=(x);
227 inline self_type& operator+=(
const elemT x)
229 base_type::operator+=(x);
232 inline self_type& operator-=(
const elemT x)
234 base_type::operator-=(x);
237 inline self_type& operator*=(
const elemT x)
239 base_type::operator*=(x);
242 inline self_type& operator/=(
const elemT x)
244 base_type::operator/=(x);
247 inline self_type operator+(
const self_type& x)
const 252 inline self_type operator+(
const elemT x)
const 257 inline self_type operator-(
const self_type& x)
const 262 inline self_type operator-(
const elemT x)
const 267 inline self_type operator*(
const self_type& x)
const 272 inline self_type operator*(
const elemT x)
const 277 inline self_type operator/(
const self_type& x)
const 282 inline self_type operator/(
const elemT x)
const 290 void construct_from_projdata_info(
const shared_ptr<const ExamInfo>& exam_info_sptr_v,
291 const ProjDataInfo& proj_data_info,
292 const CartesianCoordinate3D<float>& zooms,
293 const CartesianCoordinate3D<float>& origin,
294 const CartesianCoordinate3D<int>& sizes);
BasicCoordinate< num_dimensions, int > get_min_indices(const Array< num_dimensions, T > &a)
Get the first multi-dimensional index of the array.
Definition: array_index_functions.inl:100
inline implementations for the stir::VoxelsOnCartesianGrid class
defines the stir::DiscretisedDensityOnCartesianGrid class
defines the stir::CartesianCoordinate3D<coordT> class