STIR  6.2.0
Public Member Functions | List of all members
stir::ProjDataInfoCylindricalNoArcCorr Class Reference

Projection data info for data which are not arc-corrected. More...

#include "stir/ProjDataInfoCylindricalNoArcCorr.h"

Inheritance diagram for stir::ProjDataInfoCylindricalNoArcCorr:
Inheritance graph
[legend]

Public Member Functions

 ProjDataInfoCylindricalNoArcCorr ()
 Default constructor (leaves object in ill-defined state)
 
 ProjDataInfoCylindricalNoArcCorr (const shared_ptr< Scanner > scanner_ptr, const float ring_radius, const float angular_increment, const VectorWithOffset< int > &num_axial_pos_per_segment, const VectorWithOffset< int > &min_ring_diff_v, const VectorWithOffset< int > &max_ring_diff_v, const int num_views, const int num_tangential_poss, const int tof_mash_factor=0)
 Constructor completely specifying all parameters. More...
 
 ProjDataInfoCylindricalNoArcCorr (const shared_ptr< Scanner > scanner_ptr, const VectorWithOffset< int > &num_axial_pos_per_segment, const VectorWithOffset< int > &min_ring_diff_v, const VectorWithOffset< int > &max_ring_diff_v, const int num_views, const int num_tangential_poss, const int tof_mash_factor=0)
 Constructor which gets ring_radius and angular_increment from the scanner. More...
 
ProjDataInfoclone () const override
 Standard trick for a 'virtual copy-constructor'.
 
bool operator== (const self_type &) const
 
float get_s (const Bin &) const override
 Gets s coordinate in mm. More...
 
float get_angular_increment () const
 Gets angular increment (in radians)
 
std::string parameter_info () const override
 Return a string describing the object.
 
Bin get_bin (const LOR< float > &, const double delta_time) const override
 Find the bin in the projection data that 'contains' an LOR. More...
 
set of obsolete functions to go between bins<->LORs (will disappear!)
Succeeded find_scanner_coordinates_given_cartesian_coordinates (int &det1, int &det2, int &ring1, int &ring2, const CartesianCoordinate3D< float > &c1, const CartesianCoordinate3D< float > &c2) const
 
void find_cartesian_coordinates_of_detection (CartesianCoordinate3D< float > &coord_1, CartesianCoordinate3D< float > &coord_2, const Bin &bin) const
 
void find_cartesian_coordinates_given_scanner_coordinates (CartesianCoordinate3D< float > &coord_1, CartesianCoordinate3D< float > &coord_2, const int Ring_A, const int Ring_B, const int det1, const int det2, const int timing_pos_num) const
 
void find_bin_given_cartesian_coordinates_of_detection (Bin &bin, const CartesianCoordinate3D< float > &coord_1, const CartesianCoordinate3D< float > &coord_2) const
 
- 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...
 
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
 Get azimuthal angle phi of the normal to the projection plane. More...
 
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
 Get LOR corresponding to a given bin. 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_num_views (const int new_num_views) override
 set new number of views, covering the same azimuthal angle range More...
 
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_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...
 
virtual float get_axial_sampling (int segment_num) const
 Get the axial sampling (e.g in z_direction) More...
 
virtual bool axial_sampling_is_uniform () const
 Return if axial sampling makes sense. More...
 
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 RingNumPairsget_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.
 
shared_ptr< ProjDataInfocreate_shared_clone () const
 Like clone() but return a shared_ptr.
 
shared_ptr< ProjDataInfocreate_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...
 
const Scannerget_scanner_ptr () const
 Get scanner pointer.
 
shared_ptr< Scannerget_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...
 
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...
 

Functions that convert between bins and detection positions

bool get_view_tangential_pos_num_for_det_num_pair (int &view_num, int &tang_pos_num, const int det1_num, const int det2_num) const
 This gets view_num and tang_pos_num for a particular detector pair. More...
 
void get_det_num_pair_for_view_tangential_pos_num (int &det1_num, int &det2_num, const int view_num, const int tang_pos_num) const
 This routine gets det_num1 and det_num2. More...
 
Succeeded get_bin_for_det_pos_pair (Bin &, const DetectionPositionPair<> &) const
 This gets Bin coordinates for a particular detector pair. More...
 
void get_det_pos_pair_for_bin (DetectionPositionPair<> &, const Bin &) const
 This routine gets the detector pair corresponding to a bin. More...
 
unsigned int get_num_det_pos_pairs_for_bin (const Bin &, bool ignore_non_spatial_dimensions=true) const
 This routine returns the number of detector pairs that correspond to a bin. More...
 
void get_all_det_pos_pairs_for_bin (std::vector< DetectionPositionPair<>> &, const Bin &, bool ignore_non_spatial_dimensions=true) const
 This routine fills a vector with all the detector pairs that correspond to a bin. More...
 
void get_det_pair_for_bin (int &det_num1, int &ring_num1, int &det_num2, int &ring_num2, const Bin &bin) const
 This routine gets the detector pair corresponding to a bin. More...
 

Additional Inherited Members

- 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()
 
- Static Public Member Functions inherited from stir::ProjDataInfo
static ProjDataInfoask_parameters ()
 Ask for the details and return a ProjDataInfo pointer.
 
static ProjDataInfoProjDataInfoGE (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 ProjDataInfoProjDataInfoCTI (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< ProjDataInfoconstruct_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< Float1Float2tof_bin_boundaries_mm
 Vector which holds the lower and higher boundary for each TOF position in mm, for faster access.
 
VectorWithOffset< Float1Float2tof_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 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...
 

Detailed Description

Projection data info for data which are not arc-corrected.

For this class, 'tangential_pos_num' actually indexes an angular coordinate with a particular angular sampling (usually given by half the angle between detectors). That is

get_s(Bin(..., tang_pos_num)) == ring_radius * sin(tang_pos_num*angular_increment)

This class also contains some functions specific for (static) full-ring PET scanners. In this case, it is assumed that for 'raw' data (i.e. no mashing) sinogram space is 'interleaved': 2 adjacent LOR_angles are merged to 1 'view', while the corresponding bins are interleaved:

   before interleaving               after interleaving
   a00     a01     a02 ...      view 0: a00 a10 a01 a11  ...
       a10     a11     ...
   a20     a21     a22 ...      view 1: a20 a30 a21 a31 ...
       a30     a31     ...

This (standard) interleaving is done because for 'odd' LOR_angles there is no LOR which goes through the origin.

Interchanging the 2 detectors

When the ring difference = 0 (i.e. a 2D - or direct - sinogram), interchanging the 2 detectors does not change the LOR. This is why (in 2D) one gets away with a full sinogram size of num_views * 2 * num_views, where the size of 'detector-space' is twice as large. However, in 3D, interchanging the detectors, also interchanges the rings. One has 2 options:

Todo:
The detector specific functions possibly do not belong in this class. One can easily imagine a case where the theta,phi,s,t coordinates are as described, but there is no real correspondence with detectors (for instance, a rotating system). Maybe they should be moved somewhere else?

Constructor & Destructor Documentation

◆ ProjDataInfoCylindricalNoArcCorr() [1/2]

stir::ProjDataInfoCylindricalNoArcCorr::ProjDataInfoCylindricalNoArcCorr ( const shared_ptr< Scanner scanner_ptr,
const float  ring_radius,
const float  angular_increment,
const VectorWithOffset< int > &  num_axial_pos_per_segment,
const VectorWithOffset< int > &  min_ring_diff_v,
const VectorWithOffset< int > &  max_ring_diff_v,
const int  num_views,
const int  num_tangential_poss,
const int  tof_mash_factor = 0 
)

Constructor completely specifying all parameters.

See also
ProjDataInfoCylindrical class documentation for info on parameters

References stir::error(), and stir::ProjDataInfoCylindrical::set_tof_mash_factor().

◆ ProjDataInfoCylindricalNoArcCorr() [2/2]

stir::ProjDataInfoCylindricalNoArcCorr::ProjDataInfoCylindricalNoArcCorr ( const shared_ptr< Scanner scanner_ptr,
const VectorWithOffset< int > &  num_axial_pos_per_segment,
const VectorWithOffset< int > &  min_ring_diff_v,
const VectorWithOffset< int > &  max_ring_diff_v,
const int  num_views,
const int  num_tangential_poss,
const int  tof_mash_factor = 0 
)

Constructor which gets ring_radius and angular_increment from the scanner.

angular_increment is determined as Pi divided by the number of detectors in a ring.

Todo:
only suitable for full-ring PET scanners

Member Function Documentation

◆ get_s()

float stir::ProjDataInfoCylindricalNoArcCorr::get_s ( const Bin bin) const
inlineoverridevirtual

Gets s coordinate in mm.

Warning
This does not take the 'interleaving' into account which is customarily applied to raw PET data.

Implements stir::ProjDataInfo.

References stir::Bin::tangential_pos_num().

◆ get_view_tangential_pos_num_for_det_num_pair()

bool stir::ProjDataInfoCylindricalNoArcCorr::get_view_tangential_pos_num_for_det_num_pair ( int &  view_num,
int &  tang_pos_num,
const int  det1_num,
const int  det2_num 
) const
inline

This gets view_num and tang_pos_num for a particular detector pair.

This function makes only sense if the scanner is a full-ring scanner with discrete detectors and there is no rotation or wobble.

  • view runs currently from 0 to num_views-1
  • tang_pos_num is centred around 0, where 0 corresponds to opposing detectors. The maximum range of tangential positions for any scanner is -(num_detectors)/2<tang_pos_num<=-(num_detectors)/2+num_detectors, but this range is never used (as the 'last' tang_pos_num would be a LOR between two adjacent detectors).
  • det_num1, det_num2 run from 0 to num_detectors-1
Returns
true if the detector pair is stored in a positive segment, false otherwise.
Warning
Current implementation only checked for Siemens/CTI scanners. It assumes interleaved data.
Will call error() if certain conditions are not met.
See also
get_det_num_pair_for_view_tangential_pos_num()

References stir::Bin::axial_pos_num(), stir::SegmentIndices::segment_num(), stir::Bin::tangential_pos_num(), stir::SegmentIndices::timing_pos_num(), and stir::ViewgramIndices::view_num().

Referenced by stir::ProjDataInfoCylindricalNoArcCorrTests::run_tests().

◆ get_det_num_pair_for_view_tangential_pos_num()

void stir::ProjDataInfoCylindricalNoArcCorr::get_det_num_pair_for_view_tangential_pos_num ( int &  det1_num,
int &  det2_num,
const int  view_num,
const int  tang_pos_num 
) const
inline

This routine gets det_num1 and det_num2.

It sets the detectors in a particular order (i.e. it fixes the orientation of the LOR) corresponding to the detector pair belonging to a positive segment.

Warning
This currently only works when no mashing of views is used, as otherwise there would be multiple detector pairs corresponding to a single bin.
See also
get_view_tangential_pos_num_for_det_num_pair() for info and restrictions.
Warning
Will call error() if certain conditions are not met.

Referenced by stir::ProjMatrixByDenselUsingRayTracing::get_element(), and stir::ProjDataInfoCylindricalNoArcCorrTests::run_tests().

◆ get_bin_for_det_pos_pair()

Succeeded stir::ProjDataInfoCylindricalNoArcCorr::get_bin_for_det_pos_pair ( Bin bin,
const DetectionPositionPair<> &  dp 
) const
inline

This gets Bin coordinates for a particular detector pair.

Note that when axial compression and/or mashing is applied, this is a many-to-one relation, i.e. multiple detector pairs contribute to one bin.

Returns
Succeeded::yes when a corresponding bin is found in the range of projection data. Currently, the Bin value is always set to 1.
See also
get_view_tangential_pos_num_for_det_num_pair() for restrictions
Todo:
use member template for the coordT type to support continuous detectors.

Referenced by stir::ProjDataInfoCylindricalNoArcCorrTests::run_tests().

◆ get_det_pos_pair_for_bin()

void stir::ProjDataInfoCylindricalNoArcCorr::get_det_pos_pair_for_bin ( DetectionPositionPair<> &  dp,
const Bin bin 
) const
inline

This routine gets the detector pair corresponding to a bin.

See also
get_det_pair_for_view_tangential_pos_num() for restrictions. In addition, this routine only works for span=1 data, i.e. no axial compression.
Todo:
use member template for the coordT type to support continuous detectors.
Warning
Will call error() if certain conditions are not met.

References stir::SegmentIndices::timing_pos_num().

Referenced by find_scanner_coordinates_given_cartesian_coordinates(), and stir::ProjDataInfoCylindricalNoArcCorrTests::run_tests().

◆ get_num_det_pos_pairs_for_bin()

unsigned int stir::ProjDataInfoCylindricalNoArcCorr::get_num_det_pos_pairs_for_bin ( const Bin bin,
bool  ignore_non_spatial_dimensions = true 
) const

◆ get_all_det_pos_pairs_for_bin()

void stir::ProjDataInfoCylindricalNoArcCorr::get_all_det_pos_pairs_for_bin ( std::vector< DetectionPositionPair<>> &  dps,
const Bin bin,
bool  ignore_non_spatial_dimensions = true 
) const

This routine fills a vector with all the detector pairs that correspond to a bin.

Parameters
[in]ignore_non_spatial_dimensionsif true, only 1 timing_pos_num will be set, i.e. only the detection positions are returned, not TOF (nor energy)
See also
ProjDataInfoCylindrical::get_all_ring_pairs_for_segment_axial_pos_num for restrictions.
Todo:
It might be possible to return some weight factors in case there is no many-to-one correspondence between detection positions and bins (for instance for continuous detectors, or rotating scanners, or arc-corrected data).

References stir::Bin::axial_pos_num(), stir::ProjDataInfoCylindrical::get_all_ring_pairs_for_segment_axial_pos_num(), stir::ProjDataInfo::get_min_view_num(), get_num_det_pos_pairs_for_bin(), stir::ProjDataInfo::get_tof_mash_factor(), stir::ProjDataInfoCylindrical::get_view_mashing_factor(), stir::ProjDataInfo::is_tof_data(), stir::SegmentIndices::segment_num(), stir::Bin::tangential_pos_num(), stir::SegmentIndices::timing_pos_num(), and stir::ViewgramIndices::view_num().

Referenced by stir::ProjDataInfoCylindricalNoArcCorrTests::run_tests(), and stir::ProjMatrixByBinSinglePhoton::set_up().

◆ get_det_pair_for_bin()

void stir::ProjDataInfoCylindricalNoArcCorr::get_det_pair_for_bin ( int &  det_num1,
int &  ring_num1,
int &  det_num2,
int &  ring_num2,
const Bin bin 
) const
inline

This routine gets the detector pair corresponding to a bin.

See also
get_det_pair_for_view_tangential_pos_num() for restrictions. In addition, this routine only works for span=1 data, i.e. no axial compression.
Deprecated:

References stir::Bin::axial_pos_num(), stir::SegmentIndices::segment_num(), stir::Bin::tangential_pos_num(), and stir::ViewgramIndices::view_num().

◆ get_bin()

Bin stir::ProjDataInfoCylindricalNoArcCorr::get_bin ( const LOR< float > &  ,
const double  delta_time 
) const
overridevirtual

Find the bin in the projection data that 'contains' an LOR.

Projection data corresponds to lines, so most Lines Of Response (LORs) there is a bin in the projection data. Usually this will be the bin which has a central LOR that is 'closest' to the LOR that is passed as an argument.

If there is no such bin (e.g. the LOR does not intersect the detectors, Bin::get_bin_value() will be less than 0, otherwise it will be 1.

Warning
This function might get a different type of arguments in the next release.
See also
get_LOR()

Implements stir::ProjDataInfo.

References _PI, stir::Bin::axial_pos_num(), stir::error(), stir::ProjDataInfoCylindrical::get_axial_sampling(), stir::ProjDataInfoCylindrical::get_azimuthal_angle_offset(), stir::ProjDataInfoCylindrical::get_azimuthal_angle_sampling(), stir::ProjDataInfoCylindrical::get_m(), stir::ProjDataInfo::get_max_axial_pos_num(), stir::ProjDataInfoCylindrical::get_max_ring_difference(), stir::ProjDataInfo::get_max_segment_num(), stir::ProjDataInfo::get_max_tangential_pos_num(), stir::ProjDataInfo::get_max_view_num(), stir::ProjDataInfo::get_min_axial_pos_num(), stir::ProjDataInfoCylindrical::get_min_ring_difference(), stir::ProjDataInfo::get_min_segment_num(), stir::ProjDataInfo::get_min_tangential_pos_num(), stir::Scanner::get_num_detectors_per_ring(), stir::Scanner::get_num_rings(), stir::ProjDataInfo::get_num_views(), stir::ProjDataInfoCylindrical::get_ring_radius(), stir::ProjDataInfoCylindrical::get_ring_spacing(), stir::ProjDataInfo::get_scanner_ptr(), stir::ProjDataInfoCylindrical::get_segment_axial_pos_num_for_ring_pair(), stir::ProjDataInfo::get_tof_bin(), stir::LORInCylinderCoordinates< coordT >::is_swapped(), stir::modulo(), stir::round(), stir::SegmentIndices::segment_num(), stir::Bin::set_bin_value(), stir::Bin::tangential_pos_num(), stir::to_0_2pi(), and stir::ViewgramIndices::view_num().

Referenced by stir::LmToProjDataWithMC::process_new_time_event().

◆ find_scanner_coordinates_given_cartesian_coordinates()

Succeeded stir::ProjDataInfoCylindricalNoArcCorr::find_scanner_coordinates_given_cartesian_coordinates ( int &  det1,
int &  det2,
int &  ring1,
int &  ring2,
const CartesianCoordinate3D< float > &  c1,
const CartesianCoordinate3D< float > &  c2 
) const

The documentation for this class was generated from the following files: