STIR 6.4.0
SegmentByView.h
Go to the documentation of this file.
1//
2//
3/*
4 Copyright (C) 2000 PARAPET partners
5 Copyright (C) 2000- 2007, Hammersmith Imanet Ltd
6 Copyright (C) 2023, University College London
7 This file is part of STIR.
8
9 SPDX-License-Identifier: Apache-2.0 AND License-ref-PARAPET-license
10
11 See STIR/LICENSE.txt for details
12*/
26#ifndef __stir_SegmentByView_H__
27#define __stir_SegmentByView_H__
28
29#include "stir/Segment.h"
30#include "stir/Array.h"
31#include "stir/Viewgram.h"
32
33START_NAMESPACE_STIR
34
35template <typename elemT>
36class SegmentBySinogram;
37template <typename elemT>
38class Sinogram;
39
49
50template <typename elemT>
51class SegmentByView : public Segment<elemT>, public Array<3, elemT>
52{
53private:
54 typedef SegmentByView<elemT> self_type;
55
56public:
58 typedef typename Segment<elemT>::StorageOrder StorageOrder;
59
61 SegmentByView(const Array<3, elemT>& v, const shared_ptr<const ProjDataInfo>& proj_data_info_sptr, const SegmentIndices&);
62
64 SegmentByView(const shared_ptr<const ProjDataInfo>& proj_data_info_sptr, const SegmentIndices&);
65
67
70 SegmentByView(const Array<3, elemT>& v,
71 const shared_ptr<const ProjDataInfo>& proj_data_info_ptr,
72 const int segment_num,
73 const int timing_pos_num = 0);
74
76
79 SegmentByView(const shared_ptr<const ProjDataInfo>& proj_data_info_ptr, const int segment_num, const int timing_pos_num = 0);
80
83
84 // TODO ? how to declare a conversion routine that works for any Segment ?
86 inline StorageOrder get_storage_order() const override;
87
88 using Segment<elemT>::get_sinogram;
89 using Segment<elemT>::get_viewgram;
91 Sinogram<elemT> get_sinogram(int axial_pos_num) const override;
93 inline Viewgram<elemT> get_viewgram(int view_num) const override;
95 inline void set_sinogram(const Sinogram<elemT>& s) override;
97 void set_sinogram(Sinogram<elemT> const& s, int axial_pos_num) override;
99 inline void set_viewgram(const Viewgram<elemT>& v) override;
100
102 void grow(const IndexRange<3>& range) override;
104 void resize(const IndexRange<3>& range) override;
105
106 bool operator==(const Segment<elemT>&) const override;
107
108private:
110
113 void check_state() const;
114};
115
116END_NAMESPACE_STIR
117
118#include "stir/SegmentByView.inl"
119
120#endif
defines the stir::Array class for multi-dimensional (numeric) arrays
Implementations of inline functions of class stir::SegmentByView.
Declaration of class stir::Segment.
Declaration of class stir::Viewgram.
This class defines ranges which can be 'irregular'.
Definition IndexRange.h:69
A class for storing (3d) projection data with fixed SegmentIndices.
Definition SegmentBySinogram.h:51
SegmentByView(const Array< 3, elemT > &v, const shared_ptr< const ProjDataInfo > &proj_data_info_ptr, const int segment_num, const int timing_pos_num=0)
Constructor that sets the data to a given 3d Array.
Definition SegmentByView.cxx:54
StorageOrder get_storage_order() const override
Get storage order.
Definition SegmentByView.inl:31
SegmentByView(const SegmentBySinogram< elemT > &)
Conversion from 1 storage order to the other.
Definition SegmentByView.cxx:67
void set_viewgram(const Viewgram< elemT > &v) override
Set viewgram.
Definition SegmentByView.inl:56
Segment< elem_type >::StorageOrder StorageOrder
Definition SegmentByView.h:58
SegmentByView(const shared_ptr< const ProjDataInfo > &proj_data_info_ptr, const int segment_num, const int timing_pos_num=0)
Constructor that sets sizes via the ProjDataInfo object, initialising data to 0.
Definition SegmentByView.cxx:62
void set_sinogram(const Sinogram< elemT > &s) override
Set sinogram.
Definition SegmentByView.inl:49
Viewgram< elem_type > get_viewgram(int view_num) const override
void resize(const IndexRange< 3 > &range) override
Overloading Array::resize.
Definition SegmentByView.cxx:126
SegmentByView(const shared_ptr< const ProjDataInfo > &proj_data_info_sptr, const SegmentIndices &)
Constructor that sets sizes via the ProjDataInfo object, initialising data to 0.
Definition SegmentByView.cxx:43
Sinogram< elem_type > get_sinogram(int axial_pos_num) const override
void set_sinogram(Sinogram< elemT > const &s, int axial_pos_num) override
Set sinogram.
Definition SegmentByView.cxx:114
SegmentByView(const Array< 3, elemT > &v, const shared_ptr< const ProjDataInfo > &proj_data_info_sptr, const SegmentIndices &)
Constructor that sets the data to a given 3d Array.
Definition SegmentByView.cxx:33
void grow(const IndexRange< 3 > &range) override
Overloading Array::grow.
Definition SegmentByView.cxx:160
A very simple class to store segment numbers and any other indices that define a segment.
Definition SegmentIndices.h:34
A class for 2d projection data.
Definition Sinogram.h:47
A class for 2d projection data.
Definition Viewgram.h:49