STIR 6.4.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*/
22
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
33START_NAMESPACE_STIR
34
48template <typename elemT>
50{
51public:
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 }
58
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 }
63
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 }
68
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 }
81
83 {
84 // No additional parameters for quadratic potential
85 }
86};
87
100template <typename elemT>
101class GibbsQuadraticPenalty : public RegisteredParsingObject<GibbsQuadraticPenalty<elemT>,
102 GeneralisedPrior<DiscretisedDensity<3, elemT>>,
103 GibbsPenalty<elemT, QuadraticPotential<elemT>>>
104{
105private:
109 base_type;
110
111public:
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
134template <typename elemT>
135class CudaGibbsQuadraticPenalty : public RegisteredParsingObject<CudaGibbsQuadraticPenalty<elemT>,
136 GeneralisedPrior<DiscretisedDensity<3, elemT>>,
137 CudaGibbsPenalty<elemT, QuadraticPotential<elemT>>>
138{
139private:
140 typedef RegisteredParsingObject<CudaGibbsQuadraticPenalty<elemT>,
141 GeneralisedPrior<DiscretisedDensity<3, elemT>>,
142 CudaGibbsPenalty<elemT, QuadraticPotential<elemT>>>
143 base_type;
144
145public:
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
156END_NAMESPACE_STIR
157
158#endif
Declaration of the stir::CudaGibbsPenalty class.
Declaration of the stir::GibbsPenalty class.
Declaration of class stir::RegisteredParsingObject.
A base class for 'generalised' priors, i.e. priors for which at least a 'gradient' is defined.
Definition GeneralisedPrior.h:44
A base class for Gibbs type penalties in the GeneralisedPrior hierarchy.
Definition GibbsPenalty.h:99
void set_defaults() override
sets value for penalisation factor
Definition GibbsPenalty.inl:158
Multithreaded CPU Implementation of the Quadratic Gibbs prior.
Definition GibbsQuadraticPenalty.h:104
static constexpr const char *const registered_name
Name which will be used when parsing a GeneralisedPrior object.
Definition GibbsQuadraticPenalty.h:113
A class to parse Interfile headers.
Definition KeyParser.h:162
Implementation of the Quadratic penalty potential.
Definition GibbsQuadraticPenalty.h:50
static bool is_convex()
method to indicate whether the the prior defined by this potential is convex
Definition GibbsQuadraticPenalty.h:75
void set_defaults()
Set default values for potential-specific parameters.
Definition GibbsQuadraticPenalty.h:82
__host__ __device__ double derivative_10(const elemT val_center, const elemT val_neigh, int z, int y, int x) const
Method for computing the first derivative with respect to val_center.
Definition GibbsQuadraticPenalty.h:59
__host__ __device__ double derivative_20(const elemT val_center, const elemT val_neigh, int z, int y, int x) const
Method for computing the second derivative with respect to val_center.
Definition GibbsQuadraticPenalty.h:64
__host__ __device__ double derivative_11(const elemT val_center, const elemT val_neigh, int z, int y, int x) const
Method for computing the mixed second derivative.
Definition GibbsQuadraticPenalty.h:69
void initialise_keymap(KeyParser &parser)
Method for setting up parsing additional parameters.
Definition GibbsQuadraticPenalty.h:77
__host__ __device__ double value(const elemT &val_center, const elemT val_neigh, int z, int y, int x) const
Method for computing the potential value.
Definition GibbsQuadraticPenalty.h:53
Parent class for all leaves in a RegisteredObject hierarchy that do parsing of parameter files.
Definition RegisteredParsingObject.h:78
some utilities for STIR and CUDA