CircularDetector

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

Bases: odl.tomo.geometry.detector.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(self, param)

Return the detector surface point corresponding to param.

surface_deriv(self, param)

Return the surface derivative at param.

surface_measure(self, param)

Return the arc length measure at param.

surface_normal(self, param)

Unit vector perpendicular to the detector surface at param.

__init__(self, 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