STIR 6.4.0
DataSymmetriesForBins_PET_CartesianGrid.h
Go to the documentation of this file.
1//
2//
14/*
15 Copyright (C) 2000 PARAPET partners
16 Copyright (C) 2000- 2011, Hammersmith Imanet Ltd
17 This file is part of STIR.
18
19 SPDX-License-Identifier: Apache-2.0 AND License-ref-PARAPET-license
20
21 See STIR/LICENSE.txt for details
22*/
23#ifndef __stir_recon_buildblock_DataSymmetriesForBins_PET_CartesianGrid_H__
24#define __stir_recon_buildblock_DataSymmetriesForBins_PET_CartesianGrid_H__
25
27//#include "stir/SymmetryOperations_PET_CartesianGrid.h"
28//#include "stir/ViewSegmentNumbers.h"
29//#include "stir/VoxelsOnCartesianGrid.h"
30#include "stir/Bin.h"
31#include "stir/shared_ptr.h"
32
33START_NAMESPACE_STIR
34
35template <int num_dimensions, typename elemT>
36class DiscretisedDensity;
37template <int num_dimensions, typename elemT>
38class DiscretisedDensityOnCartesianGrid;
39class ProjDataInfoCylindrical;
40
49class DataSymmetriesForBins_PET_CartesianGrid : public DataSymmetriesForBins
50{
51private:
52 typedef DataSymmetriesForBins base_type;
54
55public:
57
84 DataSymmetriesForBins_PET_CartesianGrid(const shared_ptr<const ProjDataInfo>& proj_data_info_ptr,
85 const shared_ptr<const DiscretisedDensity<3, float>>& image_info_ptr,
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);
91
92 DataSymmetriesForBins_PET_CartesianGrid* clone() const override;
93
95 virtual bool operator==(const DataSymmetriesForBins_PET_CartesianGrid&) const;
96
97#if 0
98 TODO!
100 virtual BinIndexRange
101 get_basic_bin_index_range() const;
102#endif
103
104 inline void get_related_bins_factorised(std::vector<AxTangPosNumbers>&,
105 const Bin& b,
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;
110
111 inline int num_related_bins(const Bin& b) const override;
112
113 inline unique_ptr<SymmetryOperation> find_symmetry_operation_from_basic_bin(Bin&) const override;
114
115 inline bool find_basic_bin(Bin& b) const override;
116
117 inline int num_related_view_segment_numbers(const ViewSegmentNumbers& vs) const override;
118
119 inline void get_related_view_segment_numbers(std::vector<ViewSegmentNumbers>& rel_vs,
120 const ViewSegmentNumbers& vs) const override;
121
122 inline bool find_basic_view_segment_numbers(ViewSegmentNumbers& v_s) const override;
123
125 inline float get_num_planes_per_scanner_ring() const;
126
128
133 inline float get_num_planes_per_axial_pos(const int segment_num) const;
134 inline float get_axial_pos_to_z_offset(const int segment_num) const;
135
137
138 inline bool using_symmetry_90degrees_min_phi() const
139 {
140 return do_symmetry_90degrees_min_phi;
141 }
142 inline bool using_symmetry_180degrees_min_phi() const
143 {
144 return do_symmetry_180degrees_min_phi;
145 }
146 inline bool using_symmetry_swap_segment() const
147 {
148 return do_symmetry_swap_segment;
149 }
150 inline bool using_symmetry_swap_s() const
151 {
152 return do_symmetry_swap_s;
153 }
154 inline bool using_symmetry_shift_z() const
155 {
156 return do_symmetry_shift_z;
157 }
159
160private:
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;
166 // const shared_ptr<ProjDataInfo>& proj_data_info_ptr;
167 int num_views;
168 int num_planes_per_scanner_ring;
170 VectorWithOffset<int> num_planes_per_axial_pos;
172 VectorWithOffset<float> axial_pos_to_z_offset;
175
176 void initialise_deltas(const ProjDataInfoCylindrical*);
177
178#if 0
179 // at the moment, we don't need the following 2 members
180
181 // TODO somehow store only the info
182 shared_ptr<constDiscretisedDensity<3,float> > image_info_ptr;
183
184 // a convenience function that does the dynamic_cast from the above
186 cartesian_grid_info_ptr() const;
187#endif
188
189 bool blindly_equals(const root_type* const) const override;
190
191 inline bool
192 find_basic_bin(int& segment_num, int& view_num, int& axial_pos_num, int& tangential_pos_num, int& timing_pos_num) const;
193
194 inline int find_transform_z(const int segment_num, const int axial_pos_num) const;
195
196 inline SymmetryOperation* find_sym_op_general_bin(int s, int seg, int view_num, int axial_pos_num) const;
197
198 inline SymmetryOperation* find_sym_op_bin0(int seg, int view_num, int axial_pos_num) const;
199};
200
201END_NAMESPACE_STIR
202
204
205#endif
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...