STIR  6.3.0
PoissonLogLikelihoodWithLinearModelForMean.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2003 - 2011-01-14, Hammersmith Imanet Ltd
3  Copyright (C) 2012, Kris Thielemans
4 
5  SPDX-License-Identifier: Apache-2.0
6 
7  See STIR/LICENSE.txt for details
8 */
18 #ifndef __stir_recon_buildblock_PoissonLogLikelihoodWithLinearModelForMean_H__
19 #define __stir_recon_buildblock_PoissonLogLikelihoodWithLinearModelForMean_H__
20 
22 
23 START_NAMESPACE_STIR
24 
110 template <typename TargetT>
111 class PoissonLogLikelihoodWithLinearModelForMean : public GeneralisedObjectiveFunction<TargetT>
112 {
113 private:
114  typedef GeneralisedObjectiveFunction<TargetT> base_type;
115 
116 public:
117  // PoissonLogLikelihoodWithLinearModelForMean();
118 
120 
132  void compute_sub_gradient_without_penalty(TargetT& gradient, const TargetT& current_estimate, const int subset_num) override;
133 
135 
146  virtual void
147  compute_sub_gradient_without_penalty_plus_sensitivity(TargetT& gradient, const TargetT& current_estimate, const int subset_num);
148 
150 
162  Succeeded set_up(shared_ptr<TargetT> const& target_sptr) override;
163 
165  const TargetT& get_sensitivity() const;
167  const TargetT& get_subset_sensitivity(const int subset_num) const;
168 
170  virtual void add_subset_sensitivity(TargetT& sensitivity, const int subset_num) const = 0;
171 
173 
177  bool get_use_subset_sensitivities() const;
178 
180  bool get_recompute_sensitivity() const;
181 
183 
184  std::string get_sensitivity_filename() const;
186 
190  std::string get_subsensitivity_filenames() const;
191 
193 
194  std::string get_subsensitivity_filename(const int subset_num) const;
195 
203  void set_recompute_sensitivity(const bool);
204  void set_subset_sensitivity_sptr(const shared_ptr<TargetT>&, const int subset_num);
205 
207  void set_use_subset_sensitivities(const bool);
208 
210 
211  void set_sensitivity_filename(const std::string&);
213 
219  void set_subsensitivity_filenames(const std::string&);
221 
225  void fill_nonidentifiable_target_parameters(TargetT& target, const float value) const override;
226 
227 private:
228  std::string sensitivity_filename;
229  std::string subsensitivity_filenames;
230  bool recompute_sensitivity;
231  bool use_subset_sensitivities;
232 
233  VectorWithOffset<shared_ptr<TargetT>> subsensitivity_sptrs;
234  shared_ptr<TargetT> sensitivity_sptr;
235 
237  shared_ptr<TargetT> get_subset_sensitivity_sptr(const int subset_num) const;
239 
246  void set_total_or_subset_sensitivities();
247 
248 protected:
250  virtual Succeeded set_up_before_sensitivity(shared_ptr<const TargetT> const& target_sptr) = 0;
251 
253 
257  void compute_sensitivities();
258 
260 
274  virtual void actual_compute_subset_gradient_without_penalty(TargetT& gradient,
275  const TargetT& current_estimate,
276  const int subset_num,
277  const bool add_sensitivity)
278  = 0;
279 
281 
284  void set_defaults() override;
285  void initialise_keymap() override;
286  bool post_processing() override;
287 };
288 
289 END_NAMESPACE_STIR
290 
291 //#include "stir/recon_buildblock/PoissonLogLikelihoodWithLinearModelForMean.inl"
292 
293 #endif
Declaration of class stir::GeneralisedObjectiveFunction.