35template <
int num_dimensions,
typename elemT>
39template <
int num_dimensions,
typename elemT>
46template <
int num_dimensions,
typename elemT>
55template <
int num_dimensions,
typename elemT>
62template <
int num_dimensions,
typename elemT>
69template <
int num_dimensions,
typename elemT>
72 std::string& explanation)
const
74 if (
typeid(other) !=
typeid(*
this))
76 explanation =
"Different type of data";
85 "Not the same origin: (%g,%g,%g) and (%g,%g,%g)",
89 this->get_origin()[1],
90 this->get_origin()[2],
91 this->get_origin()[3]);
95 if (other.get_index_range() != this->get_index_range())
97 explanation =
"Not the same index ranges.";
103template <
int num_dimensions,
typename elemT>
106 std::string& explanation)
const
108 return this->actual_has_same_characteristics(other, explanation);
111template <
int num_dimensions,
typename elemT>
115 std::string explanation;
116 return this->actual_has_same_characteristics(other, explanation);
119template <
int num_dimensions,
typename elemT>
126template <
int num_dimensions,
typename elemT>
130 return !((*this) == that);
133template <
int num_dimensions,
typename elemT>
141template <
int num_dimensions,
typename elemT>
149template <
int num_dimensions,
typename elemT>
154 return this->actual_get_index_coordinates_for_relative_coordinates(coords - this->
get_origin());
157template <
int num_dimensions,
typename elemT>
162 return this->actual_get_index_coordinates_for_relative_coordinates(coords);
165template <
int num_dimensions,
typename elemT>
170 return round(this->actual_get_index_coordinates_for_relative_coordinates(coords));
173template <
int num_dimensions,
typename elemT>
181template <
int num_dimensions,
typename elemT>
189template <
int num_dimensions,
typename elemT>
197template <
int num_dimensions,
typename elemT>
209 switch (patient_position.get_position())
211 case PatientPosition::unknown_position:
213 flip_coords.z() *= -1;
217 flip_coords.x() *= -1;
218 flip_coords.y() *= -1;
219 flip_coords.z() *= -1;
223 flip_coords.x() *= -1;
227 flip_coords.y() *= -1;
231 throw std::runtime_error(
"Unsupported patient position, can't convert to LPS.");
236template <
int num_dimensions,
typename elemT>
241 return swap_axes_based_on_orientation(coords, this->get_exam_info().patient_position);
244template <
int num_dimensions,
typename elemT>
252template <
int num_dimensions,
typename elemT>
260template <
int num_dimensions,
typename elemT>
269template <
int num_dimensions,
typename elemT>
277template <
int num_dimensions,
typename elemT>
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 abstract class is the basis for all image representations.
Definition DiscretisedDensity.h:99
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
CartesianCoordinate3D< float > get_LPS_coordinates_for_indices(const BasicCoordinate< num_dimensions, int > &indices) const
Translation from indices to LPS coordinates.
Definition DiscretisedDensity.inl:254
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
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
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
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
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.
ExamData()
ExamData.
Definition ExamData.cxx:21
This class defines ranges which can be 'irregular'.
Definition IndexRange.h:69
Definition PatientPosition.h:29
@ HFS
Head First-Supine.
Definition PatientPosition.h:55
@ HFP
Head First-Prone.
Definition PatientPosition.h:56
@ FFP
Feet First-Prone.
Definition PatientPosition.h:60
@ FFS
Feet First-Supine.
Definition PatientPosition.h:59
double norm(const BasicCoordinate< num_dimensions, coordT > &p1)
compute sqrt(inner_product(p1,p1))
Definition BasicCoordinate.inl:426
int round(const float x)
Implements rounding of floating point numbers.
Definition round.inl:59
Declaration of the stir::round functions.