ParallelHoleCollimatorGeometry

class odl.tomo.geometry.spect.ParallelHoleCollimatorGeometry(apart, dpart, det_radius, axis=(0, 0, 1), **kwargs)[source]

Bases: odl.tomo.geometry.parallel.Parallel3dAxisGeometry

Geometry for SPECT Parallel hole collimator.

For details, check the online docs.

Attributes
angles

All angles of this geometry as an array.

axis

Normalized axis of rotation, a 3d vector.

check_bounds

If True, methods computing vectors check input arguments.

det_axes_init

Initial axes of the detector.

det_grid

Sampling grid of det_params.

det_params

Continuous detector parameter range, an IntervalProd.

det_partition

Partition of the detector parameter set into subsets.

det_pos_init

Initial position of the detector reference point.

det_radius

Radius of the detector orbit.

detector

Detector representation of this geometry.

grid

Joined sampling grid for motion and detector.

implementation_cache

Dictionary acting as a cache for this geometry.

motion_grid

Sampling grid of motion_params.

motion_params

Continuous motion parameter range, an IntervalProd.

motion_partition

Partition of the motion parameter set into subsets.

ndim

Number of dimensions of the geometry.

orig_to_det_init

Unit vector from rotation center to initial detector position.

params

Joined parameter set for motion and detector.

partition

Joined parameter set partition for motion and detector.

translation

Shift of the origin of this geometry.

Methods

det_axes(self, angle)

Return the detector axes tuple at angle.

det_point_position(self, mparam, dparam)

Return the detector point at (mparam, dparam).

det_refpoint(self, angle)

Return the position(s) of the detector ref.

det_to_src(self, angle, dparam)

Direction from a detector location to the source.

frommatrix(apart, dpart, det_radius, …)

Create a ParallelHoleCollimatorGeometry using a matrix.

rotation_matrix(self, angle)

Return the rotation matrix to the system state at angle.

__init__(self, apart, dpart, det_radius, axis=(0, 0, 1), \*\*kwargs)[source]

Initialize a new instance.

Parameters
apart1-dim. RectPartition

Partition of the angle interval.

dpart2-dim. RectPartition

Partition of the detector parameter rectangle.

det_radiuspositive float

Radius of the circular detector orbit.

axisarray-like, shape (3,), optional

Vector defining the fixed rotation axis of this geometry.

Other Parameters
orig_to_det_initarray-like, shape (3,), optional

Vector pointing towards the initial position of the detector reference point. The default depends on axis, see Notes. The zero vector is not allowed.

det_axes_init2-tuple of array-like’s (shape (3,)), optional

Initial axes defining the detector orientation. The default depends on axis, see Notes.

translationarray-like, shape (3,), optional

Global translation of the geometry. This is added last in any method that computes an absolute vector, e.g., det_refpoint, and also shifts the axis of rotation. Default: (0, 0, 0)

check_boundsbool, optional

If True, methods perform sanity checks on provided input parameters. Default: True

Notes

In the default configuration, the rotation axis is (0, 0, 1), the vector towards the initial detector reference point is (0, 1, 0), and the default detector axes are [(1, 0, 0), (0, 0, 1)]. If a different axis is provided, the new default initial position and the new default axes are the computed by rotating the original ones by a matrix that transforms (0, 0, 1) to the new (normalized) axis. This matrix is calculated with the rotation_matrix_from_to function. Expressed in code, we have

init_rot = rotation_matrix_from_to((0, 0, 1), axis)
orig_to_det_init = init_rot.dot((0, 1, 0))
det_axes_init[0] = init_rot.dot((1, 0, 0))
det_axes_init[1] = init_rot.dot((0, 0, 1))