STIR 6.4.0
DataSymmetriesForDensels_PET_CartesianGrid.h
Go to the documentation of this file.
1//
2//
3/*
4 Copyright (C) 2001- 2011, Hammersmith Imanet Ltd
5 This file is part of STIR.
6
7 SPDX-License-Identifier: Apache-2.0
8
9 See STIR/LICENSE.txt for details
10*/
21#ifndef __stir_recon_buildblock_DataSymmetriesForDensels_PET_CartesianGrid_H__
22#define __stir_recon_buildblock_DataSymmetriesForDensels_PET_CartesianGrid_H__
23
25#include "stir/ProjDataInfo.h"
26//#include "stir/SymmetryOperations_PET_CartesianGrid.h"
27//#include "stir/ViewSegmentNumbers.h"
28//#include "stir/VoxelsOnCartesianGrid.h"
29#include "stir/Densel.h"
30#include "stir/shared_ptr.h"
31#include <vector>
32
33START_NAMESPACE_STIR
34
35template <int num_dimensions, typename elemT>
36class DiscretisedDensity;
37template <int num_dimensions, typename elemT>
38class DiscretisedDensityOnCartesianGrid;
39
48class DataSymmetriesForDensels_PET_CartesianGrid : public DataSymmetriesForDensels
49{
50private:
51 typedef DataSymmetriesForDensels base_type;
53
54public:
55 DataSymmetriesForDensels_PET_CartesianGrid(const shared_ptr<const ProjDataInfo>& proj_data_info_ptr,
56 const shared_ptr<const DiscretisedDensity<3, float>>& image_info_ptr);
57
58 DataSymmetriesForDensels_PET_CartesianGrid* clone() const override;
59
60 bool operator==(const DataSymmetriesForDensels_PET_CartesianGrid&) const;
61
62#if 0
63 TODO!
65 virtual DenselIndexRange
66 get_basic_densel_index_range() const;
67#endif
68
69 inline void get_related_densels(std::vector<Densel>&, const Densel& b) const override;
70
71 inline int num_related_densels(const Densel& b) const override;
72
73 inline unique_ptr<SymmetryOperation> find_symmetry_operation_from_basic_densel(Densel&) const override;
74
75 inline bool find_basic_densel(Densel& b) const override;
76
78 inline float get_num_planes_per_scanner_ring() const;
79
81
86 inline float get_num_planes_per_axial_pos(const int segment_num) const;
87 inline float get_axial_pos_to_z_offset(const int segment_num) const;
88
89private:
90 const shared_ptr<const ProjDataInfo>& proj_data_info_ptr;
91 int num_planes;
92 int num_independent_planes;
93 int num_views;
94 int num_planes_per_scanner_ring;
96 VectorWithOffset<int> num_planes_per_axial_pos;
98 VectorWithOffset<float> axial_pos_to_z_offset;
99
100#if 0
101 // at the moment, we don't need the following 2 members
102
103 // TODO somehow store only the info
104 shared_ptr<const DiscretisedDensity<3,float> > image_info_ptr;
105
106 // a convenience function that does the dynamic_cast from the above
108 cartesian_grid_info_ptr() const;
109#endif
110
111 bool blindly_equals(const root_type* const) const override;
112
113 inline SymmetryOperation* find_sym_op_general_densel(const int z, const int y, const int x) const;
114};
115
116END_NAMESPACE_STIR
117
119
120#endif
Declaration of class stir::DataSymmetriesForDensels.
inline implementations for class DataSymmetriesForDensels_PET_CartesianGrid
Declaration of typedef stir::Densel.
Declaration of class stir::ProjDataInfo.
unique_ptr< SymmetryOperation > find_symmetry_operation_from_basic_densel(Densel &) const override
given an arbitrary Densel 'b', find the basic Densel
Definition DataSymmetriesForDensels_PET_CartesianGrid.inl:112
DataSymmetriesForDensels_PET_CartesianGrid(const shared_ptr< const ProjDataInfo > &proj_data_info_ptr, const shared_ptr< const DiscretisedDensity< 3, float > > &image_info_ptr)
Definition DataSymmetriesForDensels_PET_CartesianGrid.cxx:106
float get_num_planes_per_axial_pos(const int segment_num) const
find correspondence between axial_pos_num and image coordinates
Definition DataSymmetriesForDensels_PET_CartesianGrid.inl:34
bool find_basic_densel(Densel &b) const override
given an arbitrary Densel 'b', find the basic Densel
Definition DataSymmetriesForDensels_PET_CartesianGrid.inl:93
void get_related_densels(std::vector< Densel > &, const Densel &b) const override
fills in a vector with all the Densels that are related to 'b' (including itself)
Definition DataSymmetriesForDensels_PET_CartesianGrid.inl:143
int num_related_densels(const Densel &b) const override
returns the number of Densels related to 'b'
Definition DataSymmetriesForDensels_PET_CartesianGrid.inl:128
float get_num_planes_per_scanner_ring() const
find out how many image planes there are for every scanner ring
Definition DataSymmetriesForDensels_PET_CartesianGrid.inl:40
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
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
Coordinate3D< int > Densel
a typedef used for an element of a DiscretisedDensity
Definition Densel.h:36
Import of std::shared_ptr, std::dynamic_pointer_cast and std::static_pointer_cast into the stir names...