CircularDetector.surface

CircularDetector.surface(param)[source]

Return the detector surface point corresponding to param.

For a parameter phi, the returned point is given by

surf = R * radius * (cos(phi), -sin(phi)) + t

where R is a rotation matrix and t is a translation vector. Note that increase of phi corresponds to rotation in the clockwise direction, by analogy to flat detectors.

Parameters:
paramfloat or array-like

Parameter value(s) at which to evaluate.

Returns:
pointnumpy.ndarray

Vector(s) pointing from the origin to the detector surface point at param. If param is a single parameter, the returned array has shape (2,), otherwise param.shape + (2,).

Examples

The method works with a single parameter, resulting in a single vector:

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

It is also vectorized, i.e., it can be called with multiple parameters at once (or an n-dimensional array of parameters):

>>> np.round(det.surface([-np.pi / 2, 0, np.pi / 2]), 10)
array([[-2., -2.],
       [ 0.,  0.],
       [ 2., -2.]])
>>> det.surface(np.zeros((4, 5))).shape
(4, 5, 2)