STIR
6.2.0
|
projection data info for data corresponding to 'Generic' sampling. More...
#include "stir/ProjDataInfoGeneric.h"
Public Types | |
typedef std::vector< std::pair< int, int > > | RingNumPairs |
Type used by get_all_ring_pairs_for_segment_axial_pos_num() | |
Public Types inherited from stir::ProjDataInfoCylindrical | |
typedef std::vector< std::pair< int, int > > | RingNumPairs |
Type used by get_all_ring_pairs_for_segment_axial_pos_num() | |
Public Member Functions | |
ProjDataInfoGeneric () | |
Constructors. | |
ProjDataInfoGeneric (const shared_ptr< Scanner > &scanner_ptr, const VectorWithOffset< int > &num_axial_poss_per_segment, const VectorWithOffset< int > &min_ring_diff, const VectorWithOffset< int > &max_ring_diff, const int num_views, const int num_tangential_poss) | |
Constructor given all the necessary information. More... | |
float | get_tantheta (const Bin &) const override |
Get tangent of the co-polar angle of the normal to the projection plane. More... | |
float | get_phi (const Bin &) const override |
find phi from correspoding lor | |
float | get_t (const Bin &) const override |
Get value of the (roughly) axial coordinate in the projection plane (in mm) More... | |
float | get_m (const Bin &) const override |
Return z-coordinate of the middle of the LOR. More... | |
void | get_LOR (LORInAxialAndNoArcCorrSinogramCoordinates< float > &lor, const Bin &bin) const override |
warning Find lor from cartesian coordinates of detector pair | |
void | set_azimuthal_angle_offset (const float angle)=delete |
void | set_azimuthal_angle_sampling (const float angle)=delete |
void | set_num_views (const int new_num_views) override |
set new number of views (currently calls error() unless nothing changes) | |
float | get_azimuthal_angle_sampling () const =delete |
float | get_azimuthal_angle_offset () const =delete |
float | get_ring_radius () const =delete |
void | set_ring_radii_for_all_views (const VectorWithOffset< float > &new_ring_radius)=delete |
VectorWithOffset< float > | get_ring_radii_for_all_views () const =delete |
float | get_ring_spacing () const |
return an average ring-spacing (from Scanner) | |
float | get_sampling_in_t (const Bin &) const override |
Get sampling distance in the t coordinate. More... | |
float | get_sampling_in_m (const Bin &) const override |
Get sampling distance in the m coordinate. More... | |
float | get_axial_sampling (int segment_num) const override |
Get the axial sampling (e.g in z_direction) More... | |
bool | axial_sampling_is_uniform () const override |
Return if axial sampling makes sense. More... | |
std::string | parameter_info () const override |
Return a string describing the object. | |
Public Member Functions inherited from stir::ProjDataInfoCylindrical | |
ProjDataInfoCylindrical () | |
Constructors. | |
ProjDataInfoCylindrical (const shared_ptr< Scanner > &scanner_ptr, const VectorWithOffset< int > &num_axial_poss_per_segment, const VectorWithOffset< int > &min_ring_diff, const VectorWithOffset< int > &max_ring_diff, const int num_views, const int num_tangential_poss) | |
Constructor given all the necessary information. More... | |
void | set_azimuthal_angle_offset (const float angle) |
Set azimuthal angle offset (in radians) | |
void | set_azimuthal_angle_sampling (const float angle) |
Set the azimuthal sampling (in radians) | |
void | set_tof_mash_factor (const int new_num) override |
The tof mashing factor (for TOF scanners). More... | |
float | get_azimuthal_angle_offset () const |
Get azimuthal angle offset (in radians) | |
float | get_azimuthal_angle_sampling () const |
Get the azimuthal sampling (in radians) | |
float | get_average_ring_difference (int segment_num) const |
Get average ring difference for the given segment. | |
int | get_min_ring_difference (int segment_num) const |
Get minimum ring difference for the given segment. | |
int | get_max_ring_difference (int segment_num) const |
Get maximum ring difference for the given segment. | |
void | set_min_ring_difference (int min_ring_diff_v, int segment_num) |
Set minimum ring difference. | |
void | set_max_ring_difference (int max_ring_diff_v, int segment_num) |
Set maximum ring difference. | |
void | set_num_axial_poss_per_segment (const VectorWithOffset< int > &num_axial_poss_per_segment) override |
Set number of axial positions per segment. More... | |
void | set_min_axial_pos_num (const int min_ax_pos_num, const int segment_num) override |
Set minimum axial position number for 1 segment. More... | |
void | set_max_axial_pos_num (const int max_ax_pos_num, const int segment_num) override |
Set maximum axial position number for 1 segment. More... | |
void | reduce_segment_range (const int min_segment_num, const int max_segment_num) override |
Set a new range of segment numbers. More... | |
void | set_ring_radii_for_all_views (const VectorWithOffset< float > &new_ring_radius) |
Set detector ring radius for all views. | |
VectorWithOffset< float > | get_ring_radii_for_all_views () const |
Get detector ring radius for all views. | |
float | get_ring_radius () const |
Get detector ring radius. | |
float | get_ring_radius (const int view_num) const |
float | get_ring_spacing () const |
Get detector ring spacing. | |
void | set_ring_spacing (float ring_spacing_v) |
Set detector ring spacing. | |
int | get_view_mashing_factor () const |
Get the mashing factor, i.e. how many 'original' views are combined. More... | |
Succeeded | get_segment_num_for_ring_difference (int &segment_num, const int ring_diff) const |
Find which segment a particular ring difference belongs to. More... | |
Succeeded | get_segment_axial_pos_num_for_ring_pair (int &segment_num, int &axial_pos_num, const int ring1, const int ring2) const |
Find to which segment and axial position a ring pair contributes. More... | |
const RingNumPairs & | get_all_ring_pairs_for_segment_axial_pos_num (const int segment_num, const int axial_pos_num) const |
Find all ring pairs that contribute to a segment and axial position. More... | |
unsigned | get_num_ring_pairs_for_segment_axial_pos_num (const int segment_num, const int axial_pos_num) const |
Find the number of ring pairs that contribute to a segment and axial position. More... | |
void | get_ring_pair_for_segment_axial_pos_num (int &ring1, int &ring2, const int segment_num, const int axial_pos_num) const |
Find a ring pair that contributes to a segment and axial position. More... | |
Public Member Functions inherited from stir::ProjDataInfo | |
ProjDataInfo () | |
Construct an empty object. | |
ProjDataInfo (const shared_ptr< Scanner > &scanner_ptr, const VectorWithOffset< int > &num_axial_pos_per_segment, const int num_views, const int num_tangential_poss) | |
Constructor setting all relevant info for a ProjDataInfo. More... | |
ProjDataInfo (const shared_ptr< Scanner > &scanner_ptr, const VectorWithOffset< int > &num_axial_pos_per_segment, const int num_views, const int num_tangential_poss, const int tof_mash_factor) | |
Overloaded Contructor with TOF initialisation. | |
virtual ProjDataInfo * | clone () const =0 |
Standard trick for a 'virtual copy-constructor'. | |
shared_ptr< ProjDataInfo > | create_shared_clone () const |
Like clone() but return a shared_ptr. | |
shared_ptr< ProjDataInfo > | create_non_tof_clone () const |
Similar to create_shared_clone() but returns a non-tof version of ProjDataInfo setting tof mashing factor = 0. | |
virtual | ~ProjDataInfo () |
Destructor. | |
bool | is_tof_data () const |
Determine if TOF data from tof_mash_factor and num_tof_bins. | |
virtual std::vector< int > | get_original_view_nums () const |
Return a list of view numbers in the "original" data if subsets are used. More... | |
virtual Bin | get_bin (const LOR< float > &, const double delta_time=0.0) const =0 |
Find the bin in the projection data that 'contains' an LOR. More... | |
const Scanner * | get_scanner_ptr () const |
Get scanner pointer. | |
shared_ptr< Scanner > | get_scanner_sptr () const |
Get scanner shared pointer. | |
void | set_bed_position_horizontal (const float bed_position_horizontal_arg) |
Vector which holds the lower and higher boundary for each TOF position, without the application of TOF mashing, in mm, for faster access. More... | |
float | get_bed_position_horizontal () const |
Get horizontal bed position. | |
void | set_bed_position_vertical (const float bed_position_vertical_arg) |
Set vertical bed position. | |
float | get_bed_position_vertical () const |
Get vertical bed position. | |
bool | has_energy_information () const |
virtual void | set_num_tangential_poss (const int num_tang_poss) |
Set number of tangential positions. More... | |
virtual void | set_min_tangential_pos_num (const int min_tang_poss) |
Set minimum tangential position number. More... | |
virtual void | set_max_tangential_pos_num (const int max_tang_poss) |
Set maximum tangential position number. More... | |
int | get_num_segments () const |
Get number of segments. | |
int | get_num_axial_poss (const int segment_num) const |
Get number of axial positions per segment. | |
int | get_num_views () const |
Get number of views. | |
int | get_num_tangential_poss () const |
Get number of tangential positions. | |
int | get_tof_bin (const double delta) const |
Get number of tof bin for a given time difference. | |
int | get_num_tof_poss () const |
Get number of TOF bins. | |
int | get_min_segment_num () const |
Get minimum segment number. | |
int | get_max_segment_num () const |
Get maximum segment number. | |
int | get_min_axial_pos_num (const int segment_num) const |
Get minimum axial position per segmnet. | |
int | get_max_axial_pos_num (const int segment_num) const |
Get maximum axial position per segment. | |
int | get_min_view_num () const |
Get minimum view number. | |
int | get_max_view_num () const |
Get maximum view number. | |
int | get_min_tangential_pos_num () const |
Get minimum tangential position number. | |
int | get_max_tangential_pos_num () const |
Get maximum tangential position number. | |
int | get_tof_mash_factor () const |
Get TOF mash factor. | |
int | get_min_tof_pos_num () const |
Get the index of the first TOF position. | |
int | get_max_tof_pos_num () const |
Get the index of the last timgin position. | |
int | get_num_sinograms () const |
Get the total number of sinograms. More... | |
int | get_num_non_tof_sinograms () const |
Get the number of non-tof sinograms. More... | |
std::size_t | size_all () const |
Get the total size of the data. | |
float | get_costheta (const Bin &) const |
Get cosine of the co-polar angle of the normal to the projection plane. More... | |
virtual float | get_s (const Bin &) const =0 |
Get value of the tangential coordinate in the projection plane (in mm) More... | |
float | get_k (const Bin &) const |
Get value of the TOF location along the LOR (in mm) k is a line segment connecting the centers of the two detectors. | |
double | get_tof_delta_time (const Bin &) const |
Get the value of the TOF timing difference (in ps) | |
virtual float | get_sampling_in_s (const Bin &) const |
Get sampling distance in the s coordinate. More... | |
float | get_sampling_in_k (const Bin &) const |
Get sampling distance in the k coordinate . | |
bool | operator== (const ProjDataInfo &proj) const |
check equality | |
bool | operator!= (const ProjDataInfo &proj) const |
virtual bool | operator>= (const ProjDataInfo &proj) const |
Check if *this contains proj . More... | |
Viewgram< float > | get_empty_viewgram (const ViewgramIndices &) const |
Get empty viewgram. | |
Sinogram< float > | get_empty_sinogram (const SinogramIndices &) const |
Get empty_sinogram. | |
SegmentByView< float > | get_empty_segment_by_view (const SegmentIndices &) const |
Get empty segment sino. | |
SegmentBySinogram< float > | get_empty_segment_by_sinogram (const SegmentIndices &) const |
Get empty segment view. | |
Viewgram< float > | get_empty_viewgram (const int view_num, const int segment_num, const bool make_num_tangential_poss_odd=false, const int timing_pos_num=0) const |
Get empty viewgram. More... | |
Sinogram< float > | get_empty_sinogram (const int ax_pos_num, const int segment_num, const bool make_num_tangential_poss_odd=false, const int timing_pos_num=0) const |
Get empty_sinogram. More... | |
SegmentByView< float > | get_empty_segment_by_view (const int segment_num, const bool make_num_tangential_poss_odd=false, const int timing_pos_num=0) const |
Get empty segment sino. More... | |
SegmentBySinogram< float > | get_empty_segment_by_sinogram (const int segment_num, const bool make_num_tangential_poss_odd=false, const int timing_pos_num=0) const |
Get empty segment view. More... | |
RelatedViewgrams< float > | get_empty_related_viewgrams (const ViewgramIndices &, const shared_ptr< DataSymmetriesForViewSegmentNumbers > &, const bool make_num_tangential_poss_odd=false, const int timing_pos_num=0) const |
Get empty related viewgrams, where the symmetries_ptr specifies the symmetries to use. More... | |
Protected Attributes | |
CartesianCoordinate3D< float > | z_shift |
Protected Attributes inherited from stir::ProjDataInfoCylindrical | |
bool | sampling_corresponds_to_physical_rings |
a variable that is set if the data corresponds to physical rings in the scanner More... | |
Additional Inherited Members | |
Static Public Member Functions inherited from stir::ProjDataInfo | |
static ProjDataInfo * | ask_parameters () |
Ask for the details and return a ProjDataInfo pointer. | |
static ProjDataInfo * | ProjDataInfoGE (const shared_ptr< Scanner > &scanner_ptr, const int max_delta, const int num_views, const int num_tangential_poss, const bool arc_corrected=true, const int tof_mash_factor=0) |
Construct a ProjDataInfo with span=3 for segment 0, but span=1 for others. More... | |
static ProjDataInfo * | ProjDataInfoCTI (const shared_ptr< Scanner > &scanner_ptr, const int span, const int max_delta, const int num_views, const int num_tangential_poss, const bool arc_corrected=true, const int tof_mash_factor=0) |
Old name for construct_proj_data_info() More... | |
static unique_ptr< ProjDataInfo > | construct_proj_data_info (const shared_ptr< Scanner > &scanner_sptr, const int span, const int max_delta, const int num_views, const int num_tangential_poss, const bool arc_corrected=true, const int tof_mash_factor=0) |
Construct a ProjDataInfo suitable with a given span. More... | |
Public Attributes inherited from stir::ProjDataInfo | |
VectorWithOffset< Float1Float2 > | tof_bin_boundaries_mm |
Vector which holds the lower and higher boundary for each TOF position in mm, for faster access. | |
VectorWithOffset< Float1Float2 > | tof_bin_boundaries_ps |
Vector which holds the lower and higher boundary for each TOF position in ps`, for faster access. | |
Protected Types inherited from stir::ProjDataInfo | |
typedef ProjDataInfo | root_type |
Protected Member Functions inherited from stir::ProjDataInfoCylindrical | |
bool | blindly_equals (const root_type *const) const override=0 |
projection data info for data corresponding to 'Generic' sampling.
This isn't completely generic as it assumes that there is "axial" (or "ring") coordinate and a "transaxial" (or "crystal"). However, their spacing can be arbitrary.
Currently this class is derived from ProjDataInfoCylindrical. Arguably it should be the other way around. However, this would break backwards compatibility dramatically, and break other pull-requests in progress. We will leave this for later. At present, we just delete
some member functions that do not make sense in the Generic case. There are a few ones left which might be removed in future, but are currently still used.
stir::ProjDataInfoGeneric::ProjDataInfoGeneric | ( | const shared_ptr< Scanner > & | scanner_ptr, |
const VectorWithOffset< int > & | num_axial_poss_per_segment, | ||
const VectorWithOffset< int > & | min_ring_diff, | ||
const VectorWithOffset< int > & | max_ring_diff, | ||
const int | num_views, | ||
const int | num_tangential_poss | ||
) |
Constructor given all the necessary information.
The min and max ring difference in each segment are passed as VectorWithOffsets. All three vectors have to have index ranges from min_segment_num to max_segment_num.
References stir::ProjDataInfoCylindrical::blindly_equals(), and stir::ProjDataInfo::blindly_equals().
|
inlineoverridevirtual |
Get tangent of the co-polar angle of the normal to the projection plane.
theta=0 for 'direct' planes (i.e. projection planes parallel to the scanner axis)
Reimplemented from stir::ProjDataInfoCylindrical.
|
inlineoverridevirtual |
Get value of the (roughly) axial coordinate in the projection plane (in mm)
t-axis is defined to be orthogonal to the s-axis (and to the vector normal to the projection plane
Reimplemented from stir::ProjDataInfoCylindrical.
|
inlineoverridevirtual |
Return z-coordinate of the middle of the LOR.
The 0 of the z-axis is chosen in the middle of the scanner.
warning In generic geometry m is calculated directly from lor while in cylindrical geometry m is calculated using m_offset and axial_sampling
Reimplemented from stir::ProjDataInfoCylindrical.
|
inlineoverridevirtual |
Get sampling distance in the t
coordinate.
For some coordinate systems, this might depend on the Bin. The default implementation computes it as
Reimplemented from stir::ProjDataInfoCylindrical.
|
inlineoverridevirtual |
Get sampling distance in the m
coordinate.
For some coordinate systems, this might depend on the Bin. The default implementation computes it as
Reimplemented from stir::ProjDataInfoCylindrical.
|
inlineoverridevirtual |
Get the axial sampling (e.g in z_direction)
Reimplemented from stir::ProjDataInfoCylindrical.
|
inlineoverridevirtual |
Return if axial sampling makes sense.
could be false
for block/generic cases
Reimplemented from stir::ProjDataInfoCylindrical.