23 #ifndef __stir_recon_buildblock_DataSymmetriesForBins_PET_CartesianGrid_H__ 24 #define __stir_recon_buildblock_DataSymmetriesForBins_PET_CartesianGrid_H__ 35 template <
int num_dimensions,
typename elemT>
36 class DiscretisedDensity;
37 template <
int num_dimensions,
typename elemT>
38 class DiscretisedDensityOnCartesianGrid;
39 class ProjDataInfoCylindrical;
86 const bool do_symmetry_90degrees_min_phi =
true,
87 const bool do_symmetry_180degrees_min_phi =
true,
88 const bool do_symmetry_swap_segment =
true,
89 const bool do_symmetry_swap_s =
true,
90 const bool do_symmetry_shift_z =
true);
92 #ifndef STIR_NO_COVARIANT_RETURN_TYPES 98 clone()
const override;
106 virtual BinIndexRange
107 get_basic_bin_index_range()
const;
110 inline void get_related_bins_factorised(std::vector<AxTangPosNumbers>&,
112 const int min_axial_pos_num,
113 const int max_axial_pos_num,
114 const int min_tangential_pos_num,
115 const int max_tangential_pos_num)
const override;
117 inline int num_related_bins(
const Bin& b)
const override;
119 inline unique_ptr<SymmetryOperation> find_symmetry_operation_from_basic_bin(
Bin&)
const override;
121 inline bool find_basic_bin(
Bin& b)
const override;
123 inline int num_related_view_segment_numbers(
const ViewSegmentNumbers& vs)
const override;
125 inline void get_related_view_segment_numbers(std::vector<ViewSegmentNumbers>& rel_vs,
131 inline float get_num_planes_per_scanner_ring()
const;
139 inline float get_num_planes_per_axial_pos(
const int segment_num)
const;
140 inline float get_axial_pos_to_z_offset(
const int segment_num)
const;
144 inline bool using_symmetry_90degrees_min_phi()
const 146 return do_symmetry_90degrees_min_phi;
148 inline bool using_symmetry_180degrees_min_phi()
const 150 return do_symmetry_180degrees_min_phi;
152 inline bool using_symmetry_swap_segment()
const 154 return do_symmetry_swap_segment;
156 inline bool using_symmetry_swap_s()
const 158 return do_symmetry_swap_s;
160 inline bool using_symmetry_shift_z()
const 162 return do_symmetry_shift_z;
167 bool do_symmetry_90degrees_min_phi;
168 bool do_symmetry_180degrees_min_phi;
169 bool do_symmetry_swap_segment;
170 bool do_symmetry_swap_s;
171 bool do_symmetry_shift_z;
174 int num_planes_per_scanner_ring;
188 shared_ptr<constDiscretisedDensity<3,float> > image_info_ptr;
192 cartesian_grid_info_ptr()
const;
195 bool blindly_equals(
const root_type*
const)
const override;
198 find_basic_bin(
int& segment_num,
int& view_num,
int& axial_pos_num,
int& tangential_pos_num,
int& timing_pos_num)
const;
200 inline int find_transform_z(
const int segment_num,
const int axial_pos_num)
const;
202 inline SymmetryOperation* find_sym_op_general_bin(
int s,
int seg,
int view_num,
int axial_pos_num)
const;
204 inline SymmetryOperation* find_sym_op_bin0(
int seg,
int view_num,
int axial_pos_num)
const;
Declaration of class stir::DataSymmetriesForBins.
A class for encoding/finding symmetries common to the geometry of the projection data and the discret...
Definition: DataSymmetriesForBins.h:67
Encodes symmetry operation on image coordinates and projection data coordinates.
Definition: SymmetryOperation.h:61
This abstract class is the basis for images on a Cartesian grid.
Definition: DiscretisedDensityOnCartesianGrid.h:44
Import of std::shared_ptr, std::dynamic_pointer_cast and std::static_pointer_cast (or corresponding b...
Symmetries appropriate for a (cylindrical) PET scanner, and a discretised density on a Cartesian grid...
Definition: DataSymmetriesForBins_PET_CartesianGrid.h:49
A class for encoding/finding symmetries. Works only on ViewSegmentNumbers (instead of Bin)...
Definition: DataSymmetriesForViewSegmentNumbers.h:49
alias for ViewgramIndices
Definition: ViewSegmentNumbers.h:33
A class for storing coordinates and value of a single projection bin.
Definition: Bin.h:48
Declaration of class stir::Bin.
projection data info for data corresponding to a 'cylindrical' sampling.
Definition: ProjDataInfoCylindrical.h:48
inline implementations for class stir::DataSymmetriesForBins_PET_CartesianGrid