23#ifndef __stir_recon_buildblock_DataSymmetriesForBins_PET_CartesianGrid_H__
24#define __stir_recon_buildblock_DataSymmetriesForBins_PET_CartesianGrid_H__
35template <
int num_dimensions,
typename elemT>
36class DiscretisedDensity;
37template <
int num_dimensions,
typename elemT>
38class DiscretisedDensityOnCartesianGrid;
39class ProjDataInfoCylindrical;
52 typedef DataSymmetriesForBins base_type;
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);
100 virtual BinIndexRange
101 get_basic_bin_index_range()
const;
106 const int min_axial_pos_num,
107 const int max_axial_pos_num,
108 const int min_tangential_pos_num,
109 const int max_tangential_pos_num)
const override;
134 inline float get_axial_pos_to_z_offset(
const int segment_num)
const;
138 inline bool using_symmetry_90degrees_min_phi()
const
140 return do_symmetry_90degrees_min_phi;
142 inline bool using_symmetry_180degrees_min_phi()
const
144 return do_symmetry_180degrees_min_phi;
146 inline bool using_symmetry_swap_segment()
const
148 return do_symmetry_swap_segment;
150 inline bool using_symmetry_swap_s()
const
152 return do_symmetry_swap_s;
154 inline bool using_symmetry_shift_z()
const
156 return do_symmetry_shift_z;
161 bool do_symmetry_90degrees_min_phi;
162 bool do_symmetry_180degrees_min_phi;
163 bool do_symmetry_swap_segment;
164 bool do_symmetry_swap_s;
165 bool do_symmetry_shift_z;
168 int num_planes_per_scanner_ring;
182 shared_ptr<constDiscretisedDensity<3,float> > image_info_ptr;
186 cartesian_grid_info_ptr()
const;
189 bool blindly_equals(
const root_type*
const)
const override;
192 find_basic_bin(
int& segment_num,
int& view_num,
int& axial_pos_num,
int& tangential_pos_num,
int& timing_pos_num)
const;
194 inline int find_transform_z(
const int segment_num,
const int axial_pos_num)
const;
196 inline SymmetryOperation* find_sym_op_general_bin(
int s,
int seg,
int view_num,
int axial_pos_num)
const;
198 inline SymmetryOperation* find_sym_op_bin0(
int seg,
int view_num,
int axial_pos_num)
const;
Declaration of class stir::Bin.
Declaration of class stir::DataSymmetriesForBins.
inline implementations for class stir::DataSymmetriesForBins_PET_CartesianGrid
A class for storing coordinates and value of a single projection bin.
Definition Bin.h:49
void get_related_bins_factorised(std::vector< AxTangPosNumbers > &, const Bin &b, const int min_axial_pos_num, const int max_axial_pos_num, const int min_tangential_pos_num, const int max_tangential_pos_num) const override
fills in a vector with the axial and tangential position numbers related to this bin
Definition DataSymmetriesForBins_PET_CartesianGrid.inl:740
float get_num_planes_per_axial_pos(const int segment_num) const
find correspondence between axial_pos_num and image coordinates
Definition DataSymmetriesForBins_PET_CartesianGrid.inl:49
float get_num_planes_per_scanner_ring() const
find out how many image planes there are for every scanner ring
Definition DataSymmetriesForBins_PET_CartesianGrid.inl:55
void get_related_view_segment_numbers(std::vector< ViewSegmentNumbers > &rel_vs, const ViewSegmentNumbers &vs) const override
fills in a vector with all the view/segments that are related to 'v_s' (including itself)
Definition DataSymmetriesForBins_PET_CartesianGrid.inl:801
int num_related_view_segment_numbers(const ViewSegmentNumbers &vs) const override
returns the number of view_segment_numbers related to 'v_s'
Definition DataSymmetriesForBins_PET_CartesianGrid.inl:677
bool find_basic_view_segment_numbers(ViewSegmentNumbers &v_s) const override
given an arbitrary view/segment, find the basic view/segment
Definition DataSymmetriesForBins_PET_CartesianGrid.inl:399
DataSymmetriesForBins_PET_CartesianGrid(const shared_ptr< const ProjDataInfo > &proj_data_info_ptr, const shared_ptr< const DiscretisedDensity< 3, float > > &image_info_ptr, const bool do_symmetry_90degrees_min_phi=true, const bool do_symmetry_180degrees_min_phi=true, const bool do_symmetry_swap_segment=true, const bool do_symmetry_swap_s=true, const bool do_symmetry_shift_z=true)
Constructor with optional selection of symmetries.
Definition DataSymmetriesForBins_PET_CartesianGrid.cxx:241
unique_ptr< SymmetryOperation > find_symmetry_operation_from_basic_bin(Bin &) const override
given an arbitrary bin 'b', find the basic bin and the corresponding symmetry operation
Definition DataSymmetriesForBins_PET_CartesianGrid.inl:666
virtual bool operator==(const DataSymmetriesForBins_PET_CartesianGrid &) const
Check equality.
Definition DataSymmetriesForBins_PET_CartesianGrid.cxx:488
bool find_basic_bin(Bin &b) const override
given an arbitrary bin 'b', find the basic bin
Definition DataSymmetriesForBins_PET_CartesianGrid.inl:659
int num_related_bins(const Bin &b) const override
returns the number of bins related to 'b'
Definition DataSymmetriesForBins_PET_CartesianGrid.inl:688
const shared_ptr< const ProjDataInfo > proj_data_info_ptr
Member storing the info needed by get_related_bins() et al.
Definition DataSymmetriesForBins.h:163
This abstract class is the basis for images on a Cartesian grid.
Definition DiscretisedDensityOnCartesianGrid.h:45
This abstract class is the basis for all image representations.
Definition DiscretisedDensity.h:99
projection data info for data corresponding to a 'cylindrical' sampling.
Definition ProjDataInfoCylindrical.h:49
Encodes symmetry operation on image coordinates and projection data coordinates.
Definition SymmetryOperation.h:62
A templated class for vectors, but with indices starting not from 0.
Definition VectorWithOffset.h:65
alias for ViewgramIndices
Definition ViewSegmentNumbers.h:34
Import of std::shared_ptr, std::dynamic_pointer_cast and std::static_pointer_cast into the stir names...