Flat2dDetector.surface

Flat2dDetector.surface(param)[source]

Return the detector surface point corresponding to param.

For parameter value p, the surface point is given by

surf = p[0] * axes[0] + p[1] * axes[1]
Parameters:
paramarray-like or sequence

Parameter value(s) at which to evaluate. A sequence of parameters must have length 2.

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 (3,), otherwise broadcast(*param).shape + (3,).

Examples

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

>>> part = odl.uniform_partition([0, 0], [1, 1], (10, 10))
>>> det = Flat2dDetector(part, axes=[(1, 0, 0), (0, 0, 1)])
>>> det.surface([0, 0])
array([ 0.,  0.,  0.])
>>> det.surface([0, 1])
array([ 0.,  0.,  1.])
>>> det.surface([1, 1])
array([ 1.,  0.,  1.])

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

>>> # 3 pairs of parameters, resulting in 3 vectors
>>> det.surface([[0, 0, 1],
...              [0, 1, 1]])
array([[ 0.,  0.,  0.],
       [ 0.,  0.,  1.],
       [ 1.,  0.,  1.]])
>>> # Pairs of parameters in a (4, 5) array each
>>> param = (np.zeros((4, 5)), np.zeros((4, 5)))
>>> det.surface(param).shape
(4, 5, 3)
>>> # Using broadcasting for "outer product" type result
>>> param = (np.zeros((4, 1)), np.zeros((1, 5)))
>>> det.surface(param).shape
(4, 5, 3)