25#ifndef __stir_ProjDataInfoCylindrical_H__
26#define __stir_ProjDataInfoCylindrical_H__
73 const int num_tangential_poss);
77 inline float get_phi(
const Bin&)
const override;
79 inline float get_t(
const Bin&)
const override;
88 inline float get_m(
const Bin&)
const override;
100 const Bin& bin)
const;
111 const int timing_pos)
const;
156 inline float get_average_ring_difference(
int segment_num)
const;
158 inline int get_min_ring_difference(
int segment_num)
const;
160 inline int get_max_ring_difference(
int segment_num)
const;
163 void set_min_ring_difference(
int min_ring_diff_v,
int segment_num);
165 void set_max_ring_difference(
int max_ring_diff_v,
int segment_num);
167 void set_num_axial_poss_per_segment(
const VectorWithOffset<int>& num_axial_poss_per_segment)
override;
168 void set_min_axial_pos_num(
const int min_ax_pos_num,
const int segment_num)
override;
169 void set_max_axial_pos_num(
const int max_ax_pos_num,
const int segment_num)
override;
170 void reduce_segment_range(
const int min_segment_num,
const int max_segment_num)
override;
179 virtual inline float get_ring_radius()
const;
181 virtual inline float get_ring_radius(
const int view_num)
const;
183 virtual inline float get_ring_spacing()
const;
186 virtual void set_ring_spacing(
float ring_spacing_v);
196 virtual inline int get_view_mashing_factor()
const;
202 inline Succeeded get_segment_num_for_ring_difference(
int& segment_num,
const int ring_diff)
const;
221 get_segment_axial_pos_num_for_ring_pair(
int& segment_num,
int& axial_pos_num,
const int ring1,
const int ring2)
const;
232 inline const RingNumPairs& get_all_ring_pairs_for_segment_axial_pos_num(
const int segment_num,
const int axial_pos_num)
const;
240 inline unsigned get_num_ring_pairs_for_segment_axial_pos_num(
const int segment_num,
const int axial_pos_num)
const;
254 void get_ring_pair_for_segment_axial_pos_num(
int& ring1,
int& ring2,
const int segment_num,
const int axial_pos_num)
const;
256 std::string parameter_info()
const override;
281 float azimuthal_angle_offset;
282 float azimuthal_angle_sampling;
299 mutable bool ring_diff_arrays_computed;
311 void initialise_ring_diff_arrays()
const;
315 inline void initialise_ring_diff_arrays_if_not_done_yet()
const;
317 inline int get_num_axial_poss_per_ring_inc(
const int segment_num)
const;
323 void allocate_segment_axial_pos_to_ring_pair()
const;
327 void compute_segment_axial_pos_to_ring_pair(
const int segment_num,
const int axial_pos_num)
const;
defines the stir::CartesianCoordinate3D<coordT> class
Implementation of inline functions of class stir::ProjDataInfoCylindrical.
Declaration of class stir::ProjDataInfo.
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 LORs.
Definition LORCoordinates.h:511
float get_phi(const Bin &) const override
Get azimuthal angle phi of the normal to the projection plane.
Definition ProjDataInfoCylindrical.inl:65
std::vector< std::pair< int, int > > RingNumPairs
Type used by get_all_ring_pairs_for_segment_axial_pos_num()
Definition ProjDataInfoCylindrical.h:56
virtual float get_azimuthal_angle_offset() const
Get azimuthal angle offset (in radians)
Definition ProjDataInfoCylindrical.inl:114
void get_LOR(LORInAxialAndNoArcCorrSinogramCoordinates< float > &lor, const Bin &bin) const override
Get LOR corresponding to a given bin.
Definition ProjDataInfoCylindrical.cxx:515
bool blindly_equals(const root_type *const) const override=0
Definition ProjDataInfoCylindrical.cxx:322
float get_sampling_in_t(const Bin &) const override
Get sampling distance in the t coordinate.
Definition ProjDataInfoCylindrical.inl:102
float get_tantheta(const Bin &) const override
Get tangent of the co-polar angle of the normal to the projection plane.
Definition ProjDataInfoCylindrical.inl:85
virtual float get_azimuthal_angle_sampling() const
Get the azimuthal sampling (in radians)
Definition ProjDataInfoCylindrical.inl:120
void set_tof_mash_factor(const int new_num) override
The tof mashing factor (for TOF scanners).
Definition ProjDataInfoCylindrical.cxx:465
virtual void set_azimuthal_angle_offset(const float angle)
Set azimuthal angle offset (in radians)
Definition ProjDataInfoCylindrical.cxx:360
float get_t(const Bin &) const override
Get value of the (roughly) axial coordinate in the projection plane (in mm)
Definition ProjDataInfoCylindrical.inl:79
ProjDataInfoCylindrical()
Constructors.
Definition ProjDataInfoCylindrical.cxx:53
void set_num_views(const int new_num_views) override
set new number of views, covering the same azimuthal angle range
Definition ProjDataInfoCylindrical.cxx:377
virtual void set_azimuthal_angle_sampling(const float angle)
Set the azimuthal sampling (in radians)
Definition ProjDataInfoCylindrical.cxx:366
virtual bool axial_sampling_is_uniform() const
Return if axial sampling makes sense.
Definition ProjDataInfoCylindrical.h:150
virtual float get_axial_sampling(int segment_num) const
Get the axial sampling (e.g in z_direction)
Definition ProjDataInfoCylindrical.inl:126
float get_sampling_in_m(const Bin &) const override
Get sampling distance in the m coordinate.
Definition ProjDataInfoCylindrical.inl:96
float get_m(const Bin &) const override
Return z-coordinate of the middle of the LOR.
Definition ProjDataInfoCylindrical.inl:71
bool sampling_corresponds_to_physical_rings
a variable that is set if the data corresponds to physical rings in the scanner
Definition ProjDataInfoCylindrical.h:275
ProjDataInfo()
Construct an empty object.
Definition ProjDataInfo.cxx:274
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
double angle(const BasicCoordinate< num_dimensions, coordT > &p1, const BasicCoordinate< num_dimensions, coordT > &p2)
compute angle between 2 directions
Definition BasicCoordinate.inl:440