STIR  6.3.0
GibbsQuadraticPenalty.h
Go to the documentation of this file.
1 //
2 //
3 /*
4  Copyright (C) 2025, University College London
5  Copyright (C) 2025, University of Milano-Bicocca
6  This file is part of STIR.
7 
8  SPDX-License-Identifier: Apache-2.0
9 
10  See STIR/LICENSE.txt for details
11 */
23 #ifndef __stir_recon_buildblock_GibbsQuadraticPenalty_H__
24 #define __stir_recon_buildblock_GibbsQuadraticPenalty_H__
25 
27 #include "stir/cuda_utilities.h"
29 #ifdef STIR_WITH_CUDA
31 #endif
32 
33 START_NAMESPACE_STIR
34 
48 template <typename elemT>
50 {
51 public:
53  __host__ __device__ inline double value(const elemT& val_center, const elemT val_neigh, int z, int y, int x) const
54  {
55  const elemT diff = val_center - val_neigh;
56  return static_cast<double>(diff * diff) / 4.0;
57  }
59  __host__ __device__ inline double derivative_10(const elemT val_center, const elemT val_neigh, int z, int y, int x) const
60  {
61  return static_cast<double>(val_center - val_neigh) / 2.0;
62  }
64  __host__ __device__ inline double derivative_20(const elemT val_center, const elemT val_neigh, int z, int y, int x) const
65  {
66  return static_cast<double>(0.5);
67  }
69  __host__ __device__ inline double derivative_11(const elemT val_center, const elemT val_neigh, int z, int y, int x) const
70  {
71  return static_cast<double>(-0.5);
72  }
73 
75  static inline bool is_convex() { return true; }
78  {
79  // No additional parameters needed for quadratic potential
80  }
82  void set_defaults()
83  {
84  // No additional parameters for quadratic potential
85  }
86 };
87 
100 template <typename elemT>
101 class GibbsQuadraticPenalty : public RegisteredParsingObject<GibbsQuadraticPenalty<elemT>,
102  GeneralisedPrior<DiscretisedDensity<3, elemT>>,
103  GibbsPenalty<elemT, QuadraticPotential<elemT>>>
104 {
105 private:
109  base_type;
110 
111 public:
113  static constexpr const char* const registered_name = "Gibbs Quadratic";
114 
115  GibbsQuadraticPenalty() { this->set_defaults(); }
116  GibbsQuadraticPenalty(const bool only_2D, float penalisation_factor)
117  : base_type(only_2D, penalisation_factor)
118  {}
119 };
120 
121 #ifdef STIR_WITH_CUDA
122 
134 template <typename elemT>
135 class CudaGibbsQuadraticPenalty : public RegisteredParsingObject<CudaGibbsQuadraticPenalty<elemT>,
136  GeneralisedPrior<DiscretisedDensity<3, elemT>>,
137  CudaGibbsPenalty<elemT, QuadraticPotential<elemT>>>
138 {
139 private:
143  base_type;
144 
145 public:
147  static constexpr const char* const registered_name = "Cuda Gibbs Quadratic";
148 
149  CudaGibbsQuadraticPenalty() { this->set_defaults(); }
150  CudaGibbsQuadraticPenalty(const bool only_2D, float penalisation_factor)
151  : base_type(only_2D, penalisation_factor)
152  {}
153 };
154 #endif
155 
156 END_NAMESPACE_STIR
157 
158 #endif
A class to parse Interfile headers.
Definition: KeyParser.h:161
static bool is_convex()
method to indicate whether the the prior defined by this potential is convex
Definition: GibbsQuadraticPenalty.h:75
void initialise_keymap(KeyParser &parser)
Method for setting up parsing additional parameters.
Definition: GibbsQuadraticPenalty.h:77
A base class with CUDA-accelerated implementation of the GibbsPenalty class.
Definition: CudaGibbsPenalty.h:50
Declaration of the stir::GibbsPenalty class.
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
Multithreaded CPU Implementation of the Quadratic Gibbs prior.
Definition: GibbsQuadraticPenalty.h:101
Parent class for all leaves in a RegisteredObject hierarchy that do parsing of parameter files...
Definition: RegisteredParsingObject.h:77
A base class for Gibbs type penalties in the GeneralisedPrior hierarchy.
Definition: GibbsPenalty.h:98
Declaration of the stir::CudaGibbsPenalty class.
some utilities for STIR and CUDA
Declaration of class stir::RegisteredParsingObject.
void set_defaults()
Set default values for potential-specific parameters.
Definition: GibbsQuadraticPenalty.h:82
Implementation of the Quadratic penalty potential.
Definition: GibbsQuadraticPenalty.h:49