I'm trying to implement an operator with ODL.tomo for dynamic CT with parallel beam. At each time step the object should be scanned from different rotating angles distributed in [0,180°]. Since the geometry is different for each time step, also the range would be different for each RayTransform. In ODL 0.7.0 it worked to set the 'range' parameter for ray_trafo to a common_range, such that the resulting DiagonalOperator operated on a PowerSpace. In ODL 0.8.1 I can still set the 'range' parameter but I think it is ignored and overwritten by the range it gets from the geometry. Then I don't get a PoweSpace but only a ProductSpace. Is there a way to set the range parameter to a common range?
detector_partition = odl.uniform_partition(-1.25 * space_range, 1.25 * space_range, det_shape)
space = odl.uniform_discr([-space_range, -space_range], [space_range, space_range], (phantom.size(3), phantom.size(4)), dtype='float32', weighting=1.0)
operators = []
common_range = odl.uniform_discr([0, 0], [num_angles, det_shape], (num_angles, det_shape), dtype='float32')
for t in range(time_steps):
angles_all = np.linspace(0, np.pi, num_angles*time_steps, endpoint=False)
angles = angles_all[t::time_steps]
angle_partition = odl.nonuniform_partition(angles)
geometry = odl.tomo.Parallel2dGeometry(angle_partition, detector_partition)
ray_trafo = odl.tomo.RayTransform(space, geometry, impl='astra_cpu', range=common_range)
operators.append(ray_trafo)
fwd_op_odl = odl.DiagonalOperator(*operators)
I'm trying to implement an operator with ODL.tomo for dynamic CT with parallel beam. At each time step the object should be scanned from different rotating angles distributed in [0,180°]. Since the geometry is different for each time step, also the range would be different for each RayTransform. In ODL 0.7.0 it worked to set the 'range' parameter for ray_trafo to a common_range, such that the resulting DiagonalOperator operated on a PowerSpace. In ODL 0.8.1 I can still set the 'range' parameter but I think it is ignored and overwritten by the range it gets from the geometry. Then I don't get a PoweSpace but only a ProductSpace. Is there a way to set the range parameter to a common range?