STIR
6.2.0
|
Abstract base class for all forward projectors. More...
#include "stir/recon_buildblock/ForwardProjectorByBin.h"
Public Member Functions | |
ForwardProjectorByBin () | |
Default constructor calls reset_timers() | |
virtual void | set_up (const shared_ptr< const ProjDataInfo > &proj_data_info_ptr, const shared_ptr< const DiscretisedDensity< 3, float >> &density_info_sptr)=0 |
Stores all necessary geometric info. More... | |
virtual const DataSymmetriesForViewSegmentNumbers * | get_symmetries_used () const =0 |
Informs on which symmetries the projector handles. More... | |
void | forward_project (ProjData &, const DiscretisedDensity< 3, float > &, int subset_num=0, int num_subsets=1, bool zero=true) |
project the volume into the whole or a subset of proj_data, optionally zeroing the rest More... | |
virtual void | forward_project (ProjData &, int subset_num=0, int num_subsets=1, bool zero=true) |
project the volume into the whole proj_data More... | |
void | forward_project (RelatedViewgrams< float > &) |
project the volume into the viewgrams More... | |
void | forward_project (RelatedViewgrams< float > &, const int min_axial_pos_num, const int max_axial_pos_num) |
void | forward_project (RelatedViewgrams< float > &, const int min_axial_pos_num, const int max_axial_pos_num, const int min_tangential_pos_num, const int max_tangential_pos_num) |
virtual void | set_input (const DiscretisedDensity< 3, float > &) |
Set input. | |
void | set_pre_data_processor (shared_ptr< DataProcessor< DiscretisedDensity< 3, float >>> pre_data_processor_sptr) |
Set data processor to use before forward projection. MUST BE CALLED BEFORE SET_INPUT. | |
Public Member Functions inherited from stir::TimedObject | |
void | reset_timers () |
reset all timers kept by this object | |
void | stop_timers () const |
stop all timers kept by this object More... | |
void | start_timers (bool do_reset=false) const |
start all timers kept by this object More... | |
double | get_CPU_timer_value () const |
get current value of the CPU timer (since first use or last reset) | |
double | get_wall_clock_timer_value () const |
get current value of the wall-clock timer (since first use or last reset) | |
Public Member Functions inherited from stir::RegisteredObjectBase | |
virtual std::string | get_registered_name () const =0 |
Returns the name of the type of the object. More... | |
Public Member Functions inherited from stir::ParsingObject | |
ParsingObject (const ParsingObject &) | |
ParsingObject & | operator= (const ParsingObject &) |
void | ask_parameters () |
virtual std::string | parameter_info () |
bool | parse (std::istream &f) |
bool | parse (const char *const filename) |
Protected Member Functions | |
virtual void | actual_forward_project (RelatedViewgrams< float > &, const DiscretisedDensity< 3, float > &, const int min_axial_pos_num, const int max_axial_pos_num, const int min_tangential_pos_num, const int max_tangential_pos_num) |
This virtual function has to be implemented by the derived class. | |
virtual void | actual_forward_project (RelatedViewgrams< float > &viewgrams, const int min_axial_pos_num, const int max_axial_pos_num, const int min_tangential_pos_num, const int max_tangential_pos_num) |
virtual void | check (const ProjDataInfo &proj_data_info) const |
check if the argument is the same as what was used for set_up() More... | |
virtual void | check (const ProjDataInfo &proj_data_info, const DiscretisedDensity< 3, float > &density_info) const |
check if the arguments are the same as what was used for set_up() More... | |
void | set_defaults () override |
Set defaults before parsing. | |
void | initialise_keymap () override |
Initialise all keywords. | |
Protected Member Functions inherited from stir::ParsingObject | |
virtual bool | post_processing () |
This will be called at the end of the parsing. More... | |
virtual void | set_key_values () |
This will be called before parsing or parameter_info is called. More... | |
Protected Attributes | |
bool | _already_set_up |
shared_ptr< DiscretisedDensity< 3, float > > | _density_sptr |
The density ptr set with set_up() | |
shared_ptr< DataProcessor< DiscretisedDensity< 3, float > > > | _pre_data_processor_sptr |
shared_ptr< const ProjDataInfo > | _proj_data_info_sptr |
ProjDataInfo set by set_up() | |
Protected Attributes inherited from stir::ParsingObject | |
KeyParser | parser |
Additional Inherited Members | |
Static Public Member Functions inherited from stir::RegisteredObject< ForwardProjectorByBin > | |
static ForwardProjectorByBin * | read_registered_object (std::istream *in, const std::string ®istered_name) |
Construct a new object (of a type derived from Root, its actual type determined by the registered_name parameter) by parsing the istream. More... | |
static ForwardProjectorByBin * | ask_type_and_parameters () |
ask the user for the type, and then calls read_registered_object(0, type) More... | |
static void | list_registered_names (std::ostream &stream) |
List all possible registered names to the stream. More... | |
Protected Types inherited from stir::RegisteredObject< ForwardProjectorByBin > | |
typedef ForwardProjectorByBin *(* | RootFactory) (std::istream *) |
The type of a root factory is a function, taking an istream* as argument, and returning a Root*. | |
typedef FactoryRegistry< std::string, RootFactory, interfile_less > | RegistryType |
The type of the registry. | |
Static Protected Member Functions inherited from stir::RegisteredObject< ForwardProjectorByBin > | |
static RegistryType & | registry () |
Static function returning the registry. More... | |
Abstract base class for all forward projectors.
|
pure virtual |
Stores all necessary geometric info.
If necessary, set_up() can be called more than once.
Derived classes can assume that forward_project() will be called with input corresponding to the arguments of the last call to set_up().
Implemented in stir::ForwardProjectorByBinUsingRayTracing, stir::ForwardProjectorByBinNiftyPET, stir::ForwardProjectorByBinParallelproj, stir::PresmoothingForwardProjectorByBin, stir::ForwardProjectorByBinUsingProjMatrixByBin, and stir::PostsmoothingForwardProjectorByBin.
References _density_sptr, and _proj_data_info_sptr.
Referenced by stir::ForwardProjectorByBinUsingProjMatrixByBin::set_up(), stir::ForwardProjectorByBinParallelproj::set_up(), and stir::ForwardProjectorByBinNiftyPET::set_up().
|
pure virtual |
Informs on which symmetries the projector handles.
It should get data related by at least those symmetries. Otherwise, a run-time error will occur (unless the derived class has other behaviour).
Implemented in stir::ForwardProjectorByBinUsingRayTracing, stir::ForwardProjectorByBinNiftyPET, stir::PresmoothingForwardProjectorByBin, stir::ForwardProjectorByBinParallelproj, stir::ForwardProjectorByBinUsingProjMatrixByBin, and stir::PostsmoothingForwardProjectorByBin.
Referenced by forward_project().
void stir::ForwardProjectorByBin::forward_project | ( | ProjData & | proj_data, |
const DiscretisedDensity< 3, float > & | image, | ||
int | subset_num = 0 , |
||
int | num_subsets = 1 , |
||
bool | zero = true |
||
) |
project the volume into the whole or a subset of proj_data, optionally zeroing the rest
it overwrites the data already present in the projection data.
The optional arguments can be used to project only a subset of the data. Subsets are determined as per detail::find_basic_vs_nums_in_subset(). However, this usage will likely be phased out at later stage.
References actual_forward_project(), stir::RelatedViewgrams< elemT >::begin(), check(), stir::RelatedViewgrams< elemT >::end(), stir::error(), stir::DataSymmetriesForViewSegmentNumbers::find_basic_view_segment_numbers(), stir::RelatedViewgrams< elemT >::get_basic_view_segment_num(), stir::RelatedViewgrams< elemT >::get_num_viewgrams(), stir::RelatedViewgrams< elemT >::get_proj_data_info_sptr(), get_symmetries_used(), set_input(), stir::TimedObject::stop_timers(), and stir::SegmentIndices::timing_pos_num().
Referenced by forward_project().
|
virtual |
project the volume into the whole proj_data
it overwrites the data already present in the projection data
References _density_sptr, check(), stir::error(), stir::ProjData::fill(), stir::detail::find_basic_vs_nums_in_subset(), forward_project(), stir::ProjData::get_empty_related_viewgrams(), stir::ProjData::get_max_segment_num(), stir::ProjData::get_min_segment_num(), stir::ProjData::get_proj_data_info_sptr(), get_symmetries_used(), stir::info(), stir::SegmentIndices::segment_num(), stir::ProjData::set_related_viewgrams(), stir::ViewgramIndices::view_num(), and stir::warning().
void stir::ForwardProjectorByBin::forward_project | ( | RelatedViewgrams< float > & | viewgrams | ) |
project the volume into the viewgrams
it overwrites the data already present in the viewgram
References _density_sptr, actual_forward_project(), stir::RelatedViewgrams< elemT >::begin(), check(), stir::RelatedViewgrams< elemT >::end(), stir::error(), stir::DataSymmetriesForViewSegmentNumbers::find_basic_view_segment_numbers(), forward_project(), stir::RelatedViewgrams< elemT >::get_basic_view_segment_num(), stir::RelatedViewgrams< elemT >::get_num_viewgrams(), stir::RelatedViewgrams< elemT >::get_proj_data_info_sptr(), get_symmetries_used(), and stir::SegmentIndices::timing_pos_num().
|
protectedvirtual |
check if the argument is the same as what was used for set_up()
calls error() if anything is wrong.
If overriding this function in a derived class, you need to call this one.
References _proj_data_info_sptr, stir::error(), and stir::ProjDataInfo::parameter_info().
Referenced by check(), forward_project(), stir::ForwardProjectorByBinParallelproj::set_up(), and stir::ForwardProjectorByBinNiftyPET::set_up().
|
protectedvirtual |
check if the arguments are the same as what was used for set_up()
calls error() if anything is wrong.
If overriding this function in a derived class, you need to call this one.
Calls check(const ProjDataInfo&)
References _density_sptr, check(), and stir::error().