STIR  6.2.0
ProjDataInfoGeneric.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2011, University College London
3  Copyright 2017 ETH Zurich, Institute of Particle Physics and Astrophysics
4  This file is part of STIR.
5 
6  SPDX-License-Identifier: Apache-2.0
7 
8  See STIR/LICENSE.txt for details
9 */
20 #ifndef __stir_ProjDataInfoGeneric_H__
21 #define __stir_ProjDataInfoGeneric_H__
22 
24 
25 START_NAMESPACE_STIR
26 
27 class Succeeded;
28 template <typename coordT>
29 class CartesianCoordinate3D;
30 
51 {
52 private:
53  typedef ProjDataInfo base_type;
55 
56 public:
58  typedef std::vector<std::pair<int, int>> RingNumPairs;
59 
63 
71  const shared_ptr<Scanner>& scanner_ptr,
72  const VectorWithOffset<int>& num_axial_poss_per_segment, // index ranges from min_segment_num to max_segment_num
73  const VectorWithOffset<int>& min_ring_diff,
74  const VectorWithOffset<int>& max_ring_diff,
75  const int num_views,
76  const int num_tangential_poss);
77 
78  inline float get_tantheta(const Bin&) const override;
79 
80  inline float get_phi(const Bin&) const override;
81 
82  inline float get_t(const Bin&) const override;
83 
85 
88  inline float get_m(const Bin&) const override;
89 
90  void get_LOR(LORInAxialAndNoArcCorrSinogramCoordinates<float>& lor, const Bin& bin) const override;
91 
92  void set_azimuthal_angle_offset(const float angle) = delete;
93  void set_azimuthal_angle_sampling(const float angle) = delete;
94 
96  void set_num_views(const int new_num_views) override;
97 
98  float get_azimuthal_angle_sampling() const = delete;
99  float get_azimuthal_angle_offset() const = delete;
100  float get_ring_radius() const = delete;
101  void set_ring_radii_for_all_views(const VectorWithOffset<float>& new_ring_radius) = delete;
102  VectorWithOffset<float> get_ring_radii_for_all_views() const = delete;
103 
105  // TODOBLOCK what does this mean in a generic case?
106  inline float get_ring_spacing() const;
107 
108  inline float get_sampling_in_t(const Bin&) const override;
109  inline float get_sampling_in_m(const Bin&) const override;
110 
111  inline float get_axial_sampling(int segment_num) const override;
112  inline bool axial_sampling_is_uniform() const override;
113 
114  std::string parameter_info() const override;
115 
116 private:
118  virtual void find_cartesian_coordinates_of_detection(CartesianCoordinate3D<float>& coord_1,
120  const Bin& bin) const = 0;
121 
122 protected:
124 };
125 
126 END_NAMESPACE_STIR
127 
129 
130 #endif
std::vector< std::pair< int, int > > RingNumPairs
Type used by get_all_ring_pairs_for_segment_axial_pos_num()
Definition: ProjDataInfoGeneric.h:58
Implementation of inline functions of class stir::ProjDataInfoGeneric.
double angle(const BasicCoordinate< num_dimensions, coordT > &p1, const BasicCoordinate< num_dimensions, coordT > &p2)
compute angle between 2 directions
Definition: BasicCoordinate.inl:440
Declaration of class stir::ProjDataInfoCylindrical.
projection data info for data corresponding to &#39;Generic&#39; sampling.
Definition: ProjDataInfoGeneric.h:50
A class for storing coordinates and value of a single projection bin.
Definition: Bin.h:48
A class for LORs.
Definition: LORCoordinates.h:40
projection data info for data corresponding to a &#39;cylindrical&#39; sampling.
Definition: ProjDataInfoCylindrical.h:48
An (abstract base) class that contains information on the projection data.
Definition: ProjDataInfo.h:69