23#ifndef __BackProjectorByBinUsingInterpolation_h_
24#define __BackProjectorByBinUsingInterpolation_h_
33template <
typename elemT>
35template <
typename elemT>
36class RelatedViewgrams;
37template <
typename elemT>
38class VoxelsOnCartesianGrid;
40class ProjDataInfoCylindricalArcCorr;
41class DataSymmetriesForBins_PET_CartesianGrid;
63 const float ring_spacing2;
69 const float backprojection_normalisation;
71 const bool use_exact_Jacobian_now;
74 explicit JacobianForIntBP(
const shared_ptr<const ProjDataInfoCylindricalArcCorr> proj_data_info_sptr,
bool exact);
76 float operator()(
const float delta,
const float s)
const
79 if (use_exact_Jacobian_now)
80 tmp = 4 * (R2 - dxy2 * s * s);
83 return tmp / pow(tmp + ring_spacing2 * delta * delta, 1.5F) * backprojection_normalisation;
147 void set_up(
const shared_ptr<const ProjDataInfo>& proj_data_info_ptr,
175 shared_ptr<DataSymmetriesForBins_PET_CartesianGrid> symmetries_ptr;
178 bool use_piecewise_linear_interpolation_now;
180 bool use_exact_Jacobian_now;
185 bool do_symmetry_90degrees_min_phi;
186 bool do_symmetry_180degrees_min_phi;
187 bool do_symmetry_swap_segment;
188 bool do_symmetry_swap_s;
189 bool do_symmetry_shift_z;
194struct ProjDataForIntBP
201 float min90__pos_sp1;
203 float min90__neg_sp1;
205 float plus90__pos_sp1;
207 float plus90__neg_sp1;
209 float min180__pos_sp1;
211 float min180__neg_sp1;
217 const int min_axial_pos_num,
218 const int max_axial_pos_num,
219 const int min_tangential_pos_num,
220 const int max_tangential_pos_num)
override;
233 const int min_axial_pos_num,
234 const int max_axial_pos_num,
235 const int min_tangential_pos_num,
236 const int max_tangential_pos_num);
251 const int min_axial_pos_num,
252 const int max_axial_pos_num,
253 const int min_tangential_pos_num,
254 const int max_tangential_pos_num);
270 static void piecewise_linear_interpolation_backproj3D_Cho_view_viewplus90(
273 const shared_ptr<const ProjDataInfoCylindricalArcCorr> proj_data_info_sptr,
279 const int num_planes_per_axial_pos,
280 const float axial_pos_to_z_offset);
282 static void piecewise_linear_interpolation_backproj3D_Cho_view_viewplus90_180minview_90minview(
285 const shared_ptr<const ProjDataInfoCylindricalArcCorr> proj_data_info_sptr,
291 const int num_planes_per_axial_pos,
292 const float axial_pos_to_z_offset);
295 linear_interpolation_backproj3D_Cho_view_viewplus90(
Array<4, float> const& Projptr,
297 const shared_ptr<const ProjDataInfoCylindricalArcCorr> proj_data_info_sptr,
303 const int num_planes_per_axial_pos,
304 const float axial_pos_to_z_offset);
306 static void linear_interpolation_backproj3D_Cho_view_viewplus90_180minview_90minview(
309 const shared_ptr<const ProjDataInfoCylindricalArcCorr> proj_data_info_sptr,
315 const int num_planes_per_axial_pos,
316 const float axial_pos_to_z_offset);
328 void set_defaults()
override;
329 void initialise_keymap()
override;
forward declaration of stir::Array class for multi-dimensional (numeric) arrays
Declares class stir::BackProjectorByBin.
Declaration of class stir::RegisteredParsingObject.
This class defines multi-dimensional (numeric) arrays.
Definition Array.h:78
const DataSymmetriesForViewSegmentNumbers * get_symmetries_used() const override
Gets the symmetries used by this backprojector.
Definition BackProjectorByBinUsingInterpolation.cxx:90
void set_up(const shared_ptr< const ProjDataInfo > &proj_data_info_ptr, const shared_ptr< const DiscretisedDensity< 3, float > > &density_info_ptr) override
Stores all necessary geometric info.
Definition BackProjectorByBinUsingInterpolation.cxx:118
void use_piecewise_linear_interpolation(const bool use_piecewise_linear_interpolation)
Use this to switch between ordinary linear interpolation and piece-wise linear interpolation in the a...
Definition BackProjectorByBinUsingInterpolation.cxx:179
void use_exact_Jacobian(const bool use_exact_Jacobian)
Use this to switch between the exact Jacobian and an approximate Jacobian (valid for s << R).
Definition BackProjectorByBinUsingInterpolation.cxx:167
static const char *const registered_name
Name which will be used when parsing a BackProjectorByBin object.
Definition BackProjectorByBinUsingInterpolation.h:131
BackProjectorByBinUsingInterpolation(const bool use_piecewise_linear_interpolation=true, const bool use_exact_Jacobian=true)
The constructor defaults to using piecewise linear interpolation and the exact Jacobian.
Definition BackProjectorByBinUsingInterpolation.cxx:97
A class for storing coordinates and value of a single projection bin.
Definition Bin.h:49
A class for encoding/finding symmetries. Works only on ViewSegmentNumbers (instead of Bin).
Definition DataSymmetriesForViewSegmentNumbers.h:50
This abstract class is the basis for all image representations.
Definition DiscretisedDensity.h:99
Parent class for all leaves in a RegisteredObject hierarchy that do parsing of parameter files.
Definition RegisteredParsingObject.h:78
A class for 2d projection data.
Definition Viewgram.h:49
This class is used to represent voxelised densities on a cuboid grid (3D).
Definition VoxelsOnCartesianGrid.h:46
Import of std::shared_ptr, std::dynamic_pointer_cast and std::static_pointer_cast into the stir names...