Skip to content

Commit

Permalink
add line and annunlus to parser
Browse files Browse the repository at this point in the history
  • Loading branch information
joleroi committed May 10, 2017
1 parent 1ac6715 commit e77e1b8
Show file tree
Hide file tree
Showing 2 changed files with 83 additions and 111 deletions.
152 changes: 49 additions & 103 deletions dev/regions_pyregion_comparison.csv
Original file line number Diff line number Diff line change
@@ -1,106 +1,52 @@
filename,time_regions,time_pyregion,compl_pyregion,compl_regions
<<<<<<< HEAD
ds9.linear.wcsi.reg,0.008,0.751,100.0%,34.3%
ds9.mosaic.fk4.hms.reg,0.022,0.733,100.0%,34.3%
ds9.linear.wcsi.reg,0.005,0.842,100.0%,37.1%
ds9.mosaic.fk4.hms.reg,0.029,0.747,100.0%,37.1%
ds9.color.reg,0.005,0.229,100.0%,100.0%
ds9.fk5.strip.reg,0.008,0.341,100.0%,40.0%
ds9.fk5.reg,0.009,0.465,100.0%,33.3%
ds9.physical.strip.reg,0.002,0.320,100.0%,40.0%
ds9.physical.windows.reg,0.002,0.427,100.0%,34.3%
ds9.fk5.hms.reg,0.010,0.478,100.0%,33.3%
ds9.icrs.hms.reg,0.010,0.468,100.0%,33.3%
ds9.icrs.strip.reg,0.008,0.343,100.0%,40.0%
ds9.color.spaces.reg,0.005,0.229,100.0%,100.0%
ds9.mosaic.ecliptic.hms.reg,0.019,0.734,100.0%,34.3%
ds9.linear.wcs.reg,0.004,0.721,100.0%,34.3%
ds9.mosaic.ecliptic.reg,0.015,0.729,100.0%,34.3%
ds9.linear.wcsc.reg,0.004,0.752,100.0%,34.3%
ds9.fk4.hms.strip.reg,0.011,0.340,100.0%,40.0%
ds9.mosaic.galactic.reg,0.016,0.730,100.0%,34.3%
ds9.linear.wcsd.reg,0.004,0.757,100.0%,34.3%
physical_reference.reg,0.001,0.226,100.0%,100.0%
ds9.fk4.reg,0.009,0.480,100.0%,33.3%
ds9.image.strip.reg,0.002,0.356,100.0%,40.0%
ds9.icrs.hms.strip.reg,0.010,0.357,100.0%,40.0%
ds9.image.reg,0.002,0.461,100.0%,33.3%
ds9.mosaic.fk5.hms.reg,0.021,0.768,100.0%,34.3%
ds9.mosaic.image.reg,0.004,0.762,100.0%,34.3%
ds9.physical.reg,0.002,0.438,100.0%,33.3%
ds9.ecliptic.reg,0.008,0.502,100.0%,33.3%
ds9.ecliptic.strip.reg,0.008,0.365,100.0%,40.0%
ds9.fits.reg,0.001,0.267,100.0%,88.9%
ds9.icrs.reg,0.009,0.490,100.0%,33.3%
ds9.mosaic.fk4.reg,0.019,0.788,100.0%,34.3%
ds9.mosaic.icrs.hms.reg,0.020,0.747,100.0%,34.3%
ds9.ecliptic.hms.reg,0.009,0.464,100.0%,33.3%
ds9.fk4.hms.reg,0.011,0.466,100.0%,33.3%
ds9.mosaic.galactic.hms.reg,0.019,0.729,100.0%,34.3%
ds9.mosaic.icrs.reg,0.016,0.729,100.0%,34.3%
ds9.fk5.strip.reg,0.010,0.345,100.0%,43.3%
ds9.fk5.reg,0.011,0.683,100.0%,36.1%
ds9.physical.strip.reg,0.002,0.368,100.0%,43.3%
ds9.physical.windows.reg,0.002,0.498,100.0%,37.1%
ds9.fk5.hms.reg,0.013,0.477,100.0%,36.1%
ds9.icrs.hms.reg,0.012,0.479,100.0%,36.1%
ds9.icrs.strip.reg,0.010,0.341,100.0%,43.3%
ds9.color.spaces.reg,0.005,0.224,100.0%,100.0%
ds9.mosaic.ecliptic.hms.reg,0.022,0.740,100.0%,37.1%
ds9.linear.wcs.reg,0.004,0.742,100.0%,37.1%
ds9.mosaic.ecliptic.reg,0.019,0.734,100.0%,37.1%
ds9.linear.wcsc.reg,0.004,0.813,100.0%,37.1%
ds9.fk4.hms.strip.reg,0.016,0.400,100.0%,43.3%
ds9.mosaic.galactic.reg,0.021,0.794,100.0%,37.1%
ds9.linear.wcsd.reg,0.004,0.767,100.0%,37.1%
physical_reference.reg,0.001,0.220,100.0%,100.0%
ds9.fk4.reg,0.012,0.467,100.0%,36.1%
ds9.image.strip.reg,0.002,0.321,100.0%,43.3%
ds9.icrs.hms.strip.reg,0.012,0.351,100.0%,43.3%
ds9.image.reg,0.002,0.499,100.0%,36.1%
ds9.mosaic.fk5.hms.reg,0.029,0.777,100.0%,37.1%
ds9.mosaic.image.reg,0.004,0.727,100.0%,37.1%
ds9.physical.reg,0.002,0.437,100.0%,36.1%
ds9.ecliptic.reg,0.010,0.472,100.0%,36.1%
ds9.ecliptic.strip.reg,0.009,0.342,100.0%,43.3%
ds9.fits.reg,0.001,0.253,100.0%,100.0%
ds9.icrs.reg,0.010,0.465,100.0%,36.1%
ds9.mosaic.fk4.reg,0.023,0.739,100.0%,37.1%
ds9.mosaic.icrs.hms.reg,0.023,0.824,100.0%,37.1%
ds9.ecliptic.hms.reg,0.011,0.508,100.0%,36.1%
ds9.fk4.hms.reg,0.014,0.570,100.0%,36.1%
ds9.mosaic.galactic.hms.reg,0.038,0.834,100.0%,37.1%
ds9.mosaic.icrs.reg,0.023,0.820,100.0%,37.1%
ds9.comment.reg,0.000,-1.000,0.0%,nan%
fk5_reference.reg,0.002,0.216,100.0%,100.0%
ds9.mosaic.fk5.reg,0.017,0.737,100.0%,34.3%
ds9.fk4.strip.reg,0.009,0.340,100.0%,40.0%
ds9.galactic.strip.reg,0.008,0.341,100.0%,40.0%
ds9.galactic.reg,0.008,0.467,100.0%,33.3%
ds9.composite.reg,0.012,0.480,100.0%,0.0%
ds9.linear.wcsa.reg,0.004,0.759,100.0%,34.3%
ds9.linear.wcsp.reg,0.004,0.720,100.0%,34.3%
ds9.fk5.hms.strip.reg,0.010,0.341,100.0%,40.0%
ds9.galactic.hms.reg,0.010,0.511,100.0%,33.3%
galactic_reference.reg,0.002,0.221,100.0%,100.0%
ds9.galactic.hms.strip.reg,0.010,0.347,100.0%,40.0%
ds9.mosaic.physical.reg,0.004,0.720,100.0%,34.3%
ds9.ecliptic.hms.strip.reg,0.009,0.344,100.0%,40.0%
=======
ds9.linear.wcsi.reg,0.035,5.132,91.4%,34.3%
ds9.mosaic.fk4.hms.reg,0.163,5.549,91.4%,34.3%
ds9.color.reg,0.019,1.935,100.0%,100.0%
ds9.fk5.strip.reg,0.082,-1.000,0.0%,40.0%
ds9.fk5.reg,0.034,2.360,91.7%,33.3%
ds9.physical.strip.reg,0.006,-1.000,0.0%,40.0%
ds9.physical.windows.reg,0.007,1.576,91.4%,34.3%
ds9.fk5.hms.reg,0.041,1.687,91.7%,33.3%
ds9.icrs.hms.reg,0.037,1.728,91.7%,33.3%
ds9.icrs.strip.reg,0.029,-1.000,0.0%,40.0%
ds9.color.spaces.reg,0.020,0.860,100.0%,100.0%
ds9.mosaic.ecliptic.hms.reg,0.073,2.668,91.4%,34.3%
ds9.linear.wcs.reg,0.014,3.252,91.4%,34.3%
ds9.mosaic.ecliptic.reg,0.076,2.663,91.4%,34.3%
ds9.linear.wcsc.reg,0.014,3.605,91.4%,34.3%
ds9.fk4.hms.strip.reg,0.156,-1.000,0.0%,40.0%
ds9.mosaic.galactic.reg,0.061,5.826,91.4%,34.3%
ds9.linear.wcsd.reg,0.062,2.777,91.4%,34.3%
physical_reference.reg,0.003,0.789,100.0%,100.0%
ds9.fk4.reg,0.035,1.686,91.7%,33.3%
ds9.image.strip.reg,0.006,-1.000,0.0%,40.0%
ds9.icrs.hms.strip.reg,0.035,-1.000,0.0%,40.0%
ds9.image.reg,0.007,1.544,91.7%,33.3%
ds9.mosaic.fk5.hms.reg,0.078,2.604,91.4%,34.3%
ds9.mosaic.image.reg,0.014,2.541,91.4%,34.3%
ds9.physical.reg,0.007,1.529,91.7%,33.3%
ds9.ecliptic.reg,0.029,2.727,91.7%,33.3%
ds9.ecliptic.strip.reg,0.028,-1.000,0.0%,40.0%
ds9.fits.reg,0.006,1.087,100.0%,88.9%
ds9.icrs.reg,0.030,2.249,91.7%,33.3%
ds9.mosaic.fk4.reg,0.070,2.739,91.4%,34.3%
ds9.mosaic.icrs.hms.reg,0.080,3.020,91.4%,34.3%
ds9.ecliptic.hms.reg,0.081,4.070,91.7%,33.3%
ds9.fk4.hms.reg,0.102,4.080,91.7%,33.3%
ds9.mosaic.galactic.hms.reg,0.183,2.608,91.4%,34.3%
ds9.mosaic.icrs.reg,0.059,2.928,91.4%,34.3%
ds9.comment.reg,0.009,-1.000,0.0%,nan%
fk5_reference.reg,0.009,0.780,100.0%,100.0%
ds9.mosaic.fk5.reg,0.065,2.601,91.4%,34.3%
ds9.fk4.strip.reg,0.033,-1.000,0.0%,40.0%
ds9.galactic.strip.reg,0.030,-1.000,0.0%,40.0%
ds9.galactic.reg,0.034,1.648,91.7%,33.3%
ds9.composite.reg,0.035,2.998,91.7%,0.0%
ds9.linear.wcsa.reg,0.036,5.855,91.4%,34.3%
ds9.linear.wcsp.reg,0.036,5.473,91.4%,34.3%
ds9.fk5.hms.strip.reg,0.093,-1.000,0.0%,40.0%
ds9.galactic.hms.reg,0.102,2.551,91.7%,33.3%
galactic_reference.reg,0.008,0.784,100.0%,100.0%
ds9.galactic.hms.strip.reg,0.036,-1.000,0.0%,40.0%
ds9.mosaic.physical.reg,0.014,2.570,91.4%,34.3%
ds9.ecliptic.hms.strip.reg,0.035,-1.000,0.0%,40.0%
>>>>>>> changes to dev tools
fk5_reference.reg,0.002,0.217,100.0%,100.0%
ds9.mosaic.fk5.reg,0.024,0.847,100.0%,37.1%
ds9.fk4.strip.reg,0.011,0.356,100.0%,43.3%
ds9.galactic.strip.reg,0.013,0.390,100.0%,43.3%
ds9.galactic.reg,0.010,0.543,100.0%,36.1%
ds9.composite.reg,0.011,0.485,100.0%,0.0%
ds9.linear.wcsa.reg,0.005,0.765,100.0%,37.1%
ds9.linear.wcsp.reg,0.005,0.757,100.0%,37.1%
ds9.fk5.hms.strip.reg,0.013,0.342,100.0%,43.3%
ds9.galactic.hms.reg,0.012,0.467,100.0%,36.1%
galactic_reference.reg,0.002,0.219,100.0%,100.0%
ds9.galactic.hms.strip.reg,0.012,0.342,100.0%,43.3%
ds9.mosaic.physical.reg,0.004,0.765,100.0%,37.1%
ds9.ecliptic.hms.strip.reg,0.011,0.343,100.0%,43.3%
42 changes: 34 additions & 8 deletions regions/io/read_ds9.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
from astropy import log
from astropy.utils.exceptions import AstropyUserWarning
from warnings import warn
from ..shapes import circle, rectangle, polygon, ellipse, point
from ..shapes import circle, rectangle, polygon, ellipse, point, line, annulus
from ..core import PixCoord

__all__ = [
Expand Down Expand Up @@ -123,6 +123,8 @@ def parse_angular_length_quantity(string_rep):
'ellipse': itertools.chain((coordinate, coordinate), itertools.cycle((radius,))),
'box': (coordinate, coordinate, width, height, angle),
'polygon': itertools.cycle((coordinate,)),
'line': (coordinate, coordinate, coordinate, coordinate),
'annulus': itertools.chain((coordinate, coordinate), itertools.cycle((radius,))),
}

coordinate_systems = ['fk5', 'fk4', 'icrs', 'galactic', 'wcs', 'physical', 'image', 'ecliptic']
Expand Down Expand Up @@ -214,6 +216,23 @@ def ds9_region_list_to_objects(region_list):
reg = point.PointPixelRegion(coord_list[0])
else:
raise DS9RegionParserError("No central coordinate")
elif region_type == 'line':
if isinstance(coord_list[0], BaseCoordinateFrame):
reg = line.LineSkyRegion(coord_list[0], coord_list[1])
elif isinstance(coord_list[0], PixCoord):
reg = line.LinePixelRegion(coord_list[0], coord_list[1])
else:
raise DS9RegionParserError("No central coordinate")
elif region_type == 'annulus':
# Do not read more than one annulus for now
if len(coord_list) > 3:
continue
if isinstance(coord_list[0], BaseCoordinateFrame):
reg = annulus.CircleAnnulusSkyRegion(coord_list[0], coord_list[1], coord_list[2])
elif isinstance(coord_list[0], PixCoord):
reg = annulus.CircleAnnulusPixelRegion(coord_list[0], coord_list[1], coord_list[2])
else:
raise DS9RegionParserError("No central coordinate")
else:
# Note: this should effectively never happen, because it would
# imply that the line_parser found a region that didn't match the
Expand Down Expand Up @@ -401,8 +420,8 @@ def line_parser(line, coordsys=None, errors='strict'):
parsed = type_parser(coords_etc, language_spec[region_type],
coordsys_name_mapping[coordsys])

# Reset iterator for ellipse annulus
if region_type == 'ellipse':
# Reset iterator for ellipse annulus and annulus
if region_type in ['ellipse', 'annulus']:
language_spec[region_type] = itertools.chain((coordinate, coordinate), itertools.cycle((radius,)))

parsed_angles = [(x, y)
Expand All @@ -420,9 +439,11 @@ def line_parser(line, coordsys=None, errors='strict'):
# otherwise, they are vector quantitites
lon, lat = u.Quantity(lon), u.Quantity(lat)
sphcoords = coordinates.UnitSphericalRepresentation(lon, lat)
coords = frame(sphcoords)

return region_type, [coords] + parsed[len(coords) * 2:], parsed_meta, composite, include
coords = [frame(sphcoords)]
if region_type == 'line':
coords = [coords[0][0], coords[0][1]]
# line constructor expectes two scalar coordinates
return region_type, coords + parsed[len(coords) * 2:], parsed_meta, composite, include
else:
parsed = type_parser(coords_etc, language_spec[region_type],
coordsys)
Expand All @@ -431,13 +452,18 @@ def line_parser(line, coordsys=None, errors='strict'):
# b/c can't typecheck when iterating as in sky coord case
coord = PixCoord(parsed[0::2], parsed[1::2])
parsed_return = [coord]
elif region_type == 'line':
# special case line because it contains two coordinate points
coord1 = PixCoord(parsed[0], parsed[1])
coord2 = PixCoord(parsed[2], parsed[3])
parsed_return = [coord1, coord2] + parsed[4:]
else:
parsed = [_.value for _ in parsed]
coord = PixCoord(parsed[0], parsed[1])
parsed_return = [coord] + parsed[2:]

# Reset iterator for ellipse annulus
if region_type == 'ellipse':
# Reset iterator for ellipse annulus, annulus
if region_type in ['ellipse', 'annulus']:
language_spec[region_type] = itertools.chain((coordinate, coordinate), itertools.cycle((radius,)))

return region_type, parsed_return, parsed_meta, composite, include
Expand Down

0 comments on commit e77e1b8

Please sign in to comment.