Skip to content

Commit

Permalink
Merge pull request #1223 from kohr-h/phantom_min_max_pt
Browse files Browse the repository at this point in the history
ENH: add min/max_pt to ellipsoid_phantom
  • Loading branch information
Holger Kohr authored Nov 11, 2017
2 parents 4312b3f + dca7d8f commit 27f32e6
Show file tree
Hide file tree
Showing 3 changed files with 195 additions and 71 deletions.
33 changes: 30 additions & 3 deletions odl/phantom/emission.py
Original file line number Diff line number Diff line change
Expand Up @@ -104,19 +104,46 @@ def _derenzo_sources_2d():
[1.0, 0.023968, 0.023968, 0.88528, -0.11791, 0.0]]


def derenzo_sources(space):
def derenzo_sources(space, min_pt=None, max_pt=None):
"""Create the PET/SPECT Derenzo sources phantom.
The Derenzo phantom contains a series of circles of decreasing size.
In 3d the phantom is simply the 2d phantom extended in the z direction as
cylinders.
Parameters
----------
space : `DiscreteLp`
Space in which the phantom should be created, must be 2- or
3-dimensional. If ``space.shape`` is 1 in an axis, a corresponding
slice of the phantom is created (instead of squashing the whole
phantom into the slice).
min_pt, max_pt : array-like, optional
If provided, use these vectors to determine the bounding box of the
phantom instead of ``space.min_pt`` and ``space.max_pt``.
It is currently required that ``min_pt >= space.min_pt`` and
``max_pt <= space.max_pt``, i.e., shifting or scaling outside the
original space is not allowed.
Providing one of them results in a shift, e.g., for ``min_pt``::
new_min_pt = min_pt
new_max_pt = space.max_pt + (min_pt - space.min_pt)
Providing both results in a scaled version of the phantom.
Returns
-------
phantom : ``space`` element
The Derenzo source phantom in the given space.
"""
if space.ndim == 2:
return ellipsoid_phantom(space, _derenzo_sources_2d())
return ellipsoid_phantom(space, _derenzo_sources_2d(), min_pt, max_pt)
if space.ndim == 3:
return ellipsoid_phantom(
space, cylinders_from_ellipses(_derenzo_sources_2d()))
space, cylinders_from_ellipses(_derenzo_sources_2d()),
min_pt, max_pt)
else:
raise ValueError('dimension not 2, no phantom available')

Expand Down
Loading

0 comments on commit 27f32e6

Please sign in to comment.