Skip to content

Commit 7655093

Browse files
author
JevgenijaRudzusika
committed
added src_shift_func as an argument to geometry, created function flying_focal_spot
(cherry picked from commit a0f161c5d041fb1201fa976116cfccf2f2cb6600)
1 parent f4d4e53 commit 7655093

4 files changed

Lines changed: 146 additions & 97 deletions

File tree

odl/test/tomo/geometry/geometry_test.py

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
import odl
1717
from odl.util.testutils import all_almost_equal, all_equal, simple_fixture
18+
from odl.tomo.util.source_detector_shifts import flying_focal_spot
1819

1920

2021
# --- pytest fixtures --- #
@@ -561,10 +562,13 @@ def test_fanbeam_flying_focal_spot():
561562
shift1 = np.array([2, -3])
562563
shift2 = np.array([-2, 3])
563564
init = np.array([1, 0], dtype=np.float32)
564-
geom_ffs = odl.tomo.FanBeamGeometry(apart, dpart, src_rad, det_rad,
565-
src_to_det_init=init,
566-
flying_focal_spot=[shift1,
567-
shift2])
565+
geom_ffs = odl.tomo.FanBeamGeometry(
566+
apart, dpart,
567+
src_rad, det_rad,
568+
src_to_det_init=init,
569+
src_shift_func=lambda angle: flying_focal_spot(
570+
angle, apart=apart,
571+
shifts=[shift1, shift2]))
568572
# angles must be shifted to match discretization of apart
569573
ang1 = -full_angle / 20
570574
apart1 = odl.uniform_partition(ang1, full_angle + ang1, 5)
@@ -583,7 +587,7 @@ def test_fanbeam_flying_focal_spot():
583587

584588
sp1 = geom1.src_position(geom1.angles)
585589
sp2 = geom2.src_position(geom2.angles)
586-
sp = geom_ffs.src_position(geom_ffs.angles, geom_ffs.flying_focal_spot)
590+
sp = geom_ffs.src_position(geom_ffs.angles)
587591
assert all_almost_equal(sp[0::2], sp1)
588592
assert all_almost_equal(sp[1::2], sp2)
589593

@@ -737,10 +741,13 @@ def test_conebeam_flying_focal_spot():
737741
shift1 = np.array([2, -3, 1])
738742
shift2 = np.array([-2, 3, -1])
739743
init = np.array([1, 0, 0], dtype=np.float32)
740-
geom_ffs = odl.tomo.ConeBeamGeometry(apart, dpart, src_rad, det_rad,
741-
src_to_det_init=init,
742-
flying_focal_spot=[shift1,
743-
shift2])
744+
geom_ffs = odl.tomo.ConeBeamGeometry(
745+
apart, dpart,
746+
src_rad, det_rad,
747+
src_to_det_init=init,
748+
src_shift_func=lambda angle: flying_focal_spot(
749+
angle, apart=apart,
750+
shifts=[shift1, shift2]))
744751
# angles must be shifted to match discretization of apart
745752
ang1 = -full_angle / 20
746753
apart1 = odl.uniform_partition(ang1, full_angle + ang1, 5)
@@ -761,7 +768,7 @@ def test_conebeam_flying_focal_spot():
761768

762769
sp1 = geom1.src_position(geom1.angles)
763770
sp2 = geom2.src_position(geom2.angles)
764-
sp = geom_ffs.src_position(geom_ffs.angles, geom_ffs.flying_focal_spot)
771+
sp = geom_ffs.src_position(geom_ffs.angles)
765772
assert all_almost_equal(sp[0::2], sp1)
766773
assert all_almost_equal(sp[1::2], sp2)
767774

odl/tomo/backends/astra_setup.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -307,10 +307,9 @@ def astra_conebeam_3d_geom_to_vec(geometry):
307307
"""
308308
angles = geometry.angles
309309
vectors = np.zeros((angles.size, 12))
310-
ffs = geometry.flying_focal_spot
311310

312311
# Source position
313-
vectors[:, 0:3] = geometry.src_position(angles, ffs)
312+
vectors[:, 0:3] = geometry.src_position(angles)
314313

315314
# Center of detector in 3D space
316315
mid_pt = geometry.det_params.mid_pt
@@ -379,10 +378,9 @@ def astra_conebeam_2d_geom_to_vec(geometry):
379378
rot_minus_90 = euler_matrix(-np.pi / 2)
380379
angles = geometry.angles
381380
vectors = np.zeros((angles.size, 6))
382-
ffs = geometry.flying_focal_spot
383381

384382
# Source position
385-
src_pos = geometry.src_position(angles, ffs)
383+
src_pos = geometry.src_position(angles)
386384
vectors[:, 0:2] = rot_minus_90.dot(src_pos.T).T # dot along 2nd axis
387385

388386
# Center of detector
@@ -750,7 +748,6 @@ def astra_algorithm(direction, ndim, vol_id, sino_id, proj_id, impl):
750748
algo_map = {'forward': {2: {'cpu': 'FP', 'cuda': 'FP_CUDA'},
751749
3: {'cpu': None, 'cuda': 'FP3D_CUDA'}},
752750
'backward': {2: {'cpu': 'BP', 'cuda': 'BP_CUDA'},
753-
3: {'cpu': None, 'cuda': 'BP3D_CUDA'},
754751
3: {'cpu': None, 'cuda': 'BP3D_CUDA'}}}
755752

756753
algo_cfg = {'type': algo_map[direction][ndim][impl],

0 commit comments

Comments
 (0)