STIR 6.4.0
interfile.h
Go to the documentation of this file.
1//
2//
3#ifndef __stir_Interfile_h__
4#define __stir_Interfile_h__
5
6/*
7 Copyright (C) 2000 PARAPET partners
8 Copyright (C) 2000- 2011, Hammersmith Imanet Ltd
9 Copyright (C) 2018, University College London
10 This file is part of STIR.
11 SPDX-License-Identifier: Apache-2.0 AND License-ref-PARAPET-license
12
13 See STIR/LICENSE.txt for details
14*/
27
28#include "stir/NumericType.h"
29// note that I had to include Succeeded.h instead of just forward
30// declaring the class. Otherwise every file that used write_*interfile*
31// has to include Succeeded.h (even if it doesn't use the return value).
32#include "stir/Succeeded.h"
33#include "stir/ByteOrder.h"
34#include "stir/ArrayFwd.h"
35#include <iostream>
36#include <string>
37
38START_NAMESPACE_STIR
39
40template <int num_dimensions>
41class IndexRange;
42template <int num_dimensions, typename elemT>
43class DiscretisedDensity;
44template <typename elemT>
45class VectorWithOffset;
46template <typename elemT>
47class CartesianCoordinate3D;
48template <typename elemT>
49class Coordinate3D;
50template <typename elemT>
51class VoxelsOnCartesianGrid;
52class ProjDataFromStream;
53class DynamicDiscretisedDensity;
54template <typename elemT>
55class ParametricDiscretisedDensity;
56template <typename elemT>
57class VoxelsOnCartesianGrid;
58template <int num_dimensions, typename elemT>
59class KineticParameters;
60
61class ExamInfo;
62
64
77bool is_interfile_signature(const char* const signature);
78
80
91VoxelsOnCartesianGrid<float>* read_interfile_image(std::istream& input, const std::string& directory_for_data = "");
92
94
103VoxelsOnCartesianGrid<float>* read_interfile_image(const std::string& filename);
104
106DynamicDiscretisedDensity* read_interfile_dynamic_image(std::istream& input, const std::string& directory_for_data);
107
109DynamicDiscretisedDensity* read_interfile_dynamic_image(const std::string& filename);
110
112ParametricDiscretisedDensity<VoxelsOnCartesianGrid<KineticParameters<2, float>>>*
113read_interfile_parametric_image(std::istream& input, const std::string& directory_for_data);
114
116ParametricDiscretisedDensity<VoxelsOnCartesianGrid<KineticParameters<2, float>>>*
117read_interfile_parametric_image(const std::string& filename);
118
120
137
138Succeeded write_basic_interfile_image_header(const std::string& header_file_name,
139 const std::string& image_file_name,
140 const ExamInfo& exam_info,
141 const IndexRange<3>& index_range,
142 const CartesianCoordinate3D<float>& voxel_size,
143 const CartesianCoordinate3D<float>& origin,
144 const NumericType output_type,
145 const ByteOrder byte_order,
146 const VectorWithOffset<float>& scaling_factors,
147 const VectorWithOffset<unsigned long>& file_offsets,
148 const std::vector<std::string>& data_type_descriptions = std::vector<std::string>());
149
151
155 const NumericType output_type,
156 const Coordinate3D<int>& dim,
157 unsigned long initial_offset = 0);
158
160
165
166template <class elemT>
167Succeeded write_basic_interfile(const std::string& filename,
168 const ArrayType<3, elemT>& image,
169 const CartesianCoordinate3D<float>& voxel_size,
170 const CartesianCoordinate3D<float>& origin,
171 const NumericType output_type = NumericType::FLOAT,
172 const float scale = 0,
173 const ByteOrder byte_order = ByteOrder::native);
174
176
181
182template <class elemT>
183Succeeded write_basic_interfile(const std::string& filename,
184 const ExamInfo& exam_info,
185 const ArrayType<3, elemT>& image,
186 const CartesianCoordinate3D<float>& voxel_size,
187 const CartesianCoordinate3D<float>& origin,
188 const NumericType output_type = NumericType::FLOAT,
189 const float scale = 0,
190 const ByteOrder byte_order = ByteOrder::native);
191
193
202
203template <class elemT>
204Succeeded write_basic_interfile(const std::string& filename,
205 const ArrayType<3, elemT>& image,
206 const NumericType output_type = NumericType::FLOAT,
207 const float scale = 0,
208 const ByteOrder byte_order = ByteOrder::native);
209
211
216Succeeded write_basic_interfile(const std::string& filename,
217 const VoxelsOnCartesianGrid<float>& image,
218 const NumericType output_type = NumericType::FLOAT,
219 const float scale = 0,
220 const ByteOrder byte_order = ByteOrder::native);
221
223
231Succeeded write_basic_interfile(const std::string& filename,
232 const DiscretisedDensity<3, float>& image,
233 const NumericType output_type = NumericType::FLOAT,
234 const float scale = 0,
235 const ByteOrder byte_order = ByteOrder::native);
236
237Succeeded write_basic_interfile(const std::string& filename,
238 const ParametricDiscretisedDensity<VoxelsOnCartesianGrid<KineticParameters<2, float>>>& image,
239 const NumericType output_type = NumericType::FLOAT,
240 const float scale = 0,
241 const ByteOrder byte_order = ByteOrder::native);
242
243Succeeded write_basic_interfile(const std::string& filename,
244 const DynamicDiscretisedDensity& image,
245 const NumericType output_type = NumericType::FLOAT,
246 const float scale = 0,
247 const ByteOrder byte_order = ByteOrder::native);
248
250
265 const std::string& directory_for_data = "",
266 const std::ios::openmode openmode = std::ios::in);
267
269
278ProjDataFromStream* read_interfile_PDFS(const std::string& filename, const std::ios::openmode open_mode);
279
281
286Succeeded write_basic_interfile_PDFS_header(const std::string& header_filename,
287 const std::string& data_filename,
288 const ProjDataFromStream& pdfs);
289
291
297Succeeded write_basic_interfile_PDFS_header(const std::string& data_filename, const ProjDataFromStream& pdfs);
298
299END_NAMESPACE_STIR
300
301#endif // __Interfile_h__
forward declaration of stir::Array class for multi-dimensional (numeric) arrays
This file declares the stir::ByteOrder class.
This file declares the stir::NumericType class.
Declaration of class stir::Succeeded.
This class provides member functions to find out what byte-order your machine is and to swap numbers.
Definition ByteOrder.h:100
@ native
Definition ByteOrder.h:107
a templated class for 3-dimensional coordinates.
Definition CartesianCoordinate3D.h:53
a templated class for 3-dimensional coordinates.
Definition Coordinate3D.h:43
This abstract class is the basis for all image representations.
Definition DiscretisedDensity.h:99
Class of multiple image frames, one for each time frame Each time frame is a DiscretisedDensity<3,...
Definition DynamicDiscretisedDensity.h:46
a class for storing information about 1 exam (or scan)
Definition ExamInfo.h:42
provides names for some numeric types and methods for finding their properties.
Definition NumericType.h:55
Class to store parametric images.
Definition ParametricDiscretisedDensity.h:65
A class which reads/writes projection data from/to a (binary) stream.
Definition ProjDataFromStream.h:57
a class containing an enumeration type that can be used by functions to signal successful operation o...
Definition Succeeded.h:44
A templated class for vectors, but with indices starting not from 0.
Definition VectorWithOffset.h:65
This class is used to represent voxelised densities on a cuboid grid (3D).
Definition VoxelsOnCartesianGrid.h:46
Succeeded write_basic_interfile_image_header(const std::string &header_file_name, const std::string &image_file_name, const ExamInfo &exam_info, const IndexRange< 3 > &index_range, const CartesianCoordinate3D< float > &voxel_size, const CartesianCoordinate3D< float > &origin, const NumericType output_type, const ByteOrder byte_order, const VectorWithOffset< float > &scaling_factors, const VectorWithOffset< unsigned long > &file_offsets, const std::vector< std::string > &data_type_descriptions=std::vector< std::string >())
This outputs an Interfile header for an image.
Definition interfile.cxx:522
const VectorWithOffset< unsigned long > compute_file_offsets(int number_of_time_frames, const NumericType output_type, const Coordinate3D< int > &dim, unsigned long initial_offset=0)
a utility function that computes the file offsets of subsequent images
bool is_interfile_signature(const char *const signature)
Checks if the signature corresponds to the start of an interfile header.
Definition interfile.cxx:77
ProjDataFromStream * read_interfile_PDFS(std::istream &input, const std::string &directory_for_data="", const std::ios::openmode openmode=std::ios::in)
This reads the first 3D sinogram from an Interfile header, given as a stream.
VoxelsOnCartesianGrid< float > * read_interfile_image(std::istream &input, const std::string &directory_for_data="")
This reads the first 3d image in an Interfile header file, given as a stream.
Definition interfile.cxx:126
Succeeded write_basic_interfile_PDFS_header(const std::string &header_filename, const std::string &data_filename, const ProjDataFromStream &pdfs)
This writes an Interfile header appropriate for the ProjDataFromStream object.
Definition interfile.cxx:1103
Succeeded write_basic_interfile(const std::string &filename, const ArrayType< 3, elemT > &image, const CartesianCoordinate3D< float > &voxel_size, const CartesianCoordinate3D< float > &origin, const NumericType output_type=NumericType::FLOAT, const float scale=0, const ByteOrder byte_order=ByteOrder::native)
This outputs an Interfile header and data for a ArrayType<3,elemT> object.
DynamicDiscretisedDensity * read_interfile_dynamic_image(std::istream &input, const std::string &directory_for_data)
Read dynamic image.
Definition interfile.cxx:169
ParametricDiscretisedDensity< VoxelsOnCartesianGrid< KineticParameters< 2, float > > > * read_interfile_parametric_image(std::istream &input, const std::string &directory_for_data)
Read parametric image.
Definition interfile.cxx:219
Array< num_dimensions, elemT > ArrayType
type alias for future-proofing for "large" rectangular arrays
Definition ArrayFwd.h:25