STIR 6.4.0
QuadraticPrior.h
Go to the documentation of this file.
1//
2//
3/*
4 Copyright (C) 2000- 2011, Hammersmith Imanet Ltd
5 This file is part of STIR.
6
7 SPDX-License-Identifier: Apache-2.0
8
9 See STIR/LICENSE.txt for details.
10*/
20
21#ifndef __stir_recon_buildblock_QuadraticPrior_H__
22#define __stir_recon_buildblock_QuadraticPrior_H__
23
26#include "stir/Array.h"
28#include "stir/shared_ptr.h"
29#include <string>
30
31START_NAMESPACE_STIR
32
78template <typename elemT>
79class QuadraticPrior : public RegisteredParsingObject<QuadraticPrior<elemT>,
80 GeneralisedPrior<DiscretisedDensity<3, elemT>>,
81 PriorWithParabolicSurrogate<DiscretisedDensity<3, elemT>>>
82{
83private:
87 base_type;
88
89public:
91 static const char* const registered_name;
92
95
97 QuadraticPrior(const bool only_2D, float penalization_factor);
98
99 bool parabolic_surrogate_curvature_depends_on_argument() const override { return false; }
100
101 bool is_convex() const override;
102
104 double compute_value(const DiscretisedDensity<3, elemT>& current_image_estimate) override;
105
107 void compute_gradient(DiscretisedDensity<3, elemT>& prior_gradient,
108 const DiscretisedDensity<3, elemT>& current_image_estimate) override;
109
111
112 void parabolic_surrogate_curvature(DiscretisedDensity<3, elemT>& parabolic_surrogate_curvature,
113 const DiscretisedDensity<3, elemT>& current_image_estimate) override;
114
115 void compute_Hessian(DiscretisedDensity<3, elemT>& prior_Hessian_for_single_densel,
116 const BasicCoordinate<3, int>& coords,
117 const DiscretisedDensity<3, elemT>& current_image_estimate) const override;
118
120 void add_multiplication_with_approximate_Hessian(DiscretisedDensity<3, elemT>& output,
121 const DiscretisedDensity<3, elemT>& input) const override;
122
126 void accumulate_Hessian_times_input(DiscretisedDensity<3, elemT>& output,
127 const DiscretisedDensity<3, elemT>& current_estimate,
128 const DiscretisedDensity<3, elemT>& input) const override;
129
131 Array<3, float> get_weights() const;
132
134 void set_weights(const Array<3, float>&);
135
137
141 shared_ptr<const DiscretisedDensity<3, elemT>> get_kappa_sptr() const;
142
144 void set_kappa_sptr(const shared_ptr<const DiscretisedDensity<3, elemT>>&);
145
147 Succeeded set_up(shared_ptr<const DiscretisedDensity<3, elemT>> const& target_sptr) override;
148
149protected:
153
158
160
166 std::string kappa_filename;
167
169 void check(DiscretisedDensity<3, elemT> const& current_image_estimate) const override;
170
171 void set_defaults() override;
172 void initialise_keymap() override;
173 bool post_processing() override;
174
175private:
176 shared_ptr<const DiscretisedDensity<3, elemT>> kappa_ptr;
177
179
187 elemT derivative_20(const elemT x_j, const elemT x_k) const;
188 elemT derivative_11(const elemT x_j, const elemT x_k) const;
190};
191
192END_NAMESPACE_STIR
193
194#endif
defines the stir::Array class for multi-dimensional (numeric) arrays
defines the stir::DiscretisedDensity class
Declaration of class stir::PriorWithParabolicSurrogate.
Declaration of class stir::RegisteredParsingObject.
This class defines multi-dimensional (numeric) arrays.
Definition Array.h:78
class BasicCoordinate<int num_dimensions, typename coordT> defines num_dimensions -dimensional coordi...
Definition BasicCoordinate.h:57
This abstract class is the basis for all image representations.
Definition DiscretisedDensity.h:99
A base class for 'generalised' priors, i.e. priors for which at least a 'gradient' is defined.
Definition GeneralisedPrior.h:44
this class implements priors with a parabolic surrogate curvature
Definition PriorWithParabolicSurrogate.h:40
Array< 3, float > weights
penalty weights
Definition QuadraticPrior.h:164
bool post_processing() override
This will be called at the end of the parsing.
Definition QuadraticPrior.cxx:56
static const char *const registered_name
Name which will be used when parsing a GeneralisedPrior object.
Definition QuadraticPrior.h:91
std::string kappa_filename
Filename for the image that will be read by post_processing()
Definition QuadraticPrior.h:166
std::string gradient_filename_prefix
filename prefix for outputing the gradient whenever compute_gradient() is called.
Definition QuadraticPrior.h:157
void check(DiscretisedDensity< 3, elemT > const &current_image_estimate) const override
Check that the prior is ready to be used.
Definition QuadraticPrior.cxx:118
QuadraticPrior()
Default constructor.
Definition QuadraticPrior.cxx:145
bool only_2D
can be set during parsing to restrict the weights to the 2D case
Definition QuadraticPrior.h:151
void initialise_keymap() override
sets key for penalisation factor
Definition QuadraticPrior.cxx:43
bool parabolic_surrogate_curvature_depends_on_argument() const override
A function that allows skipping some computations if the curvature is independent of the current_esti...
Definition QuadraticPrior.h:99
void set_defaults() override
sets value for penalisation factor
Definition QuadraticPrior.cxx:133
Parent class for all leaves in a RegisteredObject hierarchy that do parsing of parameter files.
Definition RegisteredParsingObject.h:78
a class containing an enumeration type that can be used by functions to signal successful operation o...
Definition Succeeded.h:44
Import of std::shared_ptr, std::dynamic_pointer_cast and std::static_pointer_cast into the stir names...