def get_test_function(px, py, sx, sy, gal): axis1 = wcs.Axis("RA", "deg") axis2 = wcs.Axis("DEC", "deg") if gal: axis1 = wcs.Axis("GLON", "deg") axis2 = wcs.Axis("GLAT", "deg") axis_2d = wcs.CoordAxis2D(axis1, axis2) spatial_wcs = chunk.SpatialWCS(axis_2d) spatial_wcs.coordsys = "ICRS" wcs.coordsys = "ICRS" if gal: spatial_wcs.coordsys = None wcs.equinox = None # Simple frame set: 1000x1000 pixels, 1 pixel = 1.0e-3 deg dim = wcs.Dimension2D(1000, 1000) ref = wcs.Coord2D(wcs.RefCoord(px, sx), wcs.RefCoord(py, sy)) axis_2d.function = wcs.CoordFunction2D(dim, ref, 1.e-3, 0.0, 0.0, 1.0e-3) return spatial_wcs
def test_function(self): # Polarization function is None, should not produce an error axis = Axis("STOKES", "cunit") axis_1d = CoordAxis1D(axis) polarization = PolarizationWCS(axis_1d) wcsvalidator._validate_polarization_wcs(polarization) # Polarization axis function with naxis=1 naxis = int(1) delta = float(2.5) ref_coord = wcs.RefCoord(float(1.0), float(2.0)) axis_1d.function = CoordFunction1D(naxis, delta, ref_coord) polarization = PolarizationWCS(axis_1d) wcsvalidator._validate_polarization_wcs(polarization) # Polarization axis function with naxis>1 naxis = int(3) delta = float(2.5) ref_coord = wcs.RefCoord(float(1.0), float(2.0)) axis_1d.function = CoordFunction1D(naxis, delta, ref_coord) polarization = PolarizationWCS(axis_1d) wcsvalidator._validate_polarization_wcs(polarization) # Polarization axis function with invalid naxis=0 naxis = int(0) delta = float(2.5) ref_coord = wcs.RefCoord(float(1.0), float(2.0)) axis_1d.function = CoordFunction1D(naxis, delta, ref_coord) polarization = PolarizationWCS(axis_1d) with pytest.raises(InvalidWCSError) as ex: wcsvalidator._validate_polarization_wcs(polarization) assert ('Invalid Polarization WCS' in str(ex.value)) assert ('Invalid naxis value' in str(ex.value))
def bad_wcs(): axis1 = wcs.Axis("RA---TAN", "deg") axis2 = wcs.Axis("DEC--TAN", "deg") axis = wcs.CoordAxis2D(axis1, axis2) spatial_wcs = chunk.SpatialWCS(axis) spatial_wcs.equinox = None dim = wcs.Dimension2D(1024, 1024) ref = wcs.Coord2D(wcs.RefCoord(512.0, 10.0), wcs.RefCoord(512.0, 20.0)) # Create Invalid function axis.function = wcs.CoordFunction2D(dim, ref, 1.0e-3, 0.0, 0.0, 0.0) # singular CD matrix return spatial_wcs
def getTestRange(complete, px, sx, nx, ds): axis = wcs.CoordAxis1D(wcs.Axis("WAVE", "nm")) spectral_wcs = chunk.SpectralWCS(axis, "TOPOCENT") if complete: spectral_wcs.bandpassName = BANDPASS_NAME spectral_wcs.restwav = 6563.0e-10 # meters spectral_wcs.resolvingPower = 33000.0 spectral_wcs.transition = TRANSITION c1 = wcs.RefCoord(px, sx) c2 = wcs.RefCoord(px + nx, sx + nx * ds) spectral_wcs.axis.range = wcs.CoordRange1D(c1, c2) # log.debug("test range: " + axis.range) return spectral_wcs
def get_custom_wcs(self): axis = wcs.Axis('Foo') axis1d = wcs.CoordAxis1D(axis) axis1d.function = wcs.CoordFunction1D(int(5), 1.0, wcs.RefCoord(1.0, 1.0)) custom = chunk.CustomWCS(axis1d) return custom
def get_polarization_wcs(self): axis = wcs.Axis('STOKES') axis1d = wcs.CoordAxis1D(axis) #IQUV axis1d.function = wcs.CoordFunction1D(int(4), 1.0, wcs.RefCoord(1.0, 1.0)) pol = chunk.PolarizationWCS(axis1d) return pol
def bad_delta(): axis_1d = wcs.CoordAxis1D(wcs.Axis("UTC", "d")) temporal_wcs = chunk.TemporalWCS(axis_1d) # delta == 0.0 is bad ref_coord = wcs.RefCoord(float(1.0), float(2.0)) temporal_wcs.axis.function = CoordFunction1D(int(100), 0.0, ref_coord) return temporal_wcs
def bad_range_wcs(): px = float(0.5) sx = float(54321.0) nx = 200 ds = float(0.01) axis_1d = wcs.CoordAxis1D(wcs.Axis("UTC", "d")) temporal_wcs = chunk.TemporalWCS(axis_1d) temporal_wcs.exposure = 300.0 temporal_wcs.resolution = 0.1 # divide into 2 samples with a gap between c1 = wcs.RefCoord(px, sx) c2 = wcs.RefCoord(0.0, 0.0) c3 = wcs.RefCoord(px + nx * 0.66, sx + nx * ds * 0.66) c4 = wcs.RefCoord(px + nx, sx + nx * ds) temporal_wcs.axis.bounds = wcs.CoordBounds1D() temporal_wcs.axis.bounds.samples.append(wcs.CoordRange1D(c1, c3)) temporal_wcs.axis.bounds.samples.append(wcs.CoordRange1D(c4, c2)) return temporal_wcs
def bad_wcs(): px = float(0.5) sx = float(400.0) nx = 200 ds = float(1.0) bad_energy = EnergyTestUtil.getTestFunction(True, px, sx * nx * ds, nx, ds) # Make function invalid c1 = wcs.RefCoord(0.5, 2000.0) bad_energy.axis.function = wcs.CoordFunction1D(100, 10.0, c1) return wcs
def good_wcs(): px = float(0.5) sx = float(400.0) nx = float(200.0) ds = float(1.0) # SpectralWCS energy = EnergyTestUtil.getTestRange(True, px, sx * nx * ds, nx, ds) c1 = wcs.RefCoord(0.5, 2000.0) energy.axis.function = wcs.CoordFunction1D(100, 10.0, c1) return energy
def get_test_function(complete, px, sx, nx, ds): axis_1d = wcs.CoordAxis1D(wcs.Axis("UTC", "d")) if complete: wcs.exposure = 300.0 wcs.resolution = 0.1 temporal_wcs = chunk.TemporalWCS(axis_1d) ref_coord = wcs.RefCoord(px, sx) temporal_wcs.axis.function = wcs.CoordFunction1D(nx, ds, ref_coord) return temporal_wcs
def getTestFunction(complete, px, sx, nx, ds): axis = wcs.CoordAxis1D(wcs.Axis("WAVE", "nm")) spectral_wcs = chunk.SpectralWCS(axis, "TOPOCENT") if complete: spectral_wcs.bandpassName = BANDPASS_NAME spectral_wcs.restwav = 6563.0e-10 # meters spectral_wcs.resolvingPower = 33000.0 spectral_wcs.transition = TRANSITION c1 = wcs.RefCoord(px, sx) spectral_wcs.axis.function = wcs.CoordFunction1D(nx, ds, c1) return spectral_wcs
def get_coord_axis2d(self): axis1 = wcs.Axis("axis1Ctype", "axis1Cunit") axis2 = wcs.Axis("axis2Ctype", "axis2Cunit") coord_axis2d = wcs.CoordAxis2D(axis1, axis2) if self.complete: coord_axis2d.error1 = wcs.CoordError(1.0, 1.5) coord_axis2d.error2 = wcs.CoordError(2.0, 2.5) start = wcs.Coord2D(wcs.RefCoord(3.0, 3.5), wcs.RefCoord(4.0, 4.5)) end = wcs.Coord2D(wcs.RefCoord(5.0, 5.5), wcs.RefCoord(6.0, 6.5)) coord_axis2d.range = wcs.CoordRange2D(start, end) dimension = wcs.Dimension2D(7, 8) ref_coord = wcs.Coord2D(wcs.RefCoord(9.0, 9.5), wcs.RefCoord(10.0, 10.5)) coord_axis2d.function = ( wcs.CoordFunction2D(dimension, ref_coord, 11.0, 12.0, 13.0, 14.0)) if self.bounds_is_circle: center = wcs.ValueCoord2D(15.0, 16.0) coord_axis2d.bounds = wcs.CoordCircle2D(center, 17.0) else: polygon = wcs.CoordPolygon2D() polygon.vertices.append(wcs.ValueCoord2D(15.0, 16.0)) polygon.vertices.append(wcs.ValueCoord2D(17.0, 18.0)) polygon.vertices.append(wcs.ValueCoord2D(19.0, 20.0)) coord_axis2d.bounds = polygon return coord_axis2d
def get_test_function_with_function(ctype, unit, px, sx, nx, ds): error = None range = None bounds = None naxis = int(1) delta = float(2.5) ref_coord = wcs.RefCoord(float(1.0), float(2.0)) function = CoordFunction1D(naxis, delta, ref_coord) axis_1d = CoordAxis1D(wcs.Axis(ctype, unit), error, range, bounds, function) ref_coord = RefCoord(px, sx) axis_1d.function = CoordFunction1D(nx, ds, ref_coord) custom_wcs = chunk.CustomWCS(axis_1d) return custom_wcs
def get_coord_axis1d(self): coord_axis1d = wcs.CoordAxis1D(wcs.Axis("axisCtype", "axisCunit")) if self.complete: coord_axis1d.error = wcs.CoordError(1.0, 1.5) coord_axis1d.range = wcs.CoordRange1D(wcs.RefCoord(2.0, 2.5), wcs.RefCoord(3.0, 3.5)) coord_axis1d.function = ( wcs.CoordFunction1D(4, 4.5, wcs.RefCoord(5.0, 5.5))) bounds = wcs.CoordBounds1D() bounds.samples.append(wcs.CoordRange1D(wcs.RefCoord(6.0, 6.5), wcs.RefCoord(7.0, 7.5))) bounds.samples.append(wcs.CoordRange1D(wcs.RefCoord(8.0, 8.5), wcs.RefCoord(9.0, 9.5))) coord_axis1d.bounds = bounds return coord_axis1d
def get_test_function_with_bounds_3_samples(ctype, unit, px, sx, nx, ds): error = None range = None start = RefCoord(float(0.8), float(1.1)) end = RefCoord(float(10.8), float(11.1)) b_range_1 = CoordRange1D(start, end) start = RefCoord(float(0.9), float(1.2)) end = RefCoord(float(10.9), float(11.2)) b_range_2 = CoordRange1D(start, end) start = RefCoord(float(-0.9), float(-1.2)) end = RefCoord(float(0.6), float(0.2)) b_range_3 = CoordRange1D(start, end) samples = caom_util.TypedList(CoordRange1D, b_range_1, b_range_2, b_range_3) bounds = CoordBounds1D(samples) axis_1d = wcs.CoordAxis1D(wcs.Axis(ctype, unit), error, range, bounds) ref_coord = wcs.RefCoord(px, sx) axis_1d.function = wcs.CoordFunction1D(nx, ds, ref_coord) custom_wcs = chunk.CustomWCS(axis_1d) return custom_wcs
def get_test_function(ctype, unit, px, sx, nx, ds): axis_1d = wcs.CoordAxis1D(wcs.Axis(ctype, unit)) ref_coord = wcs.RefCoord(px, sx) axis_1d.function = wcs.CoordFunction1D(nx, ds, ref_coord) custom_wcs = chunk.CustomWCS(axis_1d) return custom_wcs