CircularDetector

class odl.tomo.geometry.detector.CircularDetector(partition, axis, radius, check_bounds=True)[source]

Bases: Detector

A 1D detector on a circle section in 2D space.

The circular section that corresponds to the angular partition is rotated to be aligned with a given axis and shifted to cross the origin. Note, the partition angle increases in the clockwise direction, by analogy to flat detectors.

Attributes:
axis

Fixed axis along which this detector is aligned.

check_bounds

If True, methods computing vectors check input arguments.

grid

Sampling grid of the parameters.

ndim

Number of dimensions of the parameters (= surface dimension).

params

Surface parameter set of this detector.

partition

Partition of the detector parameter set into subsets.

radius

Curvature radius of the detector.

rotation_matrix

Rotation matrix that is used to align the detector with a given axis.

shape

Number of subsets (pixels) of the detector per axis.

size

Total number of pixels.

space_ndim

Number of dimensions of the embedding space.

translation

A vector used to shift the detector towards the origin.

Methods

surface(param)

Return the detector surface point corresponding to param.

surface_deriv(param)

Return the surface derivative at param.

surface_measure(param)

Return the arc length measure at param.

surface_normal(param)

Unit vector perpendicular to the detector surface at param.

__init__(partition, axis, radius, check_bounds=True)[source]

Initialize a new instance.

Parameters:
partition1-dim. RectPartition

Partition of the parameter interval, corresponding to the angular sections along the line.

axisarray-like, shape (2,)

Fixed axis along which this detector is aligned.

radiusnonnegative float

Radius of the circle.

check_boundsbool, optional

If True, methods computing vectors check input arguments. Checks are vectorized and add only a small overhead.

Examples

Initialize a detector with circle radius 2 and extending to 90 degrees on both sides of the origin (a half circle).

>>> part = odl.uniform_partition(-np.pi / 2, np.pi / 2, 10)
>>> det = CircularDetector(part, axis=[1, 0], radius=2)
>>> det.axis
array([ 1.,  0.])
>>> det.radius
2.0
>>> np.allclose(det.surface_normal(0), [0, -1])
True