24#ifndef __stir_recon_buildblock_GeneralisedObjectiveFunction_H__
25#define __stir_recon_buildblock_GeneralisedObjectiveFunction_H__
82template <
typename TargetT>
83class GeneralisedObjectiveFunction :
public RegisteredObject<GeneralisedObjectiveFunction<TargetT>>
86 GeneralisedObjectiveFunction()
87 : already_set_up(
false)
90 ~GeneralisedObjectiveFunction()
override;
114 virtual void compute_sub_gradient(TargetT& gradient,
const TargetT& current_estimate,
const int subset_num);
130 virtual void compute_gradient(TargetT& gradient,
const TargetT& current_estimate);
158 double compute_penalty(
const TargetT& current_estimate,
const int subset_num);
206 Succeeded add_multiplication_with_approximate_sub_Hessian_without_penalty(TargetT& output,
207 const TargetT& input,
208 const int subset_num)
const;
209 Succeeded add_multiplication_with_approximate_sub_Hessian(TargetT& output,
const TargetT& input,
const int subset_num)
const;
210 Succeeded add_multiplication_with_approximate_Hessian_without_penalty(TargetT& output,
const TargetT& input)
const;
211 Succeeded add_multiplication_with_approximate_Hessian(TargetT& output,
const TargetT& input)
const;
222 Succeeded accumulate_Hessian_times_input(TargetT& output,
const TargetT& current_image_estimate,
const TargetT& input)
const;
224 Succeeded accumulate_Hessian_times_input_without_penalty(TargetT& output,
225 const TargetT& current_image_estimate,
226 const TargetT& input)
const;
228 Succeeded accumulate_sub_Hessian_times_input(TargetT& output,
229 const TargetT& current_image_estimate,
230 const TargetT& input,
231 const int subset_num)
const;
232 Succeeded accumulate_sub_Hessian_times_input_without_penalty(TargetT& output,
233 const TargetT& current_image_estimate,
234 const TargetT& input,
235 const int subset_num)
const;
240 std::string get_objective_function_values_report(
const TargetT& current_estimate);
243 int get_num_subsets()
const;
249 virtual std::unique_ptr<ExamInfo> get_exam_info_uptr_for_target()
const
251 auto exam_info_uptr = unique_ptr<ExamInfo>(
new ExamInfo(*(this->get_input_data().get_exam_info_sptr())));
252 return exam_info_uptr;
287 shared_ptr<GeneralisedPrior<TargetT>> get_prior_sptr();
321 shared_ptr<GeneralisedPrior<TargetT>> prior_sptr;
370 const TargetT& input,
371 const int subset_num)
const;
387 const TargetT& current_image_estimate,
388 const TargetT& input,
389 const int subset_num)
const;
Declaration of class stir::BinNormalisation.
declaration of stir::ExamData
Declaration of class stir::GeneralisedPrior.
Declaration of class stir::ParsingObject.
Declaration of class stir::ProjData.
Declaration of class stiir::RegisteredObject.
base class for data objects such as ProjData etc
Definition ExamData.h:34
a class for storing information about 1 exam (or scan)
Definition ExamInfo.h:42
virtual const ExamData & get_input_data() const =0
get input data
virtual void set_input_data(const shared_ptr< ExamData > &)=0
set_input_data
bool prior_is_zero() const
check if the prior is set (or the penalisation factor is 0)
Definition GeneralisedObjectiveFunction.cxx:104
virtual double actual_compute_objective_function_without_penalty(const TargetT ¤t_estimate, const int subset_num)=0
Implementation of function that computes the objective function for the current subset.
double compute_objective_function(const TargetT ¤t_estimate, const int subset_num)
Compute the value of the sub-objective function at the current_estimate.
Definition GeneralisedObjectiveFunction.cxx:240
virtual double compute_objective_function_without_penalty(const TargetT ¤t_estimate, const int subset_num)
Compute the value of the unregularised sub-objective function at the current_estimate.
Definition GeneralisedObjectiveFunction.cxx:227
virtual void compute_sub_gradient_without_penalty(TargetT &gradient, const TargetT ¤t_estimate, const int subset_num)=0
This should compute the subset-gradient of the unregularised objective function at current_estimate.
bool subsets_are_approximately_balanced() const
Checks of the current subset scheme is approximately balanced.
Definition GeneralisedObjectiveFunction.cxx:490
virtual int set_num_subsets(const int num_subsets)=0
Attempts to change the number of subsets.
virtual Succeeded set_up(shared_ptr< TargetT > const &target_sptr)
Has to be called before using this object.
Definition GeneralisedObjectiveFunction.cxx:60
virtual void compute_sub_gradient(TargetT &gradient, const TargetT ¤t_estimate, const int subset_num)
Compute the subset-gradient of the objective function at current_estimate.
Definition GeneralisedObjectiveFunction.cxx:128
virtual void compute_gradient(TargetT &gradient, const TargetT ¤t_estimate)
Compute the gradient of the objective function at the current_estimate.
Definition GeneralisedObjectiveFunction.cxx:187
double compute_penalty(const TargetT ¤t_estimate, const int subset_num)
Compute the value of the sub-penalty at the current_estimate.
Definition GeneralisedObjectiveFunction.cxx:121
void set_defaults() override
sets any default values
Definition GeneralisedObjectiveFunction.cxx:40
virtual void compute_gradient_without_penalty(TargetT &gradient, const TargetT ¤t_estimate)
Compute the gradient of the unregularised objective function at the current_estimate.
Definition GeneralisedObjectiveFunction.cxx:161
virtual bool actual_subsets_are_approximately_balanced(std::string &warning_message) const =0
Implementation of function that checks subset balancing.
virtual void set_additive_proj_data_sptr(const shared_ptr< ExamData > &)=0
set_additive_proj_data_sptr
void set_prior_sptr(const shared_ptr< GeneralisedPrior< TargetT > > &)
Change the prior.
Definition GeneralisedObjectiveFunction.cxx:97
GeneralisedPrior< TargetT > *const get_prior_ptr() const
Read-only access to the prior.
Definition GeneralisedObjectiveFunction.cxx:83
double compute_value(const TargetT ¤t_estimate)
Alias for compute_objective_function(const TargetT&)
Definition GeneralisedObjectiveFunction.h:180
virtual Succeeded actual_add_multiplication_with_approximate_sub_Hessian_without_penalty(TargetT &output, const TargetT &input, const int subset_num) const
Implementation of the function that multiplies the approximate sub-Hessian with a vector.
Definition GeneralisedObjectiveFunction.cxx:342
virtual void fill_nonidentifiable_target_parameters(TargetT &target, const float value) const
Fill any elements that we cannot estimate with a fixed value.
Definition GeneralisedObjectiveFunction.h:196
void initialise_keymap() override
sets parsing keys
Definition GeneralisedObjectiveFunction.cxx:49
virtual TargetT * construct_target_ptr() const =0
Creates a suitable target as determined by the parameters.
virtual void set_normalisation_sptr(const shared_ptr< BinNormalisation > &)=0
set_normalisation_sptr
virtual Succeeded actual_accumulate_sub_Hessian_times_input_without_penalty(TargetT &output, const TargetT ¤t_image_estimate, const TargetT &input, const int subset_num) const
Implementation of the function computes the sub-Hessian and multiplies by a vector.
Definition GeneralisedObjectiveFunction.cxx:465
A base class for 'generalised' priors, i.e. priors for which at least a 'gradient' is defined.
Definition GeneralisedPrior.h:44
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...