STIR 6.4.0
DiscretisedDensity.h
Go to the documentation of this file.
1//
2//
3/*
4 Copyright (C) 2000 PARAPET partners
5 Copyright (C) 2000- 2009-07-08, Hammersmith Imanet Ltd
6 Copyright (C) 2011-07-01 - 2011, Kris Thielemans
7 Copyright (C) 2018, University College London
8 Copyright (C) 2018, Commonwealth Scientific and Industrial Research Organisation
9 Australian eHealth Research Centre
10 This file is part of STIR.
11
12 SPDX-License-Identifier: Apache-2.0 AND License-ref-PARAPET-license
13
14 See STIR/LICENSE.txt for details
15*/
16#ifndef __stir_DiscretisedDensity_H__
17#define __stir_DiscretisedDensity_H__
18
30
32#include "stir/Array.h"
33#include "stir/ExamData.h"
34#include "stir/shared_ptr.h"
35#include <string>
36
37START_NAMESPACE_STIR
38
39#ifdef SWIG
40// SWIG doesn't seem to understand how we define ArrayType (with `using`).
41// Do a HORRIBLE work-around for now. It will fail whenever we change ArrayType of course.
42// TODO
43# define ArrayType Array
44#endif
45
97template <int num_dimensions, typename elemT>
98class DiscretisedDensity : public ExamData, public ArrayType<num_dimensions, elemT>
99{
100#ifdef STIR_COMPILING_SWIG_WRAPPER
101 // work-around swig problem. It gets confused when using a private (or protected)
102 // typedef in a definition of a public typedef/member
103public:
104#endif
105 typedef ArrayType<num_dimensions, elemT> base_type;
107
108public:
110
116
118 static DiscretisedDensity* read_from_file(const std::string& filename);
119
122
125
127 inline DiscretisedDensity(const shared_ptr<const ExamInfo>& exam_info_sptr,
128 const IndexRange<num_dimensions>& range,
129 const CartesianCoordinate3D<float>& origin);
130
133
135 inline void set_origin(const CartesianCoordinate3D<float>& origin);
136
138
154
156
164
167
171
173
177
180
187
189
197
199
205
207
212
214
219
223
227
230
234
238
242
244
247
250
252 //*! \deprecated Use get_empty_copy() instead
257
259
260
264 inline bool has_same_characteristics(self_type const&, std::string& explanation) const;
265
267
269 inline bool has_same_characteristics(self_type const&) const;
270
272
276 inline bool operator==(const self_type&) const;
277
279 inline bool operator!=(const self_type&) const;
281
282protected:
284
292 virtual bool actual_has_same_characteristics(DiscretisedDensity<num_dimensions, elemT> const&, std::string& explanation) const;
293
295
302
304 actual_get_index_coordinates_for_relative_coordinates(const CartesianCoordinate3D<float>& coords) const = 0;
305
306private:
308
309 static inline CartesianCoordinate3D<float> swap_axes_based_on_orientation(const CartesianCoordinate3D<float>& coordinates,
310 const PatientPosition patient_position);
311};
312
313#ifdef SWIG
314// Undo HORRIBLE work-around.
315// TODO
316# undef ArrayType
317#endif
318
319END_NAMESPACE_STIR
320
322#endif
defines the stir::Array class for multi-dimensional (numeric) arrays
defines the stir::CartesianCoordinate3D<coordT> class
inline implementation for stir::DiscretisedDensity
declaration of stir::ExamData
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
void set_origin(const CartesianCoordinate3D< float > &origin)
Set the origin.
Definition DiscretisedDensity.inl:57
BasicCoordinate< num_dimensions, int > get_indices_closest_to_relative_coordinates(const CartesianCoordinate3D< float > &coords) const
Return the indices of the basis-function closest to the given point.
Definition DiscretisedDensity.inl:167
BasicCoordinate< num_dimensions, float > get_index_coordinates_for_LPS_coordinates(const CartesianCoordinate3D< float > &coords) const
Translation from LPS coordinates to continuous indices.
Definition DiscretisedDensity.inl:271
BasicCoordinate< num_dimensions, float > get_index_coordinates_for_physical_coordinates(const CartesianCoordinate3D< float > &coords) const
Return the indices of the basis-function closest to the given point.
Definition DiscretisedDensity.inl:151
DiscretisedDensity()
Construct an empty DiscretisedDensity.
Definition DiscretisedDensity.inl:36
DiscretisedDensity(const IndexRange< num_dimensions > &range, const CartesianCoordinate3D< float > &origin)
Construct DiscretisedDensity from a given range of indices & origin.
Definition DiscretisedDensity.inl:40
bool has_same_characteristics(self_type const &) const
Checks if the 2 objects have the same type, index range, origin etc.
CartesianCoordinate3D< float > get_LPS_coordinates_for_indices(const BasicCoordinate< num_dimensions, int > &indices) const
Translation from indices to LPS coordinates.
Definition DiscretisedDensity.inl:254
DiscretisedDensity< num_dimensions, float > hierarchy_base_type
Definition DiscretisedDensity.h:115
BasicCoordinate< num_dimensions, int > get_indices_closest_to_LPS_coordinates(const CartesianCoordinate3D< float > &coords) const
Translation from LPS coordinates to indices.
Definition DiscretisedDensity.inl:279
CartesianCoordinate3D< float > get_relative_coordinates_for_indices(const BasicCoordinate< num_dimensions, int > &indices) const
Return the relative coordinates of the centre of the basis-function corresponding to indices.
Definition DiscretisedDensity.inl:135
bool operator!=(const self_type &) const
negation of operator==
Definition DiscretisedDensity.inl:128
CartesianCoordinate3D< float > get_physical_coordinates_for_indices(const BasicCoordinate< num_dimensions, int > &indices) const
Return the coordinates of the centre of the basis-function corresponding to indices.
Definition DiscretisedDensity.inl:175
bool operator==(const self_type &) const
check equality (data has to be identical)
Definition DiscretisedDensity.inl:121
CartesianCoordinate3D< float > get_LPS_coordinates_for_indices(const BasicCoordinate< num_dimensions, float > &indices) const
Translation from continuous indices to LPS coordinates.
Definition DiscretisedDensity.inl:246
virtual bool actual_has_same_characteristics(DiscretisedDensity< num_dimensions, elemT > const &, std::string &explanation) const
Implementation used by has_same_characteristics.
Definition DiscretisedDensity.inl:71
CartesianCoordinate3D< float > get_LPS_coordinates_for_physical_coordinates(const CartesianCoordinate3D< float > &indices) const
Translation from physical to LPS coordinates.
Definition DiscretisedDensity.inl:238
DiscretisedDensity< num_dimensions, elemT > * get_empty_discretised_density() const
Allocate a new DiscretisedDensity object with same characteristics as the current one.
Definition DiscretisedDensity.h:253
DiscretisedDensity(const shared_ptr< const ExamInfo > &exam_info_sptr, const IndexRange< num_dimensions > &range, const CartesianCoordinate3D< float > &origin)
Construct DiscretisedDensity from ExamInfo and a given range of indices & origin.
Definition DiscretisedDensity.inl:47
BasicCoordinate< num_dimensions, float > get_index_coordinates_for_relative_coordinates(const CartesianCoordinate3D< float > &coords) const
Return the index-coordinates of the basis-function closest to the given point.
Definition DiscretisedDensity.inl:159
virtual DiscretisedDensity< num_dimensions, elemT > * clone() const =0
Allocate a new DiscretisedDensity object which is a copy of the current one.
CartesianCoordinate3D< float > get_relative_coordinates_for_indices(const BasicCoordinate< num_dimensions, float > &indices) const
Return the relative coordinates of the centre of the basis-function corresponding to the non-integer ...
Definition DiscretisedDensity.inl:143
CartesianCoordinate3D< float > get_physical_coordinates_for_LPS_coordinates(const CartesianCoordinate3D< float > &coords) const
Translation from LPS coordinates to physical coordinates.
Definition DiscretisedDensity.inl:262
const CartesianCoordinate3D< float > & get_origin() const
Return the origin.
Definition DiscretisedDensity.inl:64
CartesianCoordinate3D< float > get_physical_coordinates_for_indices(const BasicCoordinate< num_dimensions, float > &indices) const
Return the coordinates of the centre of the basis-function corresponding to non-integer coordinate in...
Definition DiscretisedDensity.inl:183
virtual DiscretisedDensity< num_dimensions, elemT > * get_empty_copy() const =0
Allocate a new DiscretisedDensity object with same characteristics as the current one.
bool has_same_characteristics(self_type const &, std::string &explanation) const
Checks if the 2 objects have the same type, index range, origin etc.
BasicCoordinate< num_dimensions, int > get_indices_closest_to_physical_coordinates(const CartesianCoordinate3D< float > &coords) const
Return the indices of the basis-function closest to the given point.
Definition DiscretisedDensity.inl:191
virtual CartesianCoordinate3D< float > actual_get_relative_coordinates_for_indices(const BasicCoordinate< num_dimensions, float > &indices) const =0
Implementation used by get_relative_coordinates_for_indices.
static DiscretisedDensity * read_from_file(const std::string &filename)
A static member to read an image from file.
Definition DiscretisedDensity.cxx:62
ExamData()
ExamData.
Definition ExamData.cxx:21
This class defines ranges which can be 'irregular'.
Definition IndexRange.h:69
Definition PatientPosition.h:29
Array< num_dimensions, elemT > ArrayType
type alias for future-proofing for "large" rectangular arrays
Definition ArrayFwd.h:25
Import of std::shared_ptr, std::dynamic_pointer_cast and std::static_pointer_cast into the stir names...