27 #ifndef __stir_ProjDataInfo_H__ 28 #define __stir_ProjDataInfo_H__ 42 template <
typename elemT>
44 template <
typename elemT>
46 template <
typename elemT>
48 template <
typename elemT>
49 class SegmentBySinogram;
50 template <
typename elemT>
51 class RelatedViewgrams;
52 class DataSymmetriesForViewSegmentNumbers;
53 class ViewSegmentNumbers;
58 class LORInAxialAndNoArcCorrSinogramCoordinates;
86 static ProjDataInfo* ProjDataInfoGE(
const shared_ptr<Scanner>& scanner_ptr,
89 const int num_tangential_poss,
90 const bool arc_corrected =
true,
91 const int tof_mash_factor = 0);
96 static ProjDataInfo* ProjDataInfoCTI(
const shared_ptr<Scanner>& scanner_ptr,
100 const int num_tangential_poss,
101 const bool arc_corrected =
true,
102 const int tof_mash_factor = 0);
114 static unique_ptr<ProjDataInfo> construct_proj_data_info(
const shared_ptr<Scanner>& scanner_sptr,
118 const int num_tangential_poss,
119 const bool arc_corrected =
true,
120 const int tof_mash_factor = 0);
136 const int num_tangential_poss);
142 const int num_tangential_poss,
143 const int tof_mash_factor);
149 inline shared_ptr<ProjDataInfo> create_shared_clone()
const;
152 inline shared_ptr<ProjDataInfo> create_non_tof_clone()
const;
170 virtual void reduce_segment_range(
const int min_segment_num,
const int max_segment_num);
174 virtual void set_num_views(
const int num_views);
178 virtual void set_num_tangential_poss(
const int num_tang_poss);
187 virtual void set_num_axial_poss_per_segment(
const VectorWithOffset<int>& num_axial_poss_per_segment);
191 virtual void set_min_axial_pos_num(
const int min_ax_pos_num,
const int segment_num);
194 virtual void set_max_axial_pos_num(
const int max_ax_pos_num,
const int segment_num);
198 virtual void set_min_tangential_pos_num(
const int min_tang_poss);
201 virtual void set_max_tangential_pos_num(
const int max_tang_poss);
207 virtual void set_tof_mash_factor(
const int new_num);
212 inline int get_num_segments()
const;
215 inline int get_num_axial_poss(
const int segment_num)
const;
217 inline int get_num_views()
const;
219 inline int get_num_tangential_poss()
const;
221 inline int get_tof_bin(
const double delta)
const;
225 inline int get_unmashed_tof_bin(
const double delta)
const;
227 inline int get_num_tof_poss()
const;
230 inline int get_min_segment_num()
const;
232 inline int get_max_segment_num()
const;
234 inline int get_min_axial_pos_num(
const int segment_num)
const;
236 inline int get_max_axial_pos_num(
const int segment_num)
const;
238 inline int get_min_view_num()
const;
240 inline int get_max_view_num()
const;
242 inline int get_min_tangential_pos_num()
const;
244 inline int get_max_tangential_pos_num()
const;
248 inline int get_tof_mash_factor()
const;
250 inline int get_min_tof_pos_num()
const;
252 inline int get_max_tof_pos_num()
const;
258 inline int get_num_sinograms()
const;
263 inline int get_num_non_tof_sinograms()
const;
265 inline std::size_t size_all()
const;
269 inline bool is_tof_data()
const;
278 virtual std::vector<int> get_original_view_nums()
const;
284 virtual float get_tantheta(
const Bin&)
const = 0;
288 inline float get_costheta(
const Bin&)
const;
292 virtual float get_phi(
const Bin&)
const = 0;
297 virtual float get_t(
const Bin&)
const = 0;
312 virtual inline float get_m(
const Bin&)
const;
317 virtual float get_s(
const Bin&)
const = 0;
321 float get_k(
const Bin&)
const;
324 double get_tof_delta_time(
const Bin&)
const;
344 virtual float get_sampling_in_t(
const Bin&)
const;
353 virtual float get_sampling_in_m(
const Bin&)
const;
362 virtual float get_sampling_in_s(
const Bin&)
const;
365 float get_sampling_in_k(
const Bin&)
const;
382 virtual Bin get_bin(
const LOR<float>&,
const double delta_time = 0.0)
const = 0;
392 virtual bool operator>=(
const ProjDataInfo& proj)
const;
411 const int segment_num,
412 const bool make_num_tangential_poss_odd =
false,
413 const int timing_pos_num = 0)
const;
418 const int segment_num,
419 const bool make_num_tangential_poss_odd =
false,
420 const int timing_pos_num = 0)
const;
425 const bool make_num_tangential_poss_odd =
false,
426 const int timing_pos_num = 0)
const;
430 const bool make_num_tangential_poss_odd =
false,
431 const int timing_pos_num = 0)
const;
437 const shared_ptr<DataSymmetriesForViewSegmentNumbers>&,
438 const bool make_num_tangential_poss_odd =
false,
439 const int timing_pos_num = 0)
const;
443 inline const Scanner* get_scanner_ptr()
const;
446 inline shared_ptr<Scanner> get_scanner_sptr()
const;
449 virtual std::string parameter_info()
const;
473 bed_position_horizontal = bed_position_horizontal_arg;
479 return bed_position_horizontal;
485 bed_position_vertical = bed_position_vertical_arg;
491 return bed_position_vertical;
494 inline bool has_energy_information()
const 496 return scanner_ptr->has_energy_information();
500 virtual bool blindly_equals(
const root_type*
const)
const = 0;
503 shared_ptr<Scanner> scanner_ptr;
506 int min_tangential_pos_num;
507 int max_tangential_pos_num;
513 int min_unmashed_tof_pos_num;
516 int max_unmashed_tof_pos_num;
521 float tof_increament_in_mm;
526 float bed_position_horizontal;
527 float bed_position_vertical;
534 #endif // __ProjDataInfo_H__ A class for 2d projection data.
Definition: FBP3DRPReconstruction.h:39
A very simple class to store segment numbers and any other indices that define a segment.
Definition: SegmentIndices.h:33
Definition of class stir::SegmentIndices.
A class for storing (3d) projection data with fixed SegmentIndices.
Definition: FBP3DRPReconstruction.h:41
Implementations of inline functions for class stir::ProjDataInfo.
VectorWithOffset< Float1Float2 > tof_bin_boundaries_ps
Vector which holds the lower and higher boundary for each TOF position in ps`, for faster access...
Definition: ProjDataInfo.h:461
virtual ~ProjDataInfo()
Destructor.
Definition: ProjDataInfo.h:155
Definition of class stir::SinogramIndices.
Import of std::shared_ptr, std::dynamic_pointer_cast and std::static_pointer_cast (or corresponding b...
A class for storing (3d) projection data with fixed SegmentIndices.
Definition: ArcCorrection.h:40
A class for storing some info on the scanner.
Definition: Scanner.h:107
Struct which holds two floating numbers.
Definition: ProjDataInfo.h:452
Declaration of class stir::Scanner.
void set_bed_position_vertical(const float bed_position_vertical_arg)
Set vertical bed position.
Definition: ProjDataInfo.h:483
VectorWithOffset< Float1Float2 > tof_bin_boundaries_mm
Vector which holds the lower and higher boundary for each TOF position in mm, for faster access...
Definition: ProjDataInfo.h:459
Definition of class stir::ViewgramIndices.
A class for storing coordinates and value of a single projection bin.
Definition: Bin.h:48
defines the stir::VectorWithOffset class
A class for LORs.
Definition: LORCoordinates.h:40
void set_bed_position_horizontal(const float bed_position_horizontal_arg)
Vector which holds the lower and higher boundary for each TOF position, without the application of TO...
Definition: ProjDataInfo.h:471
float get_bed_position_horizontal() const
Get horizontal bed position.
Definition: ProjDataInfo.h:477
A very simple class to store all dincies to get a (2D) Sinogram.
Definition: SinogramIndices.h:33
float get_bed_position_vertical() const
Get vertical bed position.
Definition: ProjDataInfo.h:489
Import of std::unique_ptr into the stir namespace, together with work-arounds for other compilers...
An (abstract base) class that contains information on the projection data.
Definition: ProjDataInfo.h:69
A very simple class to store all dincies to get a (2D) Viewgram.
Definition: ViewgramIndices.h:32