def info_xy(self, data_x, data_y, settings): ct = self.get('ct', None) # Get the value under the data coordinates try: # We report the value across the pixel, even though the coords # change halfway across the pixel x, y = int(data_x + 0.5), int(data_y + 0.5) value = self.get_data_xy(x, y) # Mapping from bytescaled values back to original values value = iis.wcs_pix_transform(ct, value) except Exception as e: self.logger.error("Exception getting value at %d,%d: %s" % (x, y, str(e))) value = None # Calculate WCS RA, if available try: # Subtract offsets of data in framebuffer and add offsets of # rect beginning in source data_x = data_x - (ct.dx - 1) + (ct.sx - 1) data_y = data_y - (ct.dy - 1) + (ct.sy - 1) #ra_deg, dec_deg = wcs_coord_transform(ct, data_x, data_y) #ra_txt, dec_txt = self.wcs.deg2fmt(ra_deg, dec_deg, 'str') ra_txt = 'BAD WCS' dec_txt = 'BAD WCS' except Exception as e: self.logger.warning("Bad coordinate conversion: %s" % (str(e))) ra_txt = 'BAD WCS' dec_txt = 'BAD WCS' # Note: FITS coordinates are 1-based, whereas numpy FITS arrays # are 0-based ra_lbl, dec_lbl = six.unichr(945), six.unichr(948) fits_x, fits_y = data_x + 1, data_y + 1 info = Bunch.Bunch(itype='astro', data_x=data_x, data_y=data_y, fits_x=fits_x, fits_y=fits_y, x=fits_x, y=fits_y, ra_txt=ra_txt, dec_txt=dec_txt, ra_lbl=ra_lbl, dec_lbl=dec_lbl, value=value) return info
def info_xy(self, data_x, data_y, settings): # Get the value under the data coordinates try: # We report the value across the pixel, even though the coords # change halfway across the pixel value = self.get_data_xy(int(data_x + 0.5), int(data_y + 0.5)) except Exception as e: value = None system = settings.get('wcs_coords', None) format = settings.get('wcs_display', 'sexagesimal') ra_lbl, dec_lbl = six.unichr(945), six.unichr(948) # Calculate WCS coords, if available try: if self.wcs is None: self.logger.debug("No WCS for this image") ra_txt = dec_txt = 'NO WCS' elif self.wcs.coordsys == 'raw': self.logger.debug("No coordinate system determined") ra_txt = dec_txt = 'NO WCS' elif self.wcs.coordsys == 'pixel': args = [data_x, data_y] + self.revnaxis x, y = self.wcs.pixtosystem(args, system=system, coords='data') ra_txt = "%+.3f" % (x) dec_txt = "%+.3f" % (y) ra_lbl, dec_lbl = "X", "Y" else: args = [data_x, data_y] + self.revnaxis lon_deg, lat_deg = self.wcs.pixtosystem(args, system=system, coords='data') if format == 'sexagesimal': if system in ('galactic', 'ecliptic'): sign, deg, min, sec = wcs.degToDms(lon_deg, isLatitude=False) ra_txt = '+%03d:%02d:%06.3f' % (deg, min, sec) else: deg, min, sec = wcs.degToHms(lon_deg) ra_txt = '%02d:%02d:%06.3f' % (deg, min, sec) sign, deg, min, sec = wcs.degToDms(lat_deg) if sign < 0: sign = '-' else: sign = '+' dec_txt = '%s%02d:%02d:%06.3f' % (sign, deg, min, sec) else: ra_txt = '%+10.7f' % (lon_deg) dec_txt = '%+10.7f' % (lat_deg) if system == 'galactic': ra_lbl, dec_lbl = "l", "b" elif system == 'ecliptic': ra_lbl, dec_lbl = six.unichr(0x03BB), six.unichr(0x03B2) elif system == 'helioprojective': ra_txt = "%+5.3f" % (lon_deg * 3600) dec_txt = "%+5.3f" % (lat_deg * 3600) ra_lbl, dec_lbl = "x-Solar", "y-Solar" except Exception as e: self.logger.warning("Bad coordinate conversion: %s" % (str(e))) ra_txt = dec_txt = 'BAD WCS' try: # log traceback, if possible (type_, value_, tb) = sys.exc_info() tb_str = "".join(traceback.format_tb(tb)) self.logger.error("Traceback:\n%s" % (tb_str)) except Exception: tb_str = "Traceback information unavailable." self.logger.error(tb_str) info = Bunch.Bunch(itype='astro', data_x=data_x, data_y=data_y, x=data_x, y=data_y, ra_txt=ra_txt, dec_txt=dec_txt, ra_lbl=ra_lbl, dec_lbl=dec_lbl, value=value) return info
def info_xy(self, data_x, data_y, settings): # Get the value under the data coordinates try: # We report the value across the pixel, even though the coords # change halfway across the pixel value = self.get_data_xy(int(data_x+0.5), int(data_y+0.5)) except Exception as e: value = None system = settings.get('wcs_coords', None) format = settings.get('wcs_display', 'sexagesimal') ra_lbl, dec_lbl = six.unichr(945), six.unichr(948) # Calculate WCS coords, if available ts = time.time() try: if self.wcs is None: self.logger.debug("No WCS for this image") ra_txt = dec_txt = 'NO WCS' elif self.wcs.coordsys == 'raw': self.logger.debug("No coordinate system determined") ra_txt = dec_txt = 'NO WCS' elif self.wcs.coordsys == 'pixel': args = [data_x, data_y] + self.revnaxis x, y = self.wcs.pixtosystem(#(data_x, data_y), args, system=system, coords='data') ra_txt = "%+.3f" % (x) dec_txt = "%+.3f" % (y) ra_lbl, dec_lbl = "X", "Y" else: args = [data_x, data_y] + self.revnaxis lon_deg, lat_deg = self.wcs.pixtosystem(#(data_x, data_y), args, system=system, coords='data') if format == 'sexagesimal': if system in ('galactic', 'ecliptic'): sign, deg, min, sec = wcs.degToDms(lon_deg, isLatitude=False) ra_txt = '+%03d:%02d:%06.3f' % (deg, min, sec) else: deg, min, sec = wcs.degToHms(lon_deg) ra_txt = '%02d:%02d:%06.3f' % (deg, min, sec) sign, deg, min, sec = wcs.degToDms(lat_deg) if sign < 0: sign = '-' else: sign = '+' dec_txt = '%s%02d:%02d:%06.3f' % (sign, deg, min, sec) else: ra_txt = '%+10.7f' % (lon_deg) dec_txt = '%+10.7f' % (lat_deg) if system == 'galactic': ra_lbl, dec_lbl = "l", "b" elif system == 'ecliptic': ra_lbl, dec_lbl = six.unichr(0x03BB), six.unichr(0x03B2) elif system == 'helioprojective': ra_txt = "%+5.3f" % (lon_deg*3600) dec_txt = "%+5.3f" % (lat_deg*3600) ra_lbl, dec_lbl = "x-Solar", "y-Solar" except Exception as e: self.logger.warning("Bad coordinate conversion: %s" % ( str(e))) ra_txt = 'BAD WCS' dec_txt = 'BAD WCS' try: # log traceback, if possible (type_, value_, tb) = sys.exc_info() tb_str = "".join(traceback.format_tb(tb)) self.logger.error("Traceback:\n%s" % (tb_str)) except Exception: tb_str = "Traceback information unavailable." self.logger.error(tb_str) te = time.time() - ts #print "time elapsed: %.4f" % te info = Bunch.Bunch(itype='astro', data_x=data_x, data_y=data_y, x=data_x, y=data_y, ra_txt=ra_txt, dec_txt=dec_txt, ra_lbl=ra_lbl, dec_lbl=dec_lbl, value=value) return info
def info_xy(self, data_x, data_y, settings): # Note: FITS coordinates are 1-based, whereas numpy FITS arrays # are 0-based fits_x, fits_y = data_x + 1, data_y + 1 # Get the value under the data coordinates try: # We report the value across the pixel, even though the coords # change halfway across the pixel value = self.get_data_xy(int(data_x+0.5), int(data_y+0.5)) except Exception as e: value = None system = settings.get('wcs_coords', None) format = settings.get('wcs_display', 'sexagesimal') ra_lbl, dec_lbl = six.unichr(945), six.unichr(948) # Calculate WCS coords, if available ts = time.time() try: if (self.wcs == None) or (self.wcs.coordsys == 'raw'): ra_txt = dec_txt = 'NO WCS' else: args = [data_x, data_y] + self.revnaxis lon_deg, lat_deg = self.wcs.pixtosystem(#(data_x, data_y), args, system=system, coords='data') if format == 'sexagesimal': if system in ('galactic', 'ecliptic'): sign, deg, min, sec = wcs.degToDms(lon_deg, isLatitude=False) ra_txt = '+%03d:%02d:%06.3f' % (deg, min, sec) else: deg, min, sec = wcs.degToHms(lon_deg) ra_txt = '%02d:%02d:%06.3f' % (deg, min, sec) sign, deg, min, sec = wcs.degToDms(lat_deg) if sign < 0: sign = '-' else: sign = '+' dec_txt = '%s%02d:%02d:%06.3f' % (sign, deg, min, sec) else: ra_txt = '%+10.7f' % (lon_deg) dec_txt = '%+10.7f' % (lat_deg) if system == 'galactic': ra_lbl, dec_lbl = "l", "b" elif system == 'ecliptic': ra_lbl, dec_lbl = six.unichr(0x03BB), six.unichr(0x03B2) elif system == 'helioprojective': ra_txt = "%+5.3f" % (lon_deg*3600) dec_txt = "%+5.3f" % (lat_deg*3600) ra_lbl, dec_lbl = "x-Solar", "y-Solar" except Exception as e: self.logger.warn("Bad coordinate conversion: %s" % ( str(e))) ra_txt = 'BAD WCS' dec_txt = 'BAD WCS' te = time.time() - ts #print "time elapsed: %.4f" % te info = Bunch.Bunch(itype='astro', data_x=data_x, data_y=data_y, fits_x=fits_x, fits_y=fits_y, x=fits_x, y=fits_y, ra_txt=ra_txt, dec_txt=dec_txt, ra_lbl=ra_lbl, dec_lbl=dec_lbl, value=value) return info
def info_xy(self, data_x, data_y, settings): # Note: FITS coordinates are 1-based, whereas numpy FITS arrays # are 0-based fits_x, fits_y = data_x + 1, data_y + 1 # Get the value under the data coordinates try: # We report the value across the pixel, even though the coords # change halfway across the pixel value = self.get_data_xy(int(data_x+0.5), int(data_y+0.5)) except Exception as e: value = None system = settings.get('wcs_coords', None) format = settings.get('wcs_display', 'sexagesimal') ra_lbl, dec_lbl = six.unichr(945), six.unichr(948) # Calculate WCS coords, if available ts = time.time() try: if self.wcs == None: self.logger.debug("No WCS for this image") ra_txt = dec_txt = 'NO WCS' elif self.wcs.coordsys == 'raw': self.logger.debug("No coordinate system determined") ra_txt = dec_txt = 'NO WCS' else: args = [data_x, data_y] + self.revnaxis lon_deg, lat_deg = self.wcs.pixtosystem(#(data_x, data_y), args, system=system, coords='data') if format == 'sexagesimal': if system in ('galactic', 'ecliptic'): sign, deg, min, sec = wcs.degToDms(lon_deg, isLatitude=False) ra_txt = '+%03d:%02d:%06.3f' % (deg, min, sec) else: deg, min, sec = wcs.degToHms(lon_deg) ra_txt = '%02d:%02d:%06.3f' % (deg, min, sec) sign, deg, min, sec = wcs.degToDms(lat_deg) if sign < 0: sign = '-' else: sign = '+' dec_txt = '%s%02d:%02d:%06.3f' % (sign, deg, min, sec) else: ra_txt = '%+10.7f' % (lon_deg) dec_txt = '%+10.7f' % (lat_deg) if system == 'galactic': ra_lbl, dec_lbl = "l", "b" elif system == 'ecliptic': ra_lbl, dec_lbl = six.unichr(0x03BB), six.unichr(0x03B2) elif system == 'helioprojective': ra_txt = "%+5.3f" % (lon_deg*3600) dec_txt = "%+5.3f" % (lat_deg*3600) ra_lbl, dec_lbl = "x-Solar", "y-Solar" except Exception as e: self.logger.warn("Bad coordinate conversion: %s" % ( str(e))) ra_txt = 'BAD WCS' dec_txt = 'BAD WCS' te = time.time() - ts #print "time elapsed: %.4f" % te info = Bunch.Bunch(itype='astro', data_x=data_x, data_y=data_y, fits_x=fits_x, fits_y=fits_y, x=fits_x, y=fits_y, ra_txt=ra_txt, dec_txt=dec_txt, ra_lbl=ra_lbl, dec_lbl=dec_lbl, value=value) return info