def search(self, dstpath, **params): """For compatibility with generic image catalog search. TODO: dstpath provides the pathname for storing the image """ self.logger.debug("search params=%s" % (str(params))) ra, dec = params['ra'], params['dec'] if not (':' in ra): # Assume RA and DEC are in degrees ra_deg = float(ra) dec_deg = float(dec) else: # Assume RA and DEC are in standard string notation ra_deg = wcs.hmsStrToDeg(ra) dec_deg = wcs.dmsStrToDeg(dec) # Convert to degrees for search wd_deg = float(params['width']) / 60.0 ht_deg = float(params['height']) / 60.0 ## wd_deg = float(params['width']) ## ht_deg = float(params['height']) # initialize our query object with the service's base URL query = pyvo.sia.SIAQuery(self.url) query.ra = ra_deg query.dec = dec_deg query.size = (wd_deg, ht_deg) query.format = 'image/fits' self.logger.info("Will query: %s" % query.getqueryurl(True)) results = query.execute() if len(results) > 0: self.logger.info("Found %d images" % len(results)) else: self.logger.warn("Found no images in this area" % len(results)) return None # For now, we pick the first one found # REQUIRES FIX IN PYVO: # imfile = results[0].cachedataset(dir="/tmp") # # Workaround: fitspath = results[0].make_dataset_filename(dir="/tmp") results[0].cachedataset(fitspath) # explicit return return fitspath
def search(self, **params): self.logger.debug("search params=%s" % (str(params))) url = self.base_url % params data = self.fetch(url, filepath=None) data = data.decode("utf8") lines = data.split('\n') offset = 0 while offset < len(lines): line = lines[offset].strip() print line offset += 1 if line.startswith('-'): break self.logger.debug("offset=%d" % (offset)) results = [] table = [lines[offset-2]] for line in lines[offset:]: line = line.strip() #print ">>>", line if (len(line) == 0) or line.startswith('#'): continue elts = line.split() if (len(elts) < 3): continue table.append(line) try: name = elts[self.index['name']] ra = elts[self.index['ra']] dec = elts[self.index['dec']] mag = float(elts[self.index['mag']]) #print name if (self.format == 'deg') or not (':' in ra): # Assume RA and DEC are in degrees ra_deg = float(ra) dec_deg = float(dec) else: # Assume RA and DEC are in standard string notation ra_deg = wcs.hmsStrToDeg(ra) dec_deg = wcs.dmsStrToDeg(dec) # convert ra/dec via EQUINOX change if catalog EQUINOX is # not the same as our default one (2000) if cmp(self.equinox, 2000.0) != 0: ra_deg, dec_deg = wcs.eqToEq2000(ra_deg, dec_deg, self.equinox) ra_txt = wcs.raDegToString(ra_deg, format='%02d:%02d:%06.3f') dec_txt = wcs.decDegToString(dec_deg, format='%s%02d:%02d:%05.2f') self.logger.debug("STAR %s AT ra=%s dec=%s mag=%f" % ( name, ra_txt, dec_txt, mag)) results.append(Star(name=name, ra_deg=ra_deg, dec_deg=dec_deg, ra=ra_txt, dec=dec_txt, mag=mag, flag=0, description='')) except Exception, e: print str(e) self.logger.error("Error parsing catalog query results: %s" % ( str(e)))
def search(self, **params): self.logger.debug("search params=%s" % (str(params))) url = self.base_url % params data = self.fetch(url, filepath=None) lines = data.split('\n') offset = 0 while offset < len(lines): line = lines[offset].strip() print line offset += 1 if line.startswith('-'): break print "offset=%d" % (offset) print "iterating data" results = [] table = [lines[offset - 2]] for line in lines[offset:]: line = line.strip() #print ">>>", line if (len(line) == 0) or line.startswith('#'): continue elts = line.split() if (len(elts) < 3): continue table.append(line) try: name = elts[self.index['name']] ra = elts[self.index['ra']] dec = elts[self.index['dec']] mag = float(elts[self.index['mag']]) #print name if (self.format == 'deg') or not (':' in ra): # Assume RA and DEC are in degrees ra_deg = float(ra) dec_deg = float(dec) else: # Assume RA and DEC are in standard string notation ra_deg = wcs.hmsStrToDeg(ra) dec_deg = wcs.dmsStrToDeg(dec) # convert ra/dec via EQUINOX change if catalog EQUINOX is # not the same as our default one (2000) if cmp(self.equinox, 2000.0) != 0: ra_deg, dec_deg = wcs.eqToEq2000(ra_deg, dec_deg, self.equinox) ra_txt = wcs.raDegToString(ra_deg, format='%02d:%02d:%06.3f') dec_txt = wcs.decDegToString(dec_deg, format='%s%02d:%02d:%05.2f') print "STAR %s AT ra=%s dec=%s mag=%f" % (name, ra_txt, dec_txt, mag) results.append( Star(name=name, ra_deg=ra_deg, dec_deg=dec_deg, ra=ra_txt, dec=dec_txt, mag=mag, flag=0, description='')) except Exception, e: print str(e) self.logger.error("Error parsing catalog query results: %s" % (str(e)))
def search(self, **params): """For compatibility with generic star catalog search. """ self.logger.debug("search params=%s" % (str(params))) ra, dec = params['ra'], params['dec'] if not (':' in ra): # Assume RA and DEC are in degrees ra_deg = float(ra) dec_deg = float(dec) else: # Assume RA and DEC are in standard string notation ra_deg = wcs.hmsStrToDeg(ra) dec_deg = wcs.dmsStrToDeg(dec) # Convert to degrees for search radius radius_deg = float(params['r']) / 60.0 #radius_deg = float(params['r']) # initialize our query object with the service's base URL query = pyvo.scs.SCSQuery(self.url) query.ra = ra_deg query.dec = dec_deg query.radius = radius_deg self.logger.info("Will query: %s" % query.getqueryurl(True)) results = query.execute() # Scan the returned fields for ones that have a UCD containing 'phot' mags = [] fields = results.fielddesc() for field in fields: ucd = str(field.ucd).lower() if ('phot_' in ucd) or ('phot.' in ucd): mags.append(field.name) self.logger.debug("possible magnitude fields: %s" % str(mags)) if len(mags) > 0: magfield = mags[0] else: magfield = None self.logger.info("Found %d sources" % len(results)) starlist = [] for source in results: starlist.append(self.toStar(source, magfield)) # metadata about the list columns = [('Name', 'name'), ('RA', 'ra'), ('DEC', 'dec'), ('Mag', 'mag'), ('Preference', 'preference'), ('Priority', 'priority'), ('Description', 'description'), ] # Append extra columns returned by search to table header # TODO: what if not all sources have same record structure? # is this possible with VO? cols = list(source.keys()) cols.remove('RA') cols.remove('DEC') cols.remove('id') columns.extend(zip(cols, cols)) # which column is the likely one to color source circles colorCode = 'Mag' info = Bunch.Bunch(columns=columns, color=colorCode) return starlist, info