23#ifndef __stir_recon_buildblock_GibbsQuadraticPenalty_H__
24#define __stir_recon_buildblock_GibbsQuadraticPenalty_H__
48template <
typename elemT>
53 __host__ __device__
inline double value(
const elemT& val_center,
const elemT val_neigh,
int z,
int y,
int x)
const
55 const elemT diff = val_center - val_neigh;
56 return static_cast<double>(diff * diff) / 4.0;
59 __host__ __device__
inline double derivative_10(
const elemT val_center,
const elemT val_neigh,
int z,
int y,
int x)
const
61 return static_cast<double>(val_center - val_neigh) / 2.0;
64 __host__ __device__
inline double derivative_20(
const elemT val_center,
const elemT val_neigh,
int z,
int y,
int x)
const
66 return static_cast<double>(0.5);
69 __host__ __device__
inline double derivative_11(
const elemT val_center,
const elemT val_neigh,
int z,
int y,
int x)
const
71 return static_cast<double>(-0.5);
100template <
typename elemT>
102 GeneralisedPrior<DiscretisedDensity<3, elemT>>,
103 GibbsPenalty<elemT, QuadraticPotential<elemT>>>
117 : base_type(only_2D, penalisation_factor)
134template <
typename elemT>
135class CudaGibbsQuadraticPenalty :
public RegisteredParsingObject<CudaGibbsQuadraticPenalty<elemT>,
136 GeneralisedPrior<DiscretisedDensity<3, elemT>>,
137 CudaGibbsPenalty<elemT, QuadraticPotential<elemT>>>
140 typedef RegisteredParsingObject<CudaGibbsQuadraticPenalty<elemT>,
141 GeneralisedPrior<DiscretisedDensity<3, elemT>>,
142 CudaGibbsPenalty<elemT, QuadraticPotential<elemT>>>
147 static constexpr const char*
const registered_name =
"Cuda Gibbs Quadratic";
149 CudaGibbsQuadraticPenalty() { this->set_defaults(); }
150 CudaGibbsQuadraticPenalty(
const bool only_2D,
float penalisation_factor)
151 : base_type(only_2D, penalisation_factor)
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