STIR  6.3.0
GeneralisedPrior.h
Go to the documentation of this file.
1 //
2 //
3 /*
4  Copyright (C) 2000- 2007, 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 */
21 #ifndef __stir_recon_buildblock_GeneralisedPrior_H__
22 #define __stir_recon_buildblock_GeneralisedPrior_H__
23 
24 #include "stir/RegisteredObject.h"
25 #include "stir/ParsingObject.h"
26 #include "stir/Succeeded.h"
27 
28 START_NAMESPACE_STIR
29 
30 class Succeeded;
31 
41 template <typename DataT>
42 class GeneralisedPrior : public RegisteredObject<GeneralisedPrior<DataT>>
43 
44 {
45 public:
46  inline GeneralisedPrior();
47 
49 
51  virtual double compute_value(const DataT& current_estimate) = 0;
52 
54 
57  virtual void compute_gradient(DataT& prior_gradient, const DataT& current_estimate) = 0;
58 
60 
66  virtual double compute_gradient_times_input(const DataT& input, const DataT& current_estimate);
67 
69 
76  virtual void compute_Hessian(DataT& prior_Hessian_for_single_densel,
77  const BasicCoordinate<3, int>& coords,
78  const DataT& current_image_estimate) const;
79 
82 
87  virtual void compute_Hessian_diagonal(DataT& Hessian_diagonal, const DataT& current_estimate) const;
88 
90 
96  virtual void add_multiplication_with_approximate_Hessian(DataT& output, const DataT& input) const;
97 
99 
103  virtual void accumulate_Hessian_times_input(DataT& output, const DataT& current_estimate, const DataT& input) const;
104 
105  inline float get_penalisation_factor() const;
106  inline void set_penalisation_factor(float new_penalisation_factor);
107 
109  virtual Succeeded set_up(shared_ptr<const DataT> const& target_sptr);
110 
112 
113  virtual bool is_convex() const = 0;
114 
115 protected:
116  float penalisation_factor;
118 
119  void set_defaults() override;
121 
122  void initialise_keymap() override;
123 
125  virtual void check(DataT const& current_estimate) const;
126 
127  bool _already_set_up;
128 };
129 
130 END_NAMESPACE_STIR
131 
133 
134 #endif
Declaration of class stir::Succeeded.
Declaration of class stir::ParsingObject.
A base class for &#39;generalised&#39; priors, i.e. priors for which at least a &#39;gradient&#39; is defined...
Definition: GeneralisedPrior.h:42
Inline implementations for class stir::GeneralisedPrior.
Declaration of class stiir::RegisteredObject.
Helper class to provide registry mechanisms to a Base classSuppose you have a hierarchy of classes wi...
Definition: RegisteredObject.h:95
a class containing an enumeration type that can be used by functions to signal successful operation o...
Definition: Succeeded.h:43