STIR 6.4.0
PoissonLogLikelihoodWithLinearModelForMeanAndGatedProjDataWithMotion.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2006- 2009, Hammersmith Imanet Ltd
3 Copyright (C) 2010- 2013, King's College London
4 Copyright (C) 2018, University College London
5
6 SPDX-License-Identifier: Apache-2.0
7
8 See STIR/LICENSE.txt for details
9*/
20
21#ifndef __stir_recon_buildblock_PoissonLogLikelihoodWithLinearModelForMeanAndGatedProjDataWithMotion_H__
22#define __stir_recon_buildblock_PoissonLogLikelihoodWithLinearModelForMeanAndGatedProjDataWithMotion_H__
23#include "stir/shared_ptr.h"
30#include "stir/GatedProjData.h"
33
34START_NAMESPACE_STIR
35
52
53template <typename TargetT>
54class PoissonLogLikelihoodWithLinearModelForMeanAndGatedProjDataWithMotion
55 : public RegisteredParsingObject<PoissonLogLikelihoodWithLinearModelForMeanAndGatedProjDataWithMotion<TargetT>,
56 GeneralisedObjectiveFunction<TargetT>,
57 PoissonLogLikelihoodWithLinearModelForMean<TargetT>>
58{
59private:
63 base_type;
65 VectorWithOffset<SingleGateObjFunc> _single_gate_obj_funcs;
66
67 TimeGateDefinitions _time_gate_definitions;
68
69public:
71 static const char* const registered_name;
72
73 PoissonLogLikelihoodWithLinearModelForMeanAndGatedProjDataWithMotion();
74
76
79 TargetT* construct_target_ptr() const override;
80
82 const TargetT& current_estimate,
83 const int subset_num,
84 const bool add_sensitivity) override;
85
86 double actual_compute_objective_function_without_penalty(const TargetT& current_estimate, const int subset_num) override;
87
88 Succeeded set_up_before_sensitivity(shared_ptr<const TargetT> const& target_sptr) override;
89
91 void add_subset_sensitivity(TargetT& sensitivity, const int subset_num) const override;
92
94 const TargetT& input,
95 const int subset_num) const override;
97 const TargetT& current_image_estimate,
98 const TargetT& input,
99 const int subset_num) const override;
100
101 void set_time_gate_definitions(const TimeGateDefinitions& time_gate_definitions);
102
108 const GatedProjData& get_gated_proj_data() const;
109 const shared_ptr<GatedProjData>& get_gated_proj_data_sptr() const;
110 const int get_max_segment_num_to_process() const;
111 const bool get_zero_seg0_end_planes() const;
112 const GatedProjData& get_additive_gated_proj_data() const;
113 const shared_ptr<GatedProjData>& get_additive_gated_proj_data_sptr() const;
114 const GatedProjData& get_normalisation_gated_proj_data() const;
115 const shared_ptr<GatedProjData>& get_normalisation_gated_proj_data_sptr() const;
116 const ProjectorByBinPair& get_projector_pair() const;
117 const shared_ptr<ProjectorByBinPair>& get_projector_pair_sptr() const;
119
127 void set_recompute_sensitivity(const bool);
128 void set_sensitivity_sptr(const shared_ptr<TargetT>&);
129 int set_num_subsets(const int num_subsets) override;
130
131 void set_normalisation_sptr(const shared_ptr<BinNormalisation>&) override;
132 void set_additive_proj_data_sptr(const shared_ptr<ExamData>&) override;
133
134 void set_input_data(const shared_ptr<ExamData>&) override;
135 const GatedProjData& get_input_data() const override;
137protected:
139 std::string _input_filename;
140 std::string _motion_vectors_filename_prefix;
141 std::string _reverse_motion_vectors_filename_prefix;
142 std::string _gate_definitions_filename;
143
145 shared_ptr<GatedProjData> _gated_proj_data_sptr;
146
148
150
151 const TimeGateDefinitions& get_time_gate_definitions() const;
152
153 /**********************/
154 ParseAndCreateFrom<TargetT, GatedProjData> target_parameter_parser;
155 /********************************/
158
161
163
164 shared_ptr<GatedProjData> _additive_gated_proj_data_sptr;
165 shared_ptr<GatedProjData> _normalisation_gated_proj_data_sptr;
169 shared_ptr<ProjectorByBinPair> _projector_pair_ptr;
173 int _motion_correction_type; // This could be set up in a more generic way in order to choose how motion correction will be
174 // applied//
175 GatedSpatialTransformation _motion_vectors;
176 GatedSpatialTransformation _reverse_motion_vectors;
177
180 bool actual_subsets_are_approximately_balanced(std::string& warning_message) const override;
181
183 void set_defaults() override;
184 void initialise_keymap() override;
185 bool post_processing() override;
186};
187
188END_NAMESPACE_STIR
189
190#endif
Implementation of class stir::GatedDiscretisedDensity.
Declaration of class stir::GatedProjData.
Declaration of class stir::GatedSpatialTransformation.
Definition of the stir::ParseAndCreateFrom class.
Declaration of class stir::PoissonLogLikelihoodWithLinearModelForMeanAndProjData.
Declaration of class stir::PoissonLogLikelihoodWithLinearModelForMean.
Declaration of class stiir::RegisteredObject.
Declaration of class stir::RegisteredParsingObject.
defines the stir::VectorWithOffset class
Class of multiple image gates.
Definition GatedDiscretisedDensity.h:35
Class for spatial transformations for gated images.
Definition GatedSpatialTransformation.h:37
A base class for 'generalised' objective functions, i.e. objective functions for which at least a 'gr...
Definition GeneralisedObjectiveFunction.h:84
template for adding keywords to a parser and creating an object
Definition ParseAndCreateFrom.h:53
double actual_compute_objective_function_without_penalty(const TargetT &current_estimate, const int subset_num) override
Implementation of function that computes the objective function for the current subset.
void set_input_data(const shared_ptr< ExamData > &) override
set_input_data
std::string _normalisation_filename_prefix
Definition PoissonLogLikelihoodWithLinearModelForMeanAndGatedProjDataWithMotion.h:167
void add_subset_sensitivity(TargetT &sensitivity, const int subset_num) const override
Add subset sensitivity to existing data.
Definition PoissonLogLikelihoodWithLinearModelForMeanAndGatedProjDataWithMotion.cxx:475
const GatedProjData & get_input_data() const override
get input data
int set_num_subsets(const int num_subsets) override
Attempts to change the number of subsets.
shared_ptr< GatedProjData > _additive_gated_proj_data_sptr
points to the additive projection data
Definition PoissonLogLikelihoodWithLinearModelForMeanAndGatedProjDataWithMotion.h:164
Succeeded set_up_before_sensitivity(shared_ptr< const TargetT > const &target_sptr) override
set-up specifics for the derived class
void set_additive_proj_data_sptr(const shared_ptr< ExamData > &) override
set_additive_proj_data_sptr
bool _zero_seg0_end_planes
signals whether to zero the data in the end planes of the projection data
Definition PoissonLogLikelihoodWithLinearModelForMeanAndGatedProjDataWithMotion.h:171
Succeeded actual_accumulate_sub_Hessian_times_input_without_penalty(TargetT &output, const TargetT &current_image_estimate, const TargetT &input, const int subset_num) const override
Implementation of the function computes the sub-Hessian and multiplies by a vector.
int _max_segment_num_to_process
the maximum absolute ring difference number to use in the reconstruction
Definition PoissonLogLikelihoodWithLinearModelForMeanAndGatedProjDataWithMotion.h:149
void set_defaults() override
Sets defaults before parsing.
Definition PoissonLogLikelihoodWithLinearModelForMeanAndGatedProjDataWithMotion.cxx:60
std::string _normalisation_gated_proj_data_filename
name of file in which normalisation projection data are stored
Definition PoissonLogLikelihoodWithLinearModelForMeanAndGatedProjDataWithMotion.h:160
TargetT * construct_target_ptr() const override
Returns a pointer to a newly allocated target object (with 0 data).
Definition PoissonLogLikelihoodWithLinearModelForMeanAndGatedProjDataWithMotion.cxx:236
Succeeded actual_add_multiplication_with_approximate_sub_Hessian_without_penalty(TargetT &output, const TargetT &input, const int subset_num) const override
Implementation of the function that multiplies the approximate sub-Hessian with a vector.
void set_normalisation_sptr(const shared_ptr< BinNormalisation > &) override
set_normalisation_sptr
GatedDiscretisedDensity _gated_image_template
gated image template
Definition PoissonLogLikelihoodWithLinearModelForMeanAndGatedProjDataWithMotion.h:179
shared_ptr< ProjectorByBinPair > _projector_pair_ptr
Stores the projectors that are used for the computations.
Definition PoissonLogLikelihoodWithLinearModelForMeanAndGatedProjDataWithMotion.h:169
void initialise_keymap() override
sets parsing keys
Definition PoissonLogLikelihoodWithLinearModelForMeanAndGatedProjDataWithMotion.cxx:107
std::string _input_filename
Filename with input projection data.
Definition PoissonLogLikelihoodWithLinearModelForMeanAndGatedProjDataWithMotion.h:139
shared_ptr< GatedProjData > _gated_proj_data_sptr
points to the object for the total input projection data
Definition PoissonLogLikelihoodWithLinearModelForMeanAndGatedProjDataWithMotion.h:145
static const char *const registered_name
Name which will be used when parsing a GeneralisedObjectiveFunction object.
Definition PoissonLogLikelihoodWithLinearModelForMeanAndGatedProjDataWithMotion.h:71
std::string _additive_gated_proj_data_filename
name of file in which additive projection data are stored
Definition PoissonLogLikelihoodWithLinearModelForMeanAndGatedProjDataWithMotion.h:157
void actual_compute_subset_gradient_without_penalty(TargetT &gradient, const TargetT &current_estimate, const int subset_num, const bool add_sensitivity) override
computes the subset gradient of the objective function without the penalty (optional: add subset sens...
int _motion_correction_type
Definition PoissonLogLikelihoodWithLinearModelForMeanAndGatedProjDataWithMotion.h:173
bool post_processing() override
This will be called at the end of the parsing.
Definition PoissonLogLikelihoodWithLinearModelForMeanAndGatedProjDataWithMotion.cxx:178
bool actual_subsets_are_approximately_balanced(std::string &warning_message) const override
Implementation of function that checks subset balancing.
An objective function class appropriate for PET emission data.
Definition PoissonLogLikelihoodWithLinearModelForMeanAndProjData.h:125
a base class for LogLikelihood of independent Poisson variables where the mean values are linear comb...
Definition PoissonLogLikelihoodWithLinearModelForMean.h:112
Abstract base class for all projector pairs.
Definition ProjectorByBinPair.h:45
Parent class for all leaves in a RegisteredObject hierarchy that do parsing of parameter files.
Definition RegisteredParsingObject.h:78
a class containing an enumeration type that can be used by functions to signal successful operation o...
Definition Succeeded.h:44
Class used for storing time gate durations.
Definition TimeGateDefinitions.h:43
A templated class for vectors, but with indices starting not from 0.
Definition VectorWithOffset.h:65
Import of std::shared_ptr, std::dynamic_pointer_cast and std::static_pointer_cast into the stir names...