CylindricalDetector¶
- class odl.tomo.geometry.detector.CylindricalDetector(partition, axes, radius, check_bounds=True)[source]¶
Bases:
DetectorA 2D detector on a cylindrical surface in 3D space.
The cylindrical surface that corresponds to the partition is rotated to be aligned with given axes and shifted to cross the origin. Note that the partition angle increases in the clockwise direction, by analogy to flat detectors.
- Attributes:
axesFixed array of unit vectors with which the detector is aligned.
check_boundsIf
True, methods computing vectors check input arguments.gridSampling grid of the parameters.
ndimNumber of dimensions of the parameters (= surface dimension).
paramsSurface parameter set of this detector.
partitionPartition of the detector parameter set into subsets.
radiusCurvature radius of the detector.
rotation_matrixRotation matrix that is used to align the detector with a given axis.
shapeNumber of subsets (pixels) of the detector per axis.
sizeTotal number of pixels.
space_ndimNumber of dimensions of the embedding space.
translationA 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)Density function of the surface measure.
surface_normal(param)Unit vector perpendicular to the detector surface at
param.- __init__(partition, axes, radius, check_bounds=True)[source]¶
Initialize a new instance.
- Parameters:
- partition2-dim.
RectPartition Partition of the parameter interval, corresponding to the angular partition and height partition.
- axessequence of
array-like Fixed pair of of unit vectors with which the detector is aligned. The vectors must have shape
(3,)and be perpendicular.- radiusnonnegative float
Radius of the cylinder.
- check_boundsbool, optional
If
True, methods computing vectors check input arguments. Checks are vectorized and add only a small overhead.
- partition2-dim.
Examples
Initialize a detector with height 8 and circle radius 2 extending to 90 degrees on both sides of the origin (a half cylinder).
>>> part = odl.uniform_partition( ... [-np.pi / 2, -4], [np.pi / 2, 4], [10, 8]) >>> det = CylindricalDetector( ... part, axes=[(1, 0, 0), (0, 0, 1)], radius=2) >>> det.axes array([[ 1., 0., 0.], [ 0., 0., 1.]]) >>> det.radius 2.0 >>> np.allclose(det.surface_normal([0, 0]), [ 0, -1, 0]) True