41 #ifndef __SymmetryOperations_PET_CartesianGrid_H__ 42 #define __SymmetryOperations_PET_CartesianGrid_H__ 48 class SymmetryOperation_PET_CartesianGrid_z_shift :
public SymmetryOperation
51 typedef SymmetryOperation_PET_CartesianGrid_z_shift
self;
54 SymmetryOperation_PET_CartesianGrid_z_shift(
const int axial_pos_shift,
const int z_shift)
55 : axial_pos_shift(axial_pos_shift),
59 inline void transform_bin_coordinates(Bin&)
const override;
60 inline void transform_view_segment_indices(ViewSegmentNumbers&)
const override;
61 inline void transform_image_coordinates(BasicCoordinate<3, int>& c)
const override;
63 void transform_proj_matrix_elems_for_one_bin(ProjMatrixElemsForOneBin& lor)
const override;
65 void transform_proj_matrix_elems_for_one_densel(ProjMatrixElemsForOneDensel&)
const override;
72 class SymmetryOperation_PET_CartesianGrid_swap_xmx_zq :
public SymmetryOperation
75 typedef SymmetryOperation_PET_CartesianGrid_swap_xmx_zq
self;
78 SymmetryOperation_PET_CartesianGrid_swap_xmx_zq(
const int num_views,
const int axial_pos_shift,
const int z_shift,
const int q)
80 axial_pos_shift(axial_pos_shift),
85 inline void transform_bin_coordinates(Bin&)
const override;
86 inline void transform_view_segment_indices(ViewSegmentNumbers&)
const override;
87 inline void transform_image_coordinates(BasicCoordinate<3, int>& c)
const override;
89 void transform_proj_matrix_elems_for_one_bin(ProjMatrixElemsForOneBin& lor)
const override;
91 void transform_proj_matrix_elems_for_one_densel(ProjMatrixElemsForOneDensel&)
const override;
102 class SymmetryOperation_PET_CartesianGrid_swap_xmy_yx_zq :
public SymmetryOperation
105 typedef SymmetryOperation_PET_CartesianGrid_swap_xmy_yx_zq
self;
108 SymmetryOperation_PET_CartesianGrid_swap_xmy_yx_zq(
const int num_views,
109 const int axial_pos_shift,
112 : view180(num_views),
113 axial_pos_shift(axial_pos_shift),
118 inline void transform_bin_coordinates(Bin&)
const override;
119 inline void transform_view_segment_indices(ViewSegmentNumbers&)
const override;
120 inline void transform_image_coordinates(BasicCoordinate<3, int>& c)
const override;
122 void transform_proj_matrix_elems_for_one_bin(ProjMatrixElemsForOneBin& lor)
const override;
124 void transform_proj_matrix_elems_for_one_densel(ProjMatrixElemsForOneDensel&)
const override;
133 class SymmetryOperation_PET_CartesianGrid_swap_xy_yx_zq :
public SymmetryOperation
136 typedef SymmetryOperation_PET_CartesianGrid_swap_xy_yx_zq
self;
139 SymmetryOperation_PET_CartesianGrid_swap_xy_yx_zq(
const int num_views,
140 const int axial_pos_shift,
143 : view180(num_views),
144 axial_pos_shift(axial_pos_shift),
149 inline void transform_bin_coordinates(Bin&)
const override;
150 inline void transform_view_segment_indices(ViewSegmentNumbers&)
const override;
151 inline void transform_image_coordinates(BasicCoordinate<3, int>& c)
const override;
153 void transform_proj_matrix_elems_for_one_bin(ProjMatrixElemsForOneBin& lor)
const override;
155 void transform_proj_matrix_elems_for_one_densel(ProjMatrixElemsForOneDensel&)
const override;
164 class SymmetryOperation_PET_CartesianGrid_swap_xmy_yx :
public SymmetryOperation
167 typedef SymmetryOperation_PET_CartesianGrid_swap_xmy_yx
self;
170 SymmetryOperation_PET_CartesianGrid_swap_xmy_yx(
const int num_views,
const int axial_pos_shift,
const int z_shift)
171 : view180(num_views),
172 axial_pos_shift(axial_pos_shift),
176 inline void transform_bin_coordinates(Bin&)
const override;
177 inline void transform_view_segment_indices(ViewSegmentNumbers&)
const override;
178 inline void transform_image_coordinates(BasicCoordinate<3, int>& c)
const override;
180 void transform_proj_matrix_elems_for_one_bin(ProjMatrixElemsForOneBin& lor)
const override;
182 void transform_proj_matrix_elems_for_one_densel(ProjMatrixElemsForOneDensel&)
const override;
190 class SymmetryOperation_PET_CartesianGrid_swap_xy_yx :
public SymmetryOperation
193 typedef SymmetryOperation_PET_CartesianGrid_swap_xy_yx
self;
196 SymmetryOperation_PET_CartesianGrid_swap_xy_yx(
const int num_views,
const int axial_pos_shift,
const int z_shift)
197 : view180(num_views),
198 axial_pos_shift(axial_pos_shift),
202 inline void transform_bin_coordinates(Bin&)
const override;
203 inline void transform_view_segment_indices(ViewSegmentNumbers&)
const override;
204 inline void transform_image_coordinates(BasicCoordinate<3, int>& c)
const override;
206 void transform_proj_matrix_elems_for_one_bin(ProjMatrixElemsForOneBin& lor)
const override;
208 void transform_proj_matrix_elems_for_one_densel(ProjMatrixElemsForOneDensel&)
const override;
216 class SymmetryOperation_PET_CartesianGrid_swap_xmx :
public SymmetryOperation
219 typedef SymmetryOperation_PET_CartesianGrid_swap_xmx
self;
222 SymmetryOperation_PET_CartesianGrid_swap_xmx(
const int num_views,
const int axial_pos_shift,
const int z_shift)
223 : view180(num_views),
224 axial_pos_shift(axial_pos_shift),
228 inline void transform_bin_coordinates(Bin&)
const override;
229 inline void transform_view_segment_indices(ViewSegmentNumbers&)
const override;
230 inline void transform_image_coordinates(BasicCoordinate<3, int>& c)
const override;
232 void transform_proj_matrix_elems_for_one_bin(ProjMatrixElemsForOneBin& lor)
const override;
234 void transform_proj_matrix_elems_for_one_densel(ProjMatrixElemsForOneDensel&)
const override;
242 class SymmetryOperation_PET_CartesianGrid_swap_ymy :
public SymmetryOperation
245 typedef SymmetryOperation_PET_CartesianGrid_swap_ymy
self;
248 SymmetryOperation_PET_CartesianGrid_swap_ymy(
const int num_views,
const int axial_pos_shift,
const int z_shift)
249 : view180(num_views),
250 axial_pos_shift(axial_pos_shift),
254 inline void transform_bin_coordinates(Bin&)
const override;
255 inline void transform_view_segment_indices(ViewSegmentNumbers&)
const override;
256 inline void transform_image_coordinates(BasicCoordinate<3, int>& c)
const override;
258 void transform_proj_matrix_elems_for_one_bin(ProjMatrixElemsForOneBin& lor)
const override;
260 void transform_proj_matrix_elems_for_one_densel(ProjMatrixElemsForOneDensel&)
const override;
268 class SymmetryOperation_PET_CartesianGrid_swap_zq :
public SymmetryOperation
271 typedef SymmetryOperation_PET_CartesianGrid_swap_zq
self;
274 SymmetryOperation_PET_CartesianGrid_swap_zq(
const int num_views,
const int axial_pos_shift,
const int z_shift,
const int q)
275 : view180(num_views),
276 axial_pos_shift(axial_pos_shift),
281 inline void transform_bin_coordinates(Bin&)
const override;
282 inline void transform_view_segment_indices(ViewSegmentNumbers&)
const override;
283 inline void transform_image_coordinates(BasicCoordinate<3, int>& c)
const override;
285 void transform_proj_matrix_elems_for_one_bin(ProjMatrixElemsForOneBin& lor)
const override;
287 void transform_proj_matrix_elems_for_one_densel(ProjMatrixElemsForOneDensel&)
const override;
296 class SymmetryOperation_PET_CartesianGrid_swap_xmx_ymy_zq :
public SymmetryOperation
299 typedef SymmetryOperation_PET_CartesianGrid_swap_xmx_ymy_zq
self;
302 SymmetryOperation_PET_CartesianGrid_swap_xmx_ymy_zq(
const int num_views,
303 const int axial_pos_shift,
306 : view180(num_views),
307 axial_pos_shift(axial_pos_shift),
312 inline void transform_bin_coordinates(Bin&)
const override;
313 inline void transform_view_segment_indices(ViewSegmentNumbers&)
const override;
314 inline void transform_image_coordinates(BasicCoordinate<3, int>& c)
const override;
316 void transform_proj_matrix_elems_for_one_bin(ProjMatrixElemsForOneBin& lor)
const override;
318 void transform_proj_matrix_elems_for_one_densel(ProjMatrixElemsForOneDensel&)
const override;
327 class SymmetryOperation_PET_CartesianGrid_swap_xy_ymx_zq :
public SymmetryOperation
330 typedef SymmetryOperation_PET_CartesianGrid_swap_xy_ymx_zq
self;
333 SymmetryOperation_PET_CartesianGrid_swap_xy_ymx_zq(
const int num_views,
334 const int axial_pos_shift,
337 : view180(num_views),
338 axial_pos_shift(axial_pos_shift),
343 inline void transform_bin_coordinates(Bin&)
const override;
344 inline void transform_view_segment_indices(ViewSegmentNumbers&)
const override;
345 inline void transform_image_coordinates(BasicCoordinate<3, int>& c)
const override;
347 void transform_proj_matrix_elems_for_one_bin(ProjMatrixElemsForOneBin& lor)
const override;
349 void transform_proj_matrix_elems_for_one_densel(ProjMatrixElemsForOneDensel&)
const override;
358 class SymmetryOperation_PET_CartesianGrid_swap_xy_ymx :
public SymmetryOperation
361 typedef SymmetryOperation_PET_CartesianGrid_swap_xy_ymx
self;
364 SymmetryOperation_PET_CartesianGrid_swap_xy_ymx(
const int num_views,
const int axial_pos_shift,
const int z_shift)
365 : view180(num_views),
366 axial_pos_shift(axial_pos_shift),
370 inline void transform_bin_coordinates(Bin&)
const override;
371 inline void transform_view_segment_indices(ViewSegmentNumbers&)
const override;
372 inline void transform_image_coordinates(BasicCoordinate<3, int>& c)
const override;
374 void transform_proj_matrix_elems_for_one_bin(ProjMatrixElemsForOneBin& lor)
const override;
376 void transform_proj_matrix_elems_for_one_densel(ProjMatrixElemsForOneDensel&)
const override;
384 class SymmetryOperation_PET_CartesianGrid_swap_xmy_ymx :
public SymmetryOperation
387 typedef SymmetryOperation_PET_CartesianGrid_swap_xmy_ymx
self;
390 SymmetryOperation_PET_CartesianGrid_swap_xmy_ymx(
const int num_views,
const int axial_pos_shift,
const int z_shift)
391 : view180(num_views),
392 axial_pos_shift(axial_pos_shift),
396 inline void transform_bin_coordinates(Bin&)
const override;
397 inline void transform_view_segment_indices(ViewSegmentNumbers&)
const override;
398 inline void transform_image_coordinates(BasicCoordinate<3, int>& c)
const override;
400 void transform_proj_matrix_elems_for_one_bin(ProjMatrixElemsForOneBin& lor)
const override;
402 void transform_proj_matrix_elems_for_one_densel(ProjMatrixElemsForOneDensel&)
const override;
410 class SymmetryOperation_PET_CartesianGrid_swap_ymy_zq :
public SymmetryOperation
413 typedef SymmetryOperation_PET_CartesianGrid_swap_ymy_zq
self;
416 SymmetryOperation_PET_CartesianGrid_swap_ymy_zq(
const int num_views,
const int axial_pos_shift,
const int z_shift,
const int q)
417 : view180(num_views),
418 axial_pos_shift(axial_pos_shift),
423 inline void transform_bin_coordinates(Bin&)
const override;
424 inline void transform_view_segment_indices(ViewSegmentNumbers&)
const override;
425 inline void transform_image_coordinates(BasicCoordinate<3, int>& c)
const override;
427 void transform_proj_matrix_elems_for_one_bin(ProjMatrixElemsForOneBin& lor)
const override;
429 void transform_proj_matrix_elems_for_one_densel(ProjMatrixElemsForOneDensel&)
const override;
438 class SymmetryOperation_PET_CartesianGrid_swap_xmx_ymy :
public SymmetryOperation
441 typedef SymmetryOperation_PET_CartesianGrid_swap_xmx_ymy
self;
444 SymmetryOperation_PET_CartesianGrid_swap_xmx_ymy(
const int num_views,
const int axial_pos_shift,
const int z_shift)
445 : view180(num_views),
446 axial_pos_shift(axial_pos_shift),
450 inline void transform_bin_coordinates(Bin&)
const override;
451 inline void transform_view_segment_indices(ViewSegmentNumbers&)
const override;
452 inline void transform_image_coordinates(BasicCoordinate<3, int>& c)
const override;
454 void transform_proj_matrix_elems_for_one_bin(ProjMatrixElemsForOneBin& lor)
const override;
456 void transform_proj_matrix_elems_for_one_densel(ProjMatrixElemsForOneDensel&)
const override;
464 class SymmetryOperation_PET_CartesianGrid_swap_xmy_ymx_zq :
public SymmetryOperation
467 typedef SymmetryOperation_PET_CartesianGrid_swap_xmy_ymx_zq
self;
470 SymmetryOperation_PET_CartesianGrid_swap_xmy_ymx_zq(
const int num_views,
471 const int axial_pos_shift,
474 : view180(num_views),
475 axial_pos_shift(axial_pos_shift),
480 inline void transform_bin_coordinates(Bin&)
const override;
481 inline void transform_view_segment_indices(ViewSegmentNumbers&)
const override;
482 inline void transform_image_coordinates(BasicCoordinate<3, int>& c)
const override;
484 void transform_proj_matrix_elems_for_one_bin(ProjMatrixElemsForOneBin& lor)
const override;
486 void transform_proj_matrix_elems_for_one_densel(ProjMatrixElemsForOneDensel&)
const override;
Implementation of all symmetry classes for PET scanners and cartesian images.
Declaration of 2 classes: stir::SymmetryOperation and stir::TrivialSymmetryOperation.