STIR 6.5.0
ProjDataInfoCylindricalNoArcCorr.h
Go to the documentation of this file.
1//
2//
3/*
4 Copyright (C) 2000- 2011-06-24, Hammersmith Imanet Ltd
5 Copyright (C) 2011-07-01 - 2011, Kris Thielemans
6 Copyright (C) 2016, University of Hull
7 Copyright (C) 2015-2018, 2022, 2024, 2026, University College London
8 This file is part of STIR.
9
10 SPDX-License-Identifier: Apache-2.0
11
12 See STIR/LICENSE.txt for details
13*/
24#ifndef __stir_ProjDataInfoCylindricalNoArcCorr_H__
25#define __stir_ProjDataInfoCylindricalNoArcCorr_H__
26
31
32START_NAMESPACE_STIR
33
34class Succeeded;
86{
87private:
88 typedef ProjDataInfoCylindrical base_type;
89#ifdef STIR_COMPILING_SWIG_WRAPPER
90 // SWIG needs this typedef to be public
91public:
92#endif
93 typedef ProjDataInfoCylindricalNoArcCorr self_type;
94
95public:
99
100 ProjDataInfoCylindricalNoArcCorr(const shared_ptr<Scanner> scanner_ptr,
101 const float ring_radius,
102 const float angular_increment,
103 const VectorWithOffset<int>& num_axial_pos_per_segment,
104 const VectorWithOffset<int>& min_ring_diff_v,
105 const VectorWithOffset<int>& max_ring_diff_v,
106 const int num_views,
107 const int num_tangential_poss,
108 const int tof_mash_factor = 0);
109
111
113 ProjDataInfoCylindricalNoArcCorr(const shared_ptr<Scanner> scanner_ptr,
114 const VectorWithOffset<int>& num_axial_pos_per_segment,
115 const VectorWithOffset<int>& min_ring_diff_v,
116 const VectorWithOffset<int>& max_ring_diff_v,
117 const int num_views,
118 const int num_tangential_poss,
119 const int tof_mash_factor = 0);
120
121 self_type* clone() const override;
122
123 bool operator==(const self_type&) const;
124
126
130 inline float get_s(const Bin&) const override;
131
133 inline float get_angular_increment() const;
134
135 std::string parameter_info() const override;
136
138
139
162 inline bool
163 get_view_tangential_pos_num_for_det_num_pair(int& view_num, int& tang_pos_num, const int det1_num, const int det2_num) const;
165
178 inline void
179 get_det_num_pair_for_view_tangential_pos_num(int& det1_num, int& det2_num, const int view_num, const int tang_pos_num) const;
180
182
192
194
201 inline void get_det_pos_pair_for_bin(DetectionPositionPair<>&, const Bin&) const;
202
204
207 unsigned int get_num_det_pos_pairs_for_bin(const Bin&, bool ignore_non_spatial_dimensions = true) const;
208
210
222 const Bin&,
223 bool ignore_non_spatial_dimensions = true) const;
224
225private:
226 // old function, now private. Use get_bin_for_det_pos_pair instead.
228
234 inline Succeeded get_bin_for_det_pair(Bin&,
235 const int det1_num,
236 const int ring1_num,
237 const int det2_num,
238 const int ring2_num,
239 const int mashed_timing_pos_num = 0) const;
240
241public:
243
249
250 inline void get_det_pair_for_bin(int& det_num1, int& ring_num1, int& det_num2, int& ring_num2, const Bin& bin) const;
251
253
254 Bin get_bin(const LOR<float>&, const double delta_time = 0.0) const override;
255
257
258
264 int& det2,
265 int& ring1,
266 int& ring2,
268 const CartesianCoordinate3D<float>& c2) const;
269
270 void find_cartesian_coordinates_of_detection(CartesianCoordinate3D<float>& coord_1,
272 const Bin& bin) const;
273
274protected:
275 // give access to protected member find_cartesian_coordinates_given_scanner_coordinates
276 friend class ProjDataInfoCylindricalNoArcCorrTests;
277 template <typename ProjDataInfoT>
278 friend class CListEventScannerWithDiscreteDetectors;
279 friend class LmToProjDataWithMCTests;
280
282
287 const int Ring_A,
288 const int Ring_B,
289 const int det1,
290 const int det2,
291 const int timing_pos_num) const;
292
293public:
294 void find_bin_given_cartesian_coordinates_of_detection(Bin& bin,
295 const CartesianCoordinate3D<float>& coord_1,
296 const CartesianCoordinate3D<float>& coord_2) const;
298
299private:
300 float ring_radius;
301 float angular_increment;
302
304 float get_psi_offset() const;
305
306 // used in get_view_tangential_pos_num_for_det_num_pair()
307 struct Det1Det2
308 {
309 int det1_num;
310 int det2_num;
311 };
312 mutable VectorWithOffset<VectorWithOffset<Det1Det2>> uncompressed_view_tangpos_to_det1det2;
313 mutable bool uncompressed_view_tangpos_to_det1det2_initialised;
315 void initialise_uncompressed_view_tangpos_to_det1det2() const;
316
317 // used in get_view_tangential_pos_num_for_det_num_pair()
318 // we prestore a lookup-table in terms for unmashed view/tangpos
319 struct ViewTangPosSwap
320 {
321 int view_num;
322 int tang_pos_num;
323 bool swap_detectors;
324 };
325 mutable VectorWithOffset<VectorWithOffset<ViewTangPosSwap>> det1det2_to_uncompressed_view_tangpos;
326 mutable bool det1det2_to_uncompressed_view_tangpos_initialised;
328 void initialise_det1det2_to_uncompressed_view_tangpos() const;
329
331 inline void initialise_uncompressed_view_tangpos_to_det1det2_if_not_done_yet() const;
333 inline void initialise_det1det2_to_uncompressed_view_tangpos_if_not_done_yet() const;
334
335protected:
336 bool blindly_equals(const root_type* const) const override;
337};
338
339END_NAMESPACE_STIR
340
342
343#endif
defines the stir::CartesianCoordinate3D<coordT> class
Declaration of class stir::DetectionPositionPair.
Implementation of inline functions of class ProjDataInfoCylindricalNoArcCorr.
Declaration of class stir::ProjDataInfoCylindrical.
defines the stir::VectorWithOffset class
A class for storing coordinates and value of a single projection bin.
Definition Bin.h:49
a templated class for 3-dimensional coordinates.
Definition CartesianCoordinate3D.h:53
A class for storing 2 coordinates-sets of a detection, together with a timing-position index (for TOF...
Definition DetectionPositionPair.h:41
A base class for specifying an LOR with geometric coordinates.
Definition LORCoordinates.h:59
void get_det_num_pair_for_view_tangential_pos_num(int &det1_num, int &det2_num, const int view_num, const int tang_pos_num) const
This routine gets det_num1 and det_num2.
Definition ProjDataInfoCylindricalNoArcCorr.inl:91
std::string parameter_info() const override
Return a string describing the object.
Definition ProjDataInfoCylindricalNoArcCorr.cxx:118
Bin get_bin(const LOR< float > &, const double delta_time=0.0) const override
Find the bin in the projection data that 'contains' an LOR.
Definition ProjDataInfoCylindricalNoArcCorr.cxx:536
unsigned int get_num_det_pos_pairs_for_bin(const Bin &, bool ignore_non_spatial_dimensions=true) const
This routine returns the number of detector pairs that correspond to a bin.
Definition ProjDataInfoCylindricalNoArcCorr.cxx:304
void get_all_det_pos_pairs_for_bin(std::vector< DetectionPositionPair<> > &, const Bin &, bool ignore_non_spatial_dimensions=true) const
This routine fills a vector with all the detector pairs that correspond to a bin.
Definition ProjDataInfoCylindricalNoArcCorr.cxx:311
void get_det_pair_for_bin(int &det_num1, int &ring_num1, int &det_num2, int &ring_num2, const Bin &bin) const
This routine gets the detector pair corresponding to a bin.
Definition ProjDataInfoCylindricalNoArcCorr.inl:146
virtual Succeeded find_scanner_coordinates_given_cartesian_coordinates(int &det1, int &det2, int &ring1, int &ring2, const CartesianCoordinate3D< float > &c1, const CartesianCoordinate3D< float > &c2) const
Definition ProjDataInfoCylindricalNoArcCorr.cxx:361
bool get_view_tangential_pos_num_for_det_num_pair(int &view_num, int &tang_pos_num, const int det1_num, const int det2_num) const
This gets view_num and tang_pos_num for a particular detector pair.
Definition ProjDataInfoCylindricalNoArcCorr.inl:104
void get_det_pos_pair_for_bin(DetectionPositionPair<> &, const Bin &) const
This routine gets the detector pair corresponding to a bin.
Definition ProjDataInfoCylindricalNoArcCorr.inl:162
Succeeded get_bin_for_det_pos_pair(Bin &, const DetectionPositionPair<> &) const
This gets Bin coordinates for a particular detector pair.
Definition ProjDataInfoCylindricalNoArcCorr.inl:134
ProjDataInfoCylindricalNoArcCorr()
Default constructor (leaves object in ill-defined state).
Definition ProjDataInfoCylindricalNoArcCorr.cxx:44
self_type * clone() const override
Standard trick for a 'virtual copy-constructor'.
Definition ProjDataInfoCylindricalNoArcCorr.cxx:97
float get_angular_increment() const
Gets angular increment (in radians).
Definition ProjDataInfoCylindricalNoArcCorr.inl:85
float get_s(const Bin &) const override
Gets s coordinate in mm.
Definition ProjDataInfoCylindricalNoArcCorr.inl:79
bool blindly_equals(const root_type *const) const override
Definition ProjDataInfoCylindricalNoArcCorr.cxx:111
virtual void find_cartesian_coordinates_given_scanner_coordinates(CartesianCoordinate3D< float > &coord_1, CartesianCoordinate3D< float > &coord_2, const int Ring_A, const int Ring_B, const int det1, const int det2, const int timing_pos_num) const
deprecated function
Definition ProjDataInfoCylindricalNoArcCorr.cxx:445
ProjDataInfoCylindrical()
Constructors.
Definition ProjDataInfoCylindrical.cxx:53
a class containing an enumeration type that can be used by functions to signal successful operation o...
Definition Succeeded.h:44
A templated class for vectors, but with indices starting not from 0.
Definition VectorWithOffset.h:65