STIR
6.2.0
|
Computes projection matrix elements for VoxelsOnCartesianGrid images by using a Length of Intersection (LOI) model. More...
#include "stir_experimental/recon_buildblock/ProjMatrixByDenselUsingRayTracing.h"
Public Member Functions | |
ProjMatrixByDenselUsingRayTracing () | |
Default constructor (calls set_defaults()) | |
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. More... | |
const DataSymmetriesForDensels * | get_symmetries_ptr () const override |
get a pointer to an object encoding all symmetries that are used by this ProjMatrixByDensel | |
float | get_element (const Bin &, const CartesianCoordinate3D< float > &) const override |
this member computes a single element of the projection matrix More... | |
Public Member Functions inherited from stir::RegisteredParsingObject< ProjMatrixByDenselUsingRayTracing, ProjMatrixByDenselOnCartesianGridUsingElement > | |
std::string | get_registered_name () const override |
Returns Derived::registered_name. | |
std::string | parameter_info () override |
Returns a string with all parameters and their values, in a form suitable for parsing again. | |
Public Member Functions inherited from stir::ProjMatrixByDensel | |
void | get_proj_matrix_elems_for_one_densel (ProjMatrixElemsForOneDensel &, const Densel &) const |
The main method for getting a column of the matrix. More... | |
void | enable_cache (bool v) |
Public Member Functions inherited from stir::ParsingObject | |
ParsingObject (const ParsingObject &) | |
ParsingObject & | operator= (const ParsingObject &) |
void | ask_parameters () |
bool | parse (std::istream &f) |
bool | parse (const char *const filename) |
Static Public Attributes | |
static const char *const | registered_name = "Ray Tracing" |
Name which will be used when parsing a ProjMatrixByDensel object. | |
Additional Inherited Members | |
Static Public Member Functions inherited from stir::RegisteredParsingObject< ProjMatrixByDenselUsingRayTracing, ProjMatrixByDenselOnCartesianGridUsingElement > | |
static ProjMatrixByDenselOnCartesianGridUsingElement * | read_from_stream (std::istream *) |
Construct a new object (of type Derived) by parsing the istream. More... | |
Static Public Member Functions inherited from stir::RegisteredObject< ProjMatrixByDensel > | |
static ProjMatrixByDensel * | 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 ProjMatrixByDensel * | 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< ProjMatrixByDensel > | |
typedef ProjMatrixByDensel *(* | 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. | |
Protected Member Functions inherited from stir::ProjMatrixByDenselOnCartesianGridUsingElement | |
void | calculate_proj_matrix_elems_for_one_densel (ProjMatrixElemsForOneDensel &) const override |
Calculates all non-zero elements for a particular densel. More... | |
Protected Member Functions inherited from stir::ProjMatrixByDensel | |
ProjMatrixByDensel () | |
default ctor (enables caching) | |
Succeeded | get_cached_proj_matrix_elems_for_one_densel (ProjMatrixElemsForOneDensel &) const |
The method that tries to get data from the cache. More... | |
void | cache_proj_matrix_elems_for_one_densel (const ProjMatrixElemsForOneDensel &) const |
The method to store data in the cache. More... | |
Protected Member Functions inherited from stir::ParsingObject | |
virtual void | set_key_values () |
This will be called before parsing or parameter_info is called. More... | |
Static Protected Member Functions inherited from stir::RegisteredObject< ProjMatrixByDensel > | |
static RegistryType & | registry () |
Static function returning the registry. More... | |
Protected Attributes inherited from stir::ProjMatrixByDenselOnCartesianGridUsingElement | |
shared_ptr< const ProjDataInfo > | proj_data_info_ptr |
CartesianCoordinate3D< float > | grid_spacing |
CartesianCoordinate3D< float > | origin |
float | min_z_index |
float | max_z_index |
Protected Attributes inherited from stir::ProjMatrixByDensel | |
bool | cache_disabled |
Protected Attributes inherited from stir::ParsingObject | |
KeyParser | parser |
Computes projection matrix elements for VoxelsOnCartesianGrid images by using a Length of Intersection (LOI) model.
Currently, the LOIs are divided by voxel_size.x(), unless NEWSCALE
is #defined
during compilation time of ProjMatrixByDenselUsingRayTracing.cxx.
If the z voxel size is exactly twice the sampling in axial direction, multiple LORs are used, to avoid missing voxels. (TODOdoc describe how).
Currently, a FOV is used which is circular, and is slightly 'inside' the image (i.e. the radius is about 1 voxel smaller than the maximum possible).
The implementation uses RayTraceVoxelsOnCartesianGrid().
|
overridevirtual |
Stores all necessary geometric info.
Note that the density_info_ptr is not stored in this object. It's only used to get some info on sizes etc.
Reimplemented from stir::ProjMatrixByDenselOnCartesianGridUsingElement.
References stir::error(), stir::DiscretisedDensity< num_dimensions, elemT >::get_origin(), stir::Array< num_dimensions, elemT >::get_regular_range(), stir::VoxelsOnCartesianGrid< elemT >::get_voxel_size(), and stir::warning().
|
overridevirtual |
this member computes a single element of the projection matrix
bin | The bin-coordinates specifying the row of the projection matrix |
densel_ctr | The densel coordinates specifying the column of the projection matrix |
Ideally, get_element should be implemented such that tiny elements are truncated to 0, to avoid storing (and using) elements that not really contribute to the result.
Implements stir::ProjMatrixByDenselOnCartesianGridUsingElement.
References _PI, stir::ProjDataInfoCylindricalNoArcCorr::get_det_num_pair_for_view_tangential_pos_num(), stir::Scanner::get_num_detectors_per_ring(), stir::ProjDataInfo::get_scanner_ptr(), stir::ProjDataInfo::get_t(), stir::ProjDataInfo::get_tantheta(), stir::square(), stir::Bin::tangential_pos_num(), and stir::ViewgramIndices::view_num().