def get_SDSS_simple(ra, dec, rad=1/60., dir='./', name='', silent=False): ''' >> data = get_SDSS_simple(ra, dec, rad=1, dir='./' name='mydata') call the DR12 skyserver with single [ra, dec] and download cvs file input: ra, dec (deg) optional input: radius=1/60. (deg). dir='./' directory for fits file name name for file, if not give we use IAU name of input coords silent=False shut it. note, make 1e5 lines are returned, only basic imaging data (magnitudes) ''' url = SDSSurl_radec.replace('__RA__',str(float(ra))).replace('__DEC__', str(float(dec))).replace('__RAD__',str(rad*60)) #cas = SDSS_cas..replace('__RA__',str(ra)).replace('__DEC__', str(dec)).replace('__RAD__',str(rad)) if not(name): name = 'SDSS-'+iau_name(ra, dec)+'.csv' com = '''curl '''+url+''' > ''' +dir+name if not silent: print com os.system(com) # the (stupid?) format with two tables f = open(dir+name,'r') lines = '' for l in f.readlines(): #print l if l.count('#Table2')==1: break lines+=l lines= lines.split('\n') print lines[1] print lines[2:] data = readascii(lines=lines[2:], delimiter=',', names=lines[1].split(',')) return data
def get_SDSS(ra0, dec0, rad=1/60., name='', silent=False, debug=False): ''' >> data = get_SDSS(ra, dec, rad=1, dir='./' name='mydata') submit CAS job via sqlcl input: ra, dec (deg), can be arrays optional input: radius=1/60. (deg) name if given, we write file name silent=False shut it. note: slow for many object because we loop over input coords; this could be log(N) faster if I knew how to upload coordinates and run fgetNearByObjEq on this list. ''' if np.isscalar(ra0): ra0 = [ra0] dec0 = [dec0] out_list = [] for ra, dec in zip(ra0, dec0): cas = SDSS_cas.replace('__RA__',str(ra)).replace('__DEC__', str(dec)).replace('__RAD__',str(rad*60)) if not(silent): print 'running CASjob:\n',cas result = sqlcl.query(cas) if not(silent): print 'CAS job done, now reading query...' #print result.readlines() lines = result.readlines() if debug: print ra, dec, lines if len(lines)<=2: print 'no sources found, for ra,dec:', ra, dec else: data = readascii(lines=lines[2:], names=lines[1].split(','), delimiter=',') out_list.append(data) if len(out_list)==0: return None # no data, with one input if len(out_list)==1: out = out_list[0] if len(out_list)>1: data_arr = np.repeat(out_list[0],1) for dd in out_list[1:]: data_arr = rec.merge_rec(data_arr, np.repeat(dd,1)) #data_arr = np.concatenate(data_arr, dd) out= data_arr if name: if not(silent): print '# of entries:', len(out) print 'writing to ', name pyfits.writeto(name, out, clobber=True) return out