CTL  0.6.1
Computed Tomography Library
basetypeio.h
Go to the documentation of this file.
1 #ifndef CTL_BASETYPEIO_H
2 #define CTL_BASETYPEIO_H
3 
4 #include "abstractbasetypeio.h"
5 #include <memory>
6 
7 namespace CTL {
8 namespace io {
9 
66 // generalized version (preferred)
67 template <class FileIOImplementer>
69 {
70 public:
71  // ### READING ###
72  // meta info
73  QVariantMap metaInfo(const QString& fileName) const;
74 
75  // volume data
76  template <typename T>
77  VoxelVolume<T> readVolume(const QString& fileName) const;
78  template <typename T>
79  Chunk2D<T> readSlice(const QString& fileName, uint sliceNb) const;
80 
81  // projection data
82  ProjectionData readProjections(const QString& fileName, uint nbModules = 0) const;
83  SingleViewData readSingleView(const QString& fileName, uint viewNb, uint nbModules = 0) const;
84 
85  // projection matrices
86  FullGeometry readFullGeometry(const QString& fileName, uint nbModules = 0) const;
87  SingleViewGeometry readSingleViewGeometry(const QString& fileName, uint viewNb, uint nbModules = 0) const;
88 
89  // ### WRITING ###
90  template <typename T>
91  bool write(const Chunk2D<T>& data, const QString& fileName,
92  QVariantMap supplementaryMetaInfo = {}) const;
93  template <typename T>
94  bool write(const VoxelVolume<T>& data, const QString& fileName,
95  QVariantMap supplementaryMetaInfo = {}) const;
96  bool write(const SingleViewData& data, const QString& fileName,
97  QVariantMap supplementaryMetaInfo = {}) const;
98  bool write(const ProjectionData& data, const QString& fileName,
99  QVariantMap supplementaryMetaInfo = {}) const;
100  bool write(const SingleViewGeometry& data, const QString& fileName,
101  QVariantMap supplementaryMetaInfo = {}) const;
102  bool write(const FullGeometry& data, const QString& fileName,
103  QVariantMap supplementaryMetaInfo = {}) const;
104 
105  // ### IMPLEMENTATION OF ABSTRACT TYPES ###
107  {
108  public: QVariantMap metaInfo(const QString& fileName) const override;
109  };
110 
111  template<typename T>
112  class VolumeIO : public AbstractVolumeIO<T>
113  {
114  public: QVariantMap metaInfo(const QString& fileName) const override;
115  public: VoxelVolume<T> readVolume(const QString& fileName) const override;
116  public: Chunk2D<T> readSlice(const QString& fileName, uint sliceNb) const override;
117  public: bool write(const VoxelVolume<T>& data, const QString& fileName,
118  QVariantMap supplementaryMetaInfo = {}) const override;
119  public: bool write(const Chunk2D<T>& data, const QString& fileName,
120  QVariantMap supplementaryMetaInfo = {}) const override;
121  };
122 
124  {
125  public: QVariantMap metaInfo(const QString& fileName) const override;
126  public: ProjectionData readProjections(const QString& fileName,
127  uint nbModules = 0) const override;
128  public: SingleViewData readSingleView(const QString& fileName, uint viewNb,
129  uint nbModules = 0) const override;
130  public: bool write(const ProjectionData& data, const QString& fileName,
131  QVariantMap supplementaryMetaInfo = {}) const override;
132  public: bool write(const SingleViewData& data, const QString& fileName,
133  QVariantMap supplementaryMetaInfo = {}) const override;
134  };
135 
137  {
138  public: QVariantMap metaInfo(const QString& fileName) const override;
139  public: FullGeometry readFullGeometry(const QString& fileName,
140  uint nbModules = 0) const override;
141  public: SingleViewGeometry readSingleViewGeometry(const QString& fileName, uint viewNb,
142  uint nbModules = 0) const override;
143  public: bool write(const FullGeometry& data, const QString& fileName,
144  QVariantMap supplementaryMetaInfo = {}) const override;
145  public: bool write(const SingleViewGeometry& data, const QString& fileName,
146  QVariantMap supplementaryMetaInfo = {}) const override;
147  };
148 
149  // ### MAKE FUNCTIONS FOR INSTANTIATION OF A CONCRETE IO OBJECT ###
150  static auto makeMetaInfoReader() -> std::unique_ptr<MetaInfoReader>;
151  template<typename T>
152  static auto makeVolumeIO() -> std::unique_ptr<VolumeIO<T>>;
153  static auto makeProjectionDataIO() -> std::unique_ptr<ProjectionDataIO>;
154  static auto makeProjectionMatrixIO() -> std::unique_ptr<ProjectionMatrixIO>;
155 
156 private:
157  FileIOImplementer _implementer;
158 
159  ProjectionData::Dimensions dimensionsFromMetaInfo(const QVariantMap& info, uint nbModules = 0) const;
160  QVariantMap fusedMetaInfo(const QVariantMap& baseInfo, QVariantMap supplementary) const;
161 };
162 
163 } // namespace io
164 } // namespace CTL
165 
166 #include "io/basetypeio.tpp"
167 
169 
182 
184 #endif // CTL_BASETYPEIO_H
Definition: abstractbasetypeio.h:28
FullGeometry readFullGeometry(const QString &fileName, uint nbModules=0) const
Definition: basetypeio.tpp:161
ProjectionData readProjections(const QString &fileName, uint nbModules=0) const
Definition: basetypeio.tpp:106
bool write(const Chunk2D< T > &data, const QString &fileName, QVariantMap supplementaryMetaInfo={}) const
Definition: basetypeio.tpp:237
QVariantMap metaInfo(const QString &fileName) const
Definition: basetypeio.tpp:88
Definition: abstractbasetypeio.h:70
Holds a list of projection matrices corresponding to the detector modules of a single view.
Definition: viewgeometry.h:21
The VoxelVolume class provides a simple container for storage of voxelized 3D volume data.
Definition: ctsystemview.h:14
Definition: basetypeio.h:112
Holds a list of SingleViewGeometry instances to represent the acquisition geometry of a full CT scan.
Definition: viewgeometry.h:71
Definition: basetypeio.h:123
The ProjectionData class is the container class used to store all projections from all views.
Definition: projectiondata.h:19
Chunk2D< T > readSlice(const QString &fileName, uint sliceNb) const
Definition: basetypeio.tpp:53
ProjectionData::Dimensions dimensionsFromMetaInfo(const QVariantMap &info, uint nbModules=0) const
Definition: basetypeio.tpp:464
The Chunk2D class provides a simple container for storage of 2D image data.
Definition: chunk2d.h:51
Struct that holds the dimensions of a ProjectionData object.
Definition: projectiondata.h:118
Definition: abstractbasetypeio.h:12
Definition: basetypeio.h:136
unsigned int uint
Qt style alias for unsigned int.
Definition: modulelayout.h:6
SingleViewGeometry readSingleViewGeometry(const QString &fileName, uint viewNb, uint nbModules=0) const
Definition: basetypeio.tpp:207
QVariantMap fusedMetaInfo(const QVariantMap &baseInfo, QVariantMap supplementary) const
Definition: basetypeio.tpp:527
Interface to read and write basic CTL container types.
Definition: basetypeio.h:68
Definition: abstractbasetypeio.h:48
VoxelVolume< T > readVolume(const QString &fileName) const
Definition: basetypeio.tpp:20
The SingleViewData class is the container class used to store all projections from one particular vie...
Definition: singleviewdata.h:19
SingleViewData readSingleView(const QString &fileName, uint viewNb, uint nbModules=0) const
Definition: basetypeio.tpp:131
Definition: basetypeio.h:106