diff options
-rw-r--r-- | lib/skyline.py | 79 | ||||
-rw-r--r-- | lib/test/test_skyline.py | 34 |
2 files changed, 58 insertions, 55 deletions
diff --git a/lib/skyline.py b/lib/skyline.py index 1170d4d..44e909f 100644 --- a/lib/skyline.py +++ b/lib/skyline.py @@ -39,16 +39,13 @@ solely, not image data itself. .. note:: Requires Python 2.7 or later. -:Authors: Pey Lian Lim, W. Hack +:Authors: Pey Lian Lim, W. Hack, M. Droettboom :Organization: Space Telescope Science Institute :History: - * 2012-05-25 PLL updated doc. Original class structure by WJH. - -Examples --------- ->>> from sphere import SkyLine + * 2012-05-25 PLL started coding. Original class + structure by WJH. Parent class by MD. """ from __future__ import division, print_function, absolute_import @@ -66,7 +63,7 @@ from .polygon import SphericalPolygon __all__ = ['SkyLine'] __version__ = '0.1a' -__vdate__ = '05-Jun-2012' +__vdate__ = '06-Jun-2012' class SkyLineMember(object): @@ -130,20 +127,21 @@ class SkyLine(SphericalPolygon): # Convert SCI data to SkyLineMember if fname is not None: with pyfits.open(fname) as pf: - poly_list = [SkyLineMember(fname, i) - for i,ext in enumerate(pf) - if extname in ext.name.upper()] + new_members = [SkyLineMember(fname, i) + for i,ext in enumerate(pf) + if extname in ext.name.upper()] else: - poly_list = [] + new_members = [] # Put mosaic of all the chips in SkyLine - if len(poly_list) > 0: - self._update(SphericalPolygon.multi_union( - [m.polygon for m in poly_list]), poly_list) - + if len(new_members) > 0: + new_polygon = SphericalPolygon.multi_union( + [m.polygon for m in new_members]) # Empty class else: - self._update(self, None) + new_polygon = self + + self._update(new_polygon, new_members) def __repr__(self): return 'SkyLine(%r, %r, %r)' % (self.points, self.inside, self.members) @@ -167,7 +165,7 @@ class SkyLine(SphericalPolygon): """ self._points = new_polygon.points self._inside = new_polygon.inside - self._members = new_members + self._members = new_members def _find_new_members(self, other): """ @@ -185,27 +183,9 @@ class SkyLine(SphericalPolygon): Returns ------- List of SkyLineMember that qualifies. - - """ - if others.members is None: - out_members = [] - elif self.members is None: - out_members = others.members - else: - out_members = [m for m in other.members if m not in self.members] - return out_members - - def _add_members(self, new_members): - """Return current SkyLineMember list + new SkyLineMember list.""" - if new_members is None: - out_members = self.members - elif self.members is None: - out_members = new_members - else: - out_members = self.members + new_members - - return out_members + """ + return [m for m in other.members if m not in self.members] @property def members(self): @@ -215,10 +195,7 @@ class SkyLine(SphericalPolygon): @property def polygons(self): """List of SkyLineMember polygons.""" - if self.members is not None: - return [m.polygon for m in self.members] - else: - return [] + return [m.polygon for m in self.members] @property def polygon(self): @@ -241,7 +218,7 @@ class SkyLine(SphericalPolygon): See also -------- sphere.polygon.SphericalPolygon.from_radec - + """ return cls._overload_parentcls(SphericalPolygon.from_radec, *args, **kwargs) @@ -333,7 +310,7 @@ class SkyLine(SphericalPolygon): if len(new_members) > 0: out_skyline._update(self.polygon.union(other.polygon), - self._add_members(new_members)) + self.members + new_members) return out_skyline @@ -363,21 +340,13 @@ class SkyLine(SphericalPolygon): sphere.polygon.SphericalPolygon.intersection """ - out_skyline = copy(self) + out_skyline = self.__class__(None) new_members = self._find_new_members(other) out_sph = self.polygon.intersection(other.polygon) - if len(out_sph.points) == 0: - new_members = None - else: - new_members = [m for m in self._add_members(new_members) if + if len(out_sph.points) > 0: + new_members = [m for m in (self.members + new_members) if out_sph.contains_point(m.polygon.inside)] - - out_skyline._update(out_sph, new_members) + out_skyline._update(out_sph, new_members) return out_skyline - - -def test(): - """Basic use case.""" - pass diff --git a/lib/test/test_skyline.py b/lib/test/test_skyline.py new file mode 100644 index 0000000..d450e49 --- /dev/null +++ b/lib/test/test_skyline.py @@ -0,0 +1,34 @@ +"""SkyLine tests. + +:Author: Pey Lian Lim + +:Organization: Space Telescope Science Institute + +""" +from __future__ import absolute_import + +import pyfits +from numpy.testing import assert_almost_equal, assert_array_less + +from .. import skyline + +from .test_util import ROOT_DIR +from .test_shared import resolve_imagename + +def test_union_simple(): + # Two similar exposures with slight offset and some rotation. + im1 = resolve_imagename(ROOT_DIR, '2chipA.fits') + im2 = resolve_imagename(ROOT_DIR, '2chipB.fits') + + skyline1 = skyline.SkyLine(im1) + skyline2 = skyline.SkyLine(im2) + + union_1_2 = skyline1.union(skyline2) + union_2_1 = skyline2.union(skyline1) + + assert_almost_equal(union_1_2.area(), union_2_1.area()) + + for m in union_1_2.members: + assert m in union_2_1.members + + assert len(union_1_2.members) == 4 |