summaryrefslogtreecommitdiff
path: root/lib/skyline.py
diff options
context:
space:
mode:
authorlim <lim@stsci.edu>2012-06-12 17:07:15 -0400
committerlim <lim@stsci.edu>2012-06-12 17:07:15 -0400
commit15c745cdcec4643721684eefe2ac072ec2c9ed09 (patch)
treecc7f4545400e0dd501680882e5668da0ed67814e /lib/skyline.py
parent4ae0ebf4e0cccc3d3aa27b5f0e73f9a7d85c4690 (diff)
downloadstsci.sphere-15c745cdcec4643721684eefe2ac072ec2c9ed09.tar.gz
SkyLine no longer inherits from SphericalPolygon
git-svn-id: http://svn.stsci.edu/svn/ssb/stsci_python/stsci_python/branches/sphere@17327 fe389314-cf27-0410-b35b-8c050e845b92 Former-commit-id: 8da35f5ca064d5a042d372c39d121f0812a6f483
Diffstat (limited to 'lib/skyline.py')
-rw-r--r--lib/skyline.py216
1 files changed, 59 insertions, 157 deletions
diff --git a/lib/skyline.py b/lib/skyline.py
index 880f627..bcc3bae 100644
--- a/lib/skyline.py
+++ b/lib/skyline.py
@@ -96,8 +96,8 @@ from stwcs import wcsutil
from .polygon import SphericalPolygon
__all__ = ['SkyLine']
-__version__ = '0.1a'
-__vdate__ = '07-Jun-2012'
+__version__ = '0.2a'
+__vdate__ = '12-Jun-2012'
class SkyLineMember(object):
@@ -109,6 +109,8 @@ class SkyLineMember(object):
`SphericalPolygon` instance from WCS under
`polygon`.
+ Parameters
+ ----------
self: obj
SkyLineMember instance.
@@ -140,7 +142,7 @@ class SkyLineMember(object):
def polygon(self):
return self._polygon
-class SkyLine(SphericalPolygon):
+class SkyLine(object):
def __init__(self, fname, extname='SCI'):
"""
@@ -159,8 +161,6 @@ class SkyLine(SphericalPolygon):
HST images. PRIMARY if image is single ext.
"""
- SphericalPolygon.__init__(self, [])
-
# Convert SCI data to SkyLineMember
if fname is not None:
with pyfits.open(fname) as pf:
@@ -172,37 +172,29 @@ class SkyLine(SphericalPolygon):
# Put mosaic of all the chips in SkyLine
if len(self.members) > 0:
- self._set_polygon(
- SphericalPolygon.multi_union([m.polygon for m in self.members]))
+ self.polygon = SphericalPolygon.multi_union([m.polygon for m in self.members])
+ else:
+ self.polygon = SphericalPolygon([])
- def __repr__(self):
- return 'SkyLine(%r, %r, %r)' % (self.points, self.inside, self.members)
+ def __getattr__(self, what):
+ return getattr(self.polygon, what)
- def _find_members(self, given_members):
- """
- Find `SkyLineMember` in *given_members* that is in
- *self*. This is used for intersection.
-
- Parameters
- ----------
- self: obj
- `SkyLine` instance.
+ def __copy__(self):
+ return deepcopy(self)
+
+ def __repr__(self):
+ return 'SkyLine(%r, %r)' % (self.polygon, self.members)
- given_members: list
- List of `SkyLineMember` to consider.
+ @property
+ def polygon(self):
+ """`SphericalPolygon` portion of `SkyLine`."""
+ return self._polygon
- Returns
- -------
- new_members: list
- List of `SkyLineMember` belonging to *self*.
-
- """
- if len(self.points) > 0:
- out_mem = [m for m in given_members if
- self.intersects_poly(m.polygon)]
- else:
- out_mem = []
- return out_mem
+ @polygon.setter
+ def polygon(self, value):
+ """Deep copy a `SphericalPolygon`."""
+ assert isinstance(value, SphericalPolygon)
+ self._polygon = copy(value)
@property
def members(self):
@@ -222,158 +214,68 @@ class SkyLine(SphericalPolygon):
if v not in self._members:
self._members.append(v)
- def _set_polygon(self, sph):
- """Set `SkyLine` to given `SphericalPolygon` properties."""
- assert isinstance(sph, SphericalPolygon)
- self._points = sph.points.copy()
- self._inside = sph.inside.copy()
-
- @classmethod
- def _all_members(cls, skylines):
- """
- Return a list of combined members for *skylines*.
- Duplicates are allowed because they will be removed
- anyway by `members.setter`.
-
- """
- newmem = []
- for s in skylines:
- newmem += s.members
- return newmem
-
- @classmethod
- def _overload_parentcls(cls, func, *args, **kwargs):
- """Call `SphericalPolygon` class method but return `SkyLine`."""
- newcls = cls(None)
- newcls._set_polygon(func(*args, **kwargs))
- return newcls
-
- @classmethod
- def from_radec(cls, *args, **kwargs):
- """
- Create a new `SkyLine` from a list of (*ra*, *dec*)
- points.
-
- See also
- --------
- sphere.polygon.SphericalPolygon.from_radec
-
- """
- return cls._overload_parentcls(SphericalPolygon.from_radec,
- *args, **kwargs)
-
- @classmethod
- def from_cone(cls, *args, **kwargs):
- """
- Create a new `SkyLine` from a cone (otherwise known
- as a 'small circle') defined using (*ra*, *dec*, *radius*).
-
- See also
- --------
- sphere.polygon.SphericalPolygon.from_cone
-
- """
- return cls._overload_parentcls(SphericalPolygon.from_cone,
- *args, **kwargs)
-
- @classmethod
- def from_wcs(cls, *args, **kwargs):
- """
- Create a new `SkyLine` from the footprint of a FITS
- WCS specification.
-
- See also
- --------
- sphere.polygon.SphericalPolygon.from_wcs
-
- """
- return cls._overload_parentcls(SphericalPolygon.from_wcs,
- *args, **kwargs)
-
- @classmethod
- def multi_union(cls, skylines, **kwargs):
+ def _find_members(self, given_members):
"""
- Return a new `SkyLine` that is the union of all of
- the *skylines*.
-
- See also
- --------
- sphere.polygon.SphericalPolygon.multi_union
+ Find `SkyLineMember` in *given_members* that is in
+ *self*. This is used for intersection.
- """
- newcls = cls._overload_parentcls(SphericalPolygon.multi_union,
- skylines, **kwargs)
- newcls.members = cls._all_members(skylines)
- return newcls
+ Parameters
+ ----------
+ self: obj
+ `SkyLine` instance.
- @classmethod
- def multi_intersection(cls, skylines, **kwargs):
- """
- Return a new `SkyLine` that is the intersection of
- all of the *skylines*.
+ given_members: list
+ List of `SkyLineMember` to consider.
- See also
- --------
- sphere.polygon.SphericalPolygon.multi_intersection
+ Returns
+ -------
+ new_members: list
+ List of `SkyLineMember` belonging to *self*.
"""
- newcls = cls._overload_parentcls(SphericalPolygon.multi_intersection,
- skylines, **kwargs)
- newcls.members = newcls._find_members(cls._all_members(skylines))
- return newcls
+ if len(self.points) > 0:
+ out_mem = [m for m in given_members if
+ self.intersects_poly(m.polygon)]
+ else:
+ out_mem = []
+ return out_mem
- def union(self, other):
+ def add_image(self, other):
"""
Return a new `SkyLine` that is the union of *self*
and *other*.
- Parameters
- ----------
- self, other: obj
- `SkyLine` instance.
-
- Returns
- -------
- out_skyline: obj
- `SkyLine` instance.
+ .. warning:: `SkyLine.union` only returns `polygon`
+ without `members`.
Examples
--------
>>> s1 = SkyLine('image1.fits')
>>> s2 = SkyLine('image2.fits')
- >>> s3 = s1.union(s2)
-
- See also
- --------
- sphere.polygon.SphericalPolygon.union
+ >>> s3 = s1.add_image(s2)
"""
- return self.__class__.multi_union([self, other])
+ newcls = self.__class__(None)
+ newcls.polygon = self.union(other)
+ newcls.members = self.members + other.members
+ return newcls
- def intersection(self, other):
+ def find_intersection(self, other):
"""
Return a new `SkyLine` that is the intersection of
*self* and *other*.
- Parameters
- ----------
- self, other: obj
- `SkyLine` instance.
-
- Returns
- -------
- out_skyline: obj
- `SkyLine` instance.
+ .. warning:: `SkyLine.intersection` only returns
+ `polygon` without `members`.
Examples
--------
>>> s1 = SkyLine('image1.fits')
>>> s2 = SkyLine('image2.fits')
- >>> s3 = s1.intersection(s2)
-
- See also
- --------
- sphere.polygon.SphericalPolygon.intersection
+ >>> s3 = s1.find_intersection(s2)
"""
- return self.__class__.multi_intersection([self, other])
+ newcls = self.__class__(None)
+ newcls.polygon = self.intersection(other)
+ newcls.members = newcls._find_members(self.members + other.members)
+ return newcls