STIR 6.4.0
MultiParametricDiscretisedDensityInputFileFormat.h
Go to the documentation of this file.
1//
2//
3#ifndef __stir_IO_MultiParametricDiscretisedDensityInputFileFormat_h__
4#define __stir_IO_MultiParametricDiscretisedDensityInputFileFormat_h__
5/*
6 Copyright (C) 2006 - 2007-10-08, Hammersmith Imanet Ltd
7 Copyright (C) 2013-01-01 - 2013, Kris Thielemans
8 Copyight (C) 2018,2020, University College London
9 This file is part of STIR.
10 SPDX-License-Identifier: Apache-2.0
11
12 See STIR/LICENSE.txt for details
13*/
25#include "stir/utilities.h"
27#include "stir/error.h"
28#include "stir/is_null_ptr.h"
32
33START_NAMESPACE_STIR
34
36
39class MultiParametricDiscretisedDensityInputFileFormat : public InputFileFormat<ParametricVoxelsOnCartesianGrid>
40{
41public:
42 const std::string get_name() const override { return "Multi"; }
43
44protected:
45 bool actual_can_read(const FileSignature& signature, std::istream&) const override
46 {
47 //. todo should check if it's an image
48 // checking for "multi :"
49 const char* pos_of_colon = strchr(signature.get_signature(), ':');
50 if (pos_of_colon == NULL)
51 return false;
52 std::string keyword(signature.get_signature(), pos_of_colon - signature.get_signature());
54 }
55
56 unique_ptr<data_type> read_from_file(std::istream&) const override
57 {
58 // needs more arguments, so we just give up (TODO?)
59 unique_ptr<data_type> ret;
60 if (is_null_ptr(ret))
61 {
62 error("failed to read a Multi image from stream");
63 }
64 return ret;
65 }
66 unique_ptr<data_type> read_from_file(const std::string& filename) const override
67 {
68 MultipleDataSetHeader header;
69 if (header.parse(filename.c_str()) == false)
70 error("MultiParametricDiscretisedDensity:::read_from_file: Error parsing \"" + filename + '\"');
71 if (header.get_num_data_sets() != ParametricVoxelsOnCartesianGrid::get_num_params())
72 error("MultiParametricDiscretisedDensity:::read_from_file: "
73 "wrong number of images found in \""
74 + filename
75 + "\"\n"
76 "(expected "
77 + std::to_string(ParametricVoxelsOnCartesianGrid::get_num_params()) + ")");
78
79 using SingleDiscretisedDensityType = ParametricVoxelsOnCartesianGrid::SingleDiscretisedDensityType;
80 auto t = stir::read_from_file<SingleDiscretisedDensityType>(header.get_filename(0));
82 par_disc_den_ptr->update_parametric_image(*t, 1);
83 for (std::size_t i = 2; i <= header.get_num_data_sets(); ++i)
84 {
85 t = stir::read_from_file<SingleDiscretisedDensityType>(header.get_filename(i - 1));
86 // TODO should check all time-frame info consistent
87 // exam_info.get_time_frame_definitions TODO.set_time_frame(i, start, end);
88 par_disc_den_ptr->update_parametric_image(*t, i);
89 }
90
91 return unique_ptr<data_type>(par_disc_den_ptr);
92 }
93};
94END_NAMESPACE_STIR
95
96#endif
defines the stir::DiscretisedDensity class
Declaration of class stir::InputFileFormat.
Declaration of class stir::MultipleDataSetHeader.
Declaration of class stir::ParametricDiscretisedDensity.
defines the stir::VoxelsOnCartesianGrid class
A class to read/store the file signature.
Definition FileSignature.h:35
const char * get_signature() const
get access to the signature
Definition FileSignature.h:52
Base-class for file-formats for reading.
Definition InputFileFormat.h:40
bool parse(std::istream &f, const bool write_warnings=true)
parse() returns false if there is some error, true otherwise
Definition KeyParser.cxx:260
Class for reading images in Multi file-format.
Definition MultiParametricDiscretisedDensityInputFileFormat.h:40
unique_ptr< data_type > read_from_file(std::istream &) const override
read data from a stream
Definition MultiParametricDiscretisedDensityInputFileFormat.h:56
unique_ptr< data_type > read_from_file(const std::string &filename) const override
read data from a filename
Definition MultiParametricDiscretisedDensityInputFileFormat.h:66
Declaration of stir::error()
unique_ptr< DataT > read_from_file(const FileSignature &signature, FileT file)
Function that reads data from file using the default InputFileFormatRegistry, using the provided File...
Definition read_from_file.h:46
void error(const char *const s,...)
Print error with format string a la printf and throw exception.
Definition error.cxx:42
Definition of stir::is_null_ptr functions.
string standardise_interfile_keyword(const string &keyword)
Put a (Interfile) keyword into a standard form.
Definition interfile_keyword_functions.cxx:28
ParametricDiscretisedDensity< ParametricVoxelsOnCartesianGridBaseType > ParametricVoxelsOnCartesianGrid
Convenience typedef for Cartesian Voxelised Parametric Images with just two parameters.
Definition ParametricDiscretisedDensity.h:172
Declaration of stir::read_from_file functions (providing easy access to class stir::InputFileFormatRe...
This file declares various utility functions.