ParallelBeamGeometry.det_refpoint¶
- ParallelBeamGeometry.det_refpoint(angle)[source]¶
- Return the position(s) of the detector ref. point at - angle.- The reference point is given by a rotation of the initial position by - angle.- For an angle (or a vector of angles) - phi, the detector position is given by- det_ref(phi) = translation + rotation_matrix(phi) * (det_pos_init - translation) - where - det_pos_initis the detector reference point at initial state.- This default implementation assumes in the case of 2 or 3 motion parameters that they are to be interpreted as Euler angles. Subclasses with a deviating intended interpretation should override this method. - Parameters:
- anglearray-likeor sequence
- One or several (Euler) angles in radians at which to evaluate. If - motion_params.ndim >= 2, a sequence of that length must be provided.
 
- angle
- Returns:
- refptnumpy.ndarray
- Vector(s) pointing from the origin to the detector reference point at - angle. If- angleis a single parameter, the returned array has shape- (ndim,), otherwise- angle.shape + (ndim,)if- motion_paramsis 1D,
- broadcast(*angle).shape + (ndim,)if- motion_paramsis 2D or 3D (Euler angles).
 
 
- refpt
 - See also - Examples - For 2d and default arguments, the detector starts at - e_yand rotates to- -e_xat 90 degrees:- >>> apart = odl.uniform_partition(0, np.pi, 10) >>> dpart = odl.uniform_partition(-1, 1, 20) >>> geom = Parallel2dGeometry(apart, dpart) >>> geom.det_refpoint(0) array([ 0., 1.]) >>> np.allclose(geom.det_refpoint(np.pi / 2), [-1, 0]) True - The method is vectorized, i.e., it can be called with multiple angles at once (or n-dimensional arrays of parameters): - >>> points = geom.det_refpoint([0, np.pi]) >>> np.allclose(points[0], [0, 1]) True >>> np.allclose(points[1], [0, -1]) True >>> geom.det_refpoint(np.zeros((4, 5))).shape (4, 5, 2) - In 3d with single rotation axis - e_z, we have the same situation, except that the vectors have a third component equal to 0:- >>> apart = odl.uniform_partition(0, np.pi, 10) >>> dpart = odl.uniform_partition([-1, -1], [1, 1], (20, 20)) >>> geom = Parallel3dAxisGeometry(apart, dpart) >>> geom.det_refpoint(0) array([ 0., 1., 0.]) >>> np.allclose(geom.det_refpoint(np.pi / 2), [-1, 0, 0]) True