def parse_coordinates(self): """Returns a WCS object""" header = self.header wcs = WCS() try: wcs.crval = header["crval1"], header["crval2"] wcs.crpix = header["crpix1"] - 1, header["crpix2"] - 1 wcs.cdelt = header["cdelt1"], header["cdelt2"] except KeyError: msg = "Coordinate system not specified in FITS" logger.error(msg) raise TypeError(msg) try: wcs.ctype = header["ctype1"], header["ctype2"] except KeyError: wcs.ctype = "unknown", "unknown" try: wcs.crota = float(header["crota1"]), float(header["crota2"]) except KeyError: wcs.crota = 0.0, 0.0 try: wcs.cunit = header["cunit1"], header["cunit2"] except KeyError: # The "Definition of the Flexible Image Transport System", version # 3.0, tells us that "units for celestial coordinate systems defined # in this Standard must be degrees", so we assume that if nothing else # is specifiedj msg = "WCS units unknown; using degrees" logger.warning(msg) wcs.cunit = "deg", "deg" return wcs
def make_wcs(crval=None, cdelt=None, crpix=None): """ Make a WCS object for insertion into a synthetic image. Args: crval (tuple): Tuple of (RA, Dec) in decimal degrees at the reference position. crpix (tuple): Tuple of (x,y) co-ordinates describing the reference pixel location corresponding to the crval sky-position. cdelt (tuple): Tuple of (cdelt0, cdelt1) in decimal degrees. This is the pixel width in degrees of arc, but not necessarily aligned to RA, Dec unless `crota` is (0,0). If that *is* the case, then typically cdelt0 is negative since the x-axis is in direction of West (decreasing RA). """ # For any arguments not set we simply assign an arbitrary valid value: if crval is None: crval = 100., 45. if cdelt is None: pixel_width_arcsec = 40 pixel_width_deg = pixel_width_arcsec / 3600. cdelt = (-pixel_width_deg, pixel_width_deg) if crpix is None: crpix = (256.0, 256.0) wcs = WCS() wcs.cdelt = cdelt wcs.crota = (0.0, 0.0) wcs.crpix = crpix wcs.crval = crval wcs.ctype = ('RA---SIN', 'DEC--SIN') wcs.cunit = ('deg', 'deg') return wcs
def setUp(self): # An image pointing at the north celestial pole self.ncp_image = DummyImage() self.ncp_image.wcs = WCS() self.ncp_image.wcs.cdelt = (-0.009722222222222, 0.009722222222222) self.ncp_image.wcs.crota = (0.0, 0.0) self.ncp_image.wcs.crpix = (1025, 1025) # Pixel position of reference self.ncp_image.wcs.crval = (15.0, 90.0 ) # Celestial position of reference self.ncp_image.wcs.ctype = ('RA---SIN', 'DEC--SIN') self.ncp_image.wcs.cunit = ('deg', 'deg') # And an otherwise identical one at the equator self.equator_image = DummyImage() self.equator_image.wcs = WCS() self.equator_image.wcs.cdelt = self.ncp_image.wcs.cdelt self.equator_image.wcs.crota = self.ncp_image.wcs.crota self.equator_image.wcs.crpix = self.ncp_image.wcs.crpix self.equator_image.wcs.crval = (15.0, 0.0 ) # Celestial position of reference self.equator_image.wcs.ctype = self.ncp_image.wcs.ctype self.equator_image.wcs.cunit = self.ncp_image.wcs.cunit self.p = get_paramset()
def parse_coordinates(table): """Returns a WCS object""" wcs = WCS() my_coordinates = table.getkeyword('coords')['direction0'] wcs.crval = my_coordinates['crval'] wcs.crpix = my_coordinates['crpix'] wcs.cdelt = my_coordinates['cdelt'] ctype = ['unknown', 'unknown'] # What about other projections?! if my_coordinates['projection'] == "SIN": if my_coordinates['axes'][0] == "Right Ascension": ctype[0] = "RA---SIN" if my_coordinates['axes'][1] == "Declination": ctype[1] = "DEC--SIN" wcs.ctype = tuple(ctype) # Rotation, units? We better set a default wcs.crota = (0., 0.) wcs.cunit = table.getkeyword('coords')['direction0']['units'] # Update WCS wcs.wcsset() return wcs
def parse_coordinates(self): """Returns a WCS object""" wcs = WCS() my_coordinates = self.table.getkeyword('coords')['direction0'] wcs.crval = my_coordinates['crval'] wcs.crpix = my_coordinates['crpix'] wcs.cdelt = my_coordinates['cdelt'] ctype = ['unknown', 'unknown'] # What about other projections?! if my_coordinates['projection'] == "SIN": if my_coordinates['axes'][0] == "Right Ascension": ctype[0] = "RA---SIN" if my_coordinates['axes'][1] == "Declination": ctype[1] = "DEC--SIN" wcs.ctype = tuple(ctype) # Rotation, units? We better set a default wcs.crota = (0., 0.) wcs.cunit = self.table.getkeyword('coords')['direction0']['units'] return wcs
def test_brightsource(self): wcs = WCS() wcs.cdelt = (-0.011111111111111112, 0.011111111111111112) wcs.crota = (0.0, 0.0) wcs.crpix = (256.0, 256.0) wcs.crval = (212.83583333333334, 52.2025) wcs.ctype = ('RA---SIN', 'DEC--SIN') wcs.cunit = ('deg', 'deg') image = MockImage( { "url": "dummy", "tau_time": 58141509, "taustart_ts": datetime.datetime(2012, 4, 6, 3, 42, 1), "centre_ra": 212.83583333333334, "centre_decl": 52.2025, "freq_eff": 128613281.25, "freq_bw": 1940917.96875, "beam": (1.9211971282958984, 1.7578132629394532, 1.503223674140207) }, wcs) # this image is not near any bright sources result = tkp.quality.brightsource.is_bright_source_near(image) self.assertFalse(result) # there is nothing bright here image.centre_ra = 90 image.centre_decl = 0 result = tkp.quality.brightsource.is_bright_source_near(image) self.assertFalse(result) # this is near the sun image.centre_ra = 0 image.centre_decl = 0 result = tkp.quality.brightsource.is_bright_source_near(image) self.assertTrue(result) # this is near CasA image._centre_ra = degrees(6.123487680622104) image._centre_decl = degrees(1.0265153995604648) result = tkp.quality.brightsource.is_bright_source_near(image) self.assertTrue(result)
def test_brightsource(self): wcs = WCS() wcs.cdelt = (-0.011111111111111112, 0.011111111111111112) wcs.crota = (0.0, 0.0) wcs.crpix = (256.0, 256.0) wcs.crval = (212.83583333333334, 52.2025) wcs.ctype = ('RA---SIN', 'DEC--SIN') wcs.cunit = ('deg', 'deg') image = MockImage( { "url": "dummy", "tau_time": 58141509, "taustart_ts": datetime.datetime(2012, 4, 6, 3, 42, 1), "centre_ra": 212.83583333333334, "centre_decl": 52.2025, "freq_eff": 128613281.25, "freq_bw": 1940917.96875, "beam": (1.9211971282958984, 1.7578132629394532, 1.503223674140207) }, wcs ) # this image is not near any bright sources result = tkp.quality.brightsource.is_bright_source_near(image) self.assertFalse(result) # there is nothing bright here image.centre_ra = 90 image.centre_decl = 0 result = tkp.quality.brightsource.is_bright_source_near(image) self.assertFalse(result) # this is near the sun image.centre_ra = 0 image.centre_decl = 0 result = tkp.quality.brightsource.is_bright_source_near(image) self.assertTrue(result) # this is near CasA image._centre_ra = degrees(6.123487680622104) image._centre_decl = degrees(1.0265153995604648) result = tkp.quality.brightsource.is_bright_source_near(image) self.assertTrue(result)
def make_wcs(crval=None, cdelt=None, crpix=None ): """ Make a WCS object for insertion into a synthetic image. Args: crval (tuple): Tuple of (RA, Dec) in decimal degrees at the reference position. crpix (tuple): Tuple of (x,y) co-ordinates describing the reference pixel location corresponding to the crval sky-position. cdelt (tuple): Tuple of (cdelt0, cdelt1) in decimal degrees. This is the pixel width in degrees of arc, but not necessarily aligned to RA, Dec unless `crota` is (0,0). If that *is* the case, then typically cdelt0 is negative since the x-axis is in direction of West (decreasing RA). """ # For any arguments not set we simply assign an arbitrary valid value: if crval is None: crval = 100., 45. if cdelt is None: pixel_width_arcsec = 40 pixel_width_deg = pixel_width_arcsec / 3600. cdelt = (-pixel_width_deg, pixel_width_deg) if crpix is None: crpix = (256.0, 256.0) wcs = WCS() wcs.cdelt = cdelt wcs.crota = (0.0, 0.0) wcs.crpix = crpix wcs.crval = crval wcs.ctype = ('RA---SIN', 'DEC--SIN') wcs.cunit = ('deg', 'deg') return wcs
def parse_coordinates(self): """Returns a WCS object""" header = self.header wcs = WCS() try: wcs.crval = header['crval1'], header['crval2'] wcs.crpix = header['crpix1'] - 1, header['crpix2'] - 1 wcs.cdelt = header['cdelt1'], header['cdelt2'] except KeyError: msg = "Coordinate system not specified in FITS" logger.error(msg) raise TypeError(msg) try: wcs.ctype = header['ctype1'], header['ctype2'] except KeyError: wcs.ctype = 'unknown', 'unknown' try: wcs.crota = float(header['crota1']), float(header['crota2']) except KeyError: wcs.crota = 0., 0. try: wcs.cunit = header['cunit1'], header['cunit2'] except KeyError: # The "Definition of the Flexible Image Transport System", version # 3.0, tells us that "units for celestial coordinate systems defined # in this Standard must be degrees", so we assume that if nothing else # is specifiedj msg = "WCS units unknown; using degrees" logger.warning(msg) wcs.cunit = 'deg', 'deg' return wcs
def parse_coordinates(header): """Returns a WCS object""" wcs = WCS() try: wcs.crval = header['crval1'], header['crval2'] wcs.crpix = header['crpix1'], header['crpix2'] wcs.cdelt = header['cdelt1'], header['cdelt2'] except KeyError: logger.warn("Coordinate system not specified in FITS") raise try: wcs.ctype = header['ctype1'], header['ctype2'] except KeyError: wcs.ctype = 'unknown', 'unknown' try: wcs.crota = float(header['crota1']), float(header['crota2']) except KeyError: wcs.crota = 0., 0. try: wcs.cunit = header['cunit1'], header['cunit2'] except KeyError: # Blank values default to degrees. logger.warning("WCS units unknown; using defaults") wcs.cunit = '', '' wcs.wcsset() return wcs