def get_anns(cal, nbright=0): wcsfn = cal.get_wcs_file() from astrometry.util.util import anwcs wcs = anwcs(wcsfn,0) catdir = settings.CAT_DIR uzcfn = os.path.join(catdir, 'uzc2000.fits') abellfn = os.path.join(catdir, 'abell-all.fits') ngcfn = os.path.join(catdir, 'ngc2000.fits') ngcnamesfn = os.path.join(catdir, 'ngc2000name.fits') icfn = os.path.join(catdir, 'ic2000.fits') brightfn = os.path.join(catdir, 'brightstars.fits') hdfn = settings.HENRY_DRAPER_CAT tycho2fn = settings.TYCHO2_KD import astrometry.blind.plotann as plotann opt = plotann.get_empty_opts() if nbright: opt.nbright = nbright rad = cal.get_radius() # These are the same limits used in views/image.py for annotations if rad < 1.: opt.abellcat = abellfn opt.hdcat = hdfn if rad < 0.25: opt.t2cat = tycho2fn if rad < 10: opt.ngc = True opt.ngccat = ngcfn opt.ngcname = ngcnamesfn opt.iccat = icfn opt.brightcat = brightfn jobjs = plotann.get_annotations_for_wcs(wcs, opt) return jobjs
def skyplot(): plot = Plotstuff(size=(800, 800), rdw=(103.1, 37.45, 0.8), outformat='png') plot.color = 'verydarkblue' plot.plot('fill') for ext in range(1, 17): fn = 'mos3.68488.fits' hdr = fitsio.read_header(fn, ext=ext) wcs = wcs_pv2sip_hdr(hdr) plot.color = 'red' plot.outline.wcs = anwcs_new_sip(wcs) plot.plot('outline') plot.color = 'white' plot.apply_settings() rc, dc = wcs.radec_center() plot.text_radec(rc, dc, hdr['EXTNAME']) plot.color = 'white' for ext in range(1, 17): fn = 'an2/mos3.68488.ext%02i.wcs' % ext plot.outline.wcs = anwcs(fn) plot.plot('outline') plot.rgb = (0.2, 0.2, 0.2) plot.plot_grid(0.1, 0.1) plot.color = 'gray' plot.plot_grid(0.5, 0.5, 0.5, 0.5) plot.write('plot.png')
def __init__(self, filename, hdu=0, wcs=None): self.x0 = 0. self.y0 = 0. if wcs is not None: self.wcs = wcs else: from astrometry.util.util import anwcs wcs = anwcs(filename, hdu) self.wcs = wcs
import logging logformat = '%(message)s' from astrometry.util.util import log_init #, LOG_VERB, LOG_MSG loglvl = 2 if opt.verbose: logging.basicConfig(level=logging.DEBUG, format=logformat) loglvl += 1 else: logging.basicConfig(level=logging.INFO, format=logformat) log_init(loglvl) wcsfn = args[0] if dojson: from astrometry.util.util import anwcs wcs = anwcs(wcsfn,0) jobjs = get_annotations_for_wcs(wcs, opt) import json j = json.dumps(jobjs) print(j) sys.exit(0) fmt = PLOTSTUFF_FORMAT_JPG s = outfn.split('.') if len(s): s = s[-1].lower() if s in Plotstuff.format_map: fmt = s plot = Plotstuff(outformat=fmt, wcsfn=wcsfn) #plot.wcs_file = wcsfn #plot.outformat = fmt
from astrometry.util.util import log_init # , LOG_VERB, LOG_MSG loglvl = 2 if opt.verbose: logging.basicConfig(level=logging.DEBUG, format=logformat) loglvl += 1 else: logging.basicConfig(level=logging.INFO, format=logformat) log_init(loglvl) wcsfn = args[0] if dojson: from astrometry.util.util import anwcs wcs = anwcs(wcsfn, 0) jobjs = get_annotations_for_wcs(wcs, opt) import simplejson json = simplejson.dumps(jobjs) print json sys.exit(0) fmt = PLOTSTUFF_FORMAT_JPG s = outfn.split(".") if len(s): s = s[-1].lower() if s in Plotstuff.format_map: fmt = s plot = Plotstuff(outformat=fmt, wcsfn=wcsfn) # plot.wcs_file = wcsfn
def __init__(self, filename, hdu=0): self.x0 = 0. self.y0 = 0. from astrometry.util.util import anwcs wcs = anwcs(filename, hdu) self.wcs = wcs
def plot_unmatched(): from bigboss_test import radecroi ''' select run, rerun, camcol, field, nChild, probPSF, psfFlux_u, psfFlux_g, psfFlux_r, psfFlux_i, psfFlux_z, deVRad_u, deVRad_g, deVRad_r, deVRad_i, deVRad_z, deVAB_u, deVAB_g, deVAB_r, deVAB_i, deVAB_z, deVPhi_u, deVPhi_g, deVPhi_r, deVPhi_i, deVPhi_z, deVFlux_u, deVFlux_g, deVFlux_r, deVFlux_i, deVFlux_z, expRad_u, expRad_g, expRad_r, expRad_i, expRad_z, expAB_u, expAB_g, expAB_r, expAB_i, expAB_z, expPhi_u, expPhi_g, expPhi_r, expPhi_i, expPhi_z, expFlux_u, expFlux_g, expFlux_r, expFlux_i, expFlux_z, fracDeV_u, fracDeV_g, fracDeV_r, fracDeV_i, fracDeV_z, flags_u, flags_g, flags_r, flags_i, flags_z, probPSF_u, probPSF_g, probPSF_r, probPSF_i, probPSF_z, ra, dec from PhotoPrimary where ra between 333.5 and 335.5 and dec between -0.5 and 1.5 ''' ''' -> 124k rows. (sdss-cas-testarea.fits) Distinct runs: 2585, 2728, 7712, 4203, 2583, 4192, 4207, 4184, 2662, 7717 Run #sources 2583 663 2585 675 2662 4 2728 156 4184 762 4192 36135 4203 5 4207 44078 7712 12047 7717 29911 ''' ''' select run, rerun, camcol, field, nChild, probPSF, psfFlux_u, psfFlux_g, psfFlux_r, psfFlux_i, psfFlux_z, deVRad_u, deVRad_g, deVRad_r, deVRad_i, deVRad_z, deVAB_u, deVAB_g, deVAB_r, deVAB_i, deVAB_z, deVPhi_u, deVPhi_g, deVPhi_r, deVPhi_i, deVPhi_z, deVFlux_u, deVFlux_g, deVFlux_r, deVFlux_i, deVFlux_z, expRad_u, expRad_g, expRad_r, expRad_i, expRad_z, expAB_u, expAB_g, expAB_r, expAB_i, expAB_z, expPhi_u, expPhi_g, expPhi_r, expPhi_i, expPhi_z, expFlux_u, expFlux_g, expFlux_r, expFlux_i, expFlux_z, fracDeV_u, fracDeV_g, fracDeV_r, fracDeV_i, fracDeV_z, flags_u, flags_g, flags_r, flags_i, flags_z, probPSF_u, probPSF_g, probPSF_r, probPSF_i, probPSF_z, ra, dec, resolveStatus, score into mydb.wisetest from PhotoObjAll where ra between 333.5 and 335.5 and dec between -0.5 and 1.5 and (resolveStatus & ( dbo.fResolveStatus('SURVEY_PRIMARY') | dbo.fResolveStatus('SURVEY_BADFIELD') | dbo.fResolveStatus('SURVEY_EDGE'))) != 0 --> sdss-cas-testarea-2.fits select run, rerun, camcol, field, nChild, probPSF, psfFlux_u, psfFlux_g, psfFlux_r, psfFlux_i, psfFlux_z, deVRad_u, deVRad_g, deVRad_r, deVRad_i, deVRad_z, deVAB_u, deVAB_g, deVAB_r, deVAB_i, deVAB_z, deVPhi_u, deVPhi_g, deVPhi_r, deVPhi_i, deVPhi_z, deVFlux_u, deVFlux_g, deVFlux_r, deVFlux_i, deVFlux_z, expRad_u, expRad_g, expRad_r, expRad_i, expRad_z, expAB_u, expAB_g, expAB_r, expAB_i, expAB_z, expPhi_u, expPhi_g, expPhi_r, expPhi_i, expPhi_z, expFlux_u, expFlux_g, expFlux_r, expFlux_i, expFlux_z, fracDeV_u, fracDeV_g, fracDeV_r, fracDeV_i, fracDeV_z, flags_u, flags_g, flags_r, flags_i, flags_z, probPSF_u, probPSF_g, probPSF_r, probPSF_i, probPSF_z, ra, dec, resolveStatus, score into mydb.wisetest from PhotoObjAll where ra between 333.5 and 335.5 and dec between -0.5 and 1.5 and (resolveStatus & ( dbo.fResolveStatus('SURVEY_PRIMARY') | dbo.fResolveStatus('SURVEY_BADFIELD') | dbo.fResolveStatus('SURVEY_EDGE') | dbo.fResolveStatus('SURVEY_BEST') )) != 0 --> sdss-cas-testarea-3.fits ''' ''' Check it out: spatial source density looks fine. No overlap between runs. ''' rng = ((333.5, 335.5), (-0.5, 1.5)) from astrometry.util.plotutils import PlotSequence ps = PlotSequence('sdss') if False: r, d = np.mean(rng[0]), np.mean(rng[1]) RCF = radec_to_sdss_rcf(r, d, radius=2. * 60., tablefn='window_flist-DR9.fits') print('Found', len(RCF), 'fields in range') for run, c, f, ra, dec in RCF: print(' ', run, c, f, 'at', ra, dec) from astrometry.blind.plotstuff import PlotSequence plot = Plotstuff(rdw=(r, d, 10), size=(1000, 1000), outformat='png') plot.color = 'white' plot.alpha = 0.5 plot.apply_settings() T = fits_table('window_flist-DR9.fits') I, J, d = match_radec(T.ra, T.dec, r, d, 10) T.cut(I) print('Plotting', len(T)) for i, (m0, m1, n0, n1, node, incl) in enumerate(zip(T.mu_start, T.mu_end, T.nu_start, T.nu_end, T.node, T.incl)): #rr,dd = [],[] for j, (m, n) in enumerate([(m0, n0), (m0, n1), (m1, n1), (m1, n0), (m0, n0)]): ri, di = munu_to_radec_deg(m, n, node, incl) # rr.append(ri) # dd.append(di) if j == 0: plot.move_to_radec(ri, di) else: plot.line_to_radec(ri, di) plot.stroke() plot.plot_grid(2, 2, 5, 5) plot.write('fields.png') # CAS PhotoObjAll.resolveStatus bits sprim = 0x100 sbad = 0x800 sedge = 0x1000 sbest = 0x200 if False: T = fits_table('sdss-cas-testarea.fits') plt.clf() plothist(T.ra, T.dec, 200, range=rng) plt.title('PhotoPrimary') ps.savefig() T = fits_table('sdss-cas-testarea-2.fits') plt.clf() plothist(T.ra, T.dec, 200, range=rng) plt.title('PhotoObjAll: SURVEY_PRIMARY | SURVEY_BADFIELD | SURVEY_EDGE') ps.savefig() T = fits_table('sdss-cas-testarea-3.fits') plt.clf() plothist(T.ra, T.dec, 200, range=rng) plt.title( 'PhotoObjAll: SURVEY_PRIMARY | SURVEY_BADFIELD | SURVEY_EDGE | SURVEY_BEST') ps.savefig() for j, (flags, txt) in enumerate([(sprim, 'PRIM'), (sbad, 'BAD'), (sedge, 'EDGE'), (sbest, 'BEST')]): I = np.flatnonzero( (T.resolvestatus & (sprim | sbad | sedge | sbest)) == flags) print(len(I), 'with', txt) if len(I) == 0: continue plt.clf() plothist(T.ra[I], T.dec[I], 200, range=rng) plt.title('%i with %s' % (len(I), txt)) ps.savefig() for j, (flags, txt) in enumerate([(sprim | sbad, 'PRIM + BAD'), (sprim | sedge, 'PRIM + EDGE'), (sprim | sbest, 'PRIM + BEST')]): I = np.flatnonzero((T.resolvestatus & flags) > 0) print(len(I), 'with', txt) if len(I) == 0: continue plt.clf() plothist(T.ra[I], T.dec[I], 200, range=rng) plt.title('%i with %s' % (len(I), txt)) ps.savefig() # for run in np.unique(T.run): # I = (T.run == run) # plt.clf() # plothist(T.ra[I], T.dec[I], 200, range=rng) # plt.title('Run %i' % run) # ps.savefig() R = 1. / 3600. I, J, d = match_radec(T.ra, T.dec, T.ra, T.dec, R, notself=True) print(len(I), 'matches') plt.clf() loghist((T.ra[I] - T.ra[J]) * 3600., (T.dec[I] - T.dec[J]) * 3600., 200, range=((-1, 1), (-1, 1))) ps.savefig() ps = PlotSequence('forced') basedir = os.environ.get('BIGBOSS_DATA', '/project/projectdirs/bigboss') wisedatadir = os.path.join(basedir, 'data', 'wise') wisecat = fits_table(os.path.join( wisedatadir, 'catalogs', 'wisecat2.fits')) # plt.clf() #plothist(wisecat.ra, wisecat.dec, 200, range=rng) # plt.savefig('wisecat.png') (ra0, ra1, dec0, dec1) = radecroi ra = (ra0 + ra1) / 2. dec = (dec0 + dec1) / 2. #cas = fits_table('sdss-cas-testarea.fits') #cas = fits_table('sdss-cas-testarea-2.fits') cas = fits_table('sdss-cas-testarea-3.fits') print('Read', len(cas), 'CAS sources') cas.cut((cas.resolvestatus & sedge) == 0) print('Cut to ', len(cas), 'without SURVEY_EDGE set') # Check out WISE / SDSS matches. wise = wisecat sdss = cas print(len(sdss), 'SDSS sources') print(len(wise), 'WISE sources') R = 10. I, J, d = match_radec(wise.ra, wise.dec, sdss.ra, sdss.dec, R / 3600., nearest=True) print(len(I), 'matches') print('max dist:', d.max()) plt.clf() plt.hist(d * 3600., 100, range=(0, R), log=True) plt.xlabel('Match distance (arcsec)') plt.ylabel('Number of matches') plt.title('SDSS-WISE astrometric matches') ps.savefig() plt.clf() loghist((wise.ra[I] - sdss.ra[J]) * 3600., (wise.dec[I] - sdss.dec[J]) * 3600., 200, range=((-R, R), (-R, R))) plt.title('SDSS-WISE astrometric matches') plt.xlabel('dRA (arcsec)') plt.ylabel('dDec (arcsec)') ps.savefig() R = 4. I, J, d = match_radec(wise.ra, wise.dec, sdss.ra, sdss.dec, R / 3600., nearest=True) print(len(I), 'matches') unmatched = np.ones(len(wise), bool) unmatched[I] = False wun = wise[unmatched] plt.clf() plothist(sdss.ra, sdss.dec, 200, range=rng) plt.title('SDSS source density') ps.savefig() plt.clf() plothist(wise.ra, wise.dec, 200, range=rng) plt.title('WISE source density') ps.savefig() plt.clf() #plt.plot(wun.ra, wun.dec, 'r.') #plt.axis(rng[0] + rng[1]) plothist(wun.ra, wun.dec, 200, range=rng) plt.title('Unmatched WISE sources') ps.savefig() for band in 'ugriz': sdss.set('psfmag_' + band, NanoMaggies.nanomaggiesToMag(sdss.get('psfflux_' + band))) # plt.clf() # loghist(wise.w1mpro[I], sdss.psfmag_r[J], 200) # plt.xlabel('WISE w1mpro') # plt.ylabel('SDSS psfflux_r') # ps.savefig() for band in 'riz': ax = [0, 10, 25, 5] plt.clf() mag = sdss.get('psfmag_' + band)[J] loghist(mag - wise.w1mpro[I], mag, 200, range=((ax[0], ax[1]), (ax[3], ax[2]))) plt.xlabel('SDSS %s - WISE w1' % band) plt.ylabel('SDSS ' + band) plt.axis(ax) ps.savefig() for w, t in [(wise[I], 'Matched'), (wun, 'Unmatched')]: plt.clf() w1 = w.get('w1mpro') w2 = w.get('w2mpro') ax = [-1, 3, 18, 6] loghist(w1 - w2, w1, 200, range=((ax[0], ax[1]), (ax[3], ax[2]))) plt.xlabel('W1 - W2') plt.ylabel('W1') plt.title('WISE CMD for %s sources' % t) plt.axis(ax) ps.savefig() sdssobj = DR9() band = 'r' RCF = np.unique(zip(sdss.run, sdss.camcol, sdss.field)) wcses = [] fns = [] pfn = 'wcses.pickle' if os.path.exists(pfn): print('Reading', pfn) wcses, fns = unpickle_from_file(pfn) else: for r, c, f in RCF: fn = sdssobj.retrieve('frame', r, c, f, band) print('got', fn) fns.append(fn) wcs = Tan(fn, 0) print('got wcs', wcs) wcses.append(wcs) pickle_to_file((wcses, fns), pfn) print('Wrote to', pfn) wisefns = glob(os.path.join(wisedatadir, 'level3', '*w1-int-3.fits')) wisewcs = [] for fn in wisefns: print('Reading', fn) wcs = anwcs(fn, 0) print('Got', wcs) wisewcs.append(wcs) I = np.argsort(wun.w1mpro) wun.cut(I) for i in range(len(wun)): ra, dec = wun.ra[i], wun.dec[i] insdss = -1 for j, wcs in enumerate(wcses): if wcs.is_inside(ra, dec): insdss = j break inwise = -1 for j, wcs in enumerate(wisewcs): if wcs.is_inside(ra, dec): inwise = j break N = 0 if insdss != -1: N += 1 if inwise != -1: N += 1 if N == 0: continue if N != 2: continue plt.clf() ss = 1 plt.subplot(2, N, ss) ss += 1 M = 0.02 I = np.flatnonzero((sdss.ra > (ra - M)) * (sdss.ra < (ra + M)) * (sdss.dec > (dec - M)) * (sdss.dec < (dec + M))) sdssnear = sdss[I] plt.plot(sdss.ra[I], sdss.dec[I], 'b.', alpha=0.7) I = np.flatnonzero((wise.ra > (ra - M)) * (wise.ra < (ra + M)) * (wise.dec > (dec - M)) * (wise.dec < (dec + M))) wisenear = wise[I] plt.plot(wise.ra[I], wise.dec[I], 'rx', alpha=0.7) if insdss: wcs = wcses[j] w, h = wcs.imagew, wcs.imageh rd = np.array([wcs.pixelxy2radec(x, y) for x, y in [(1, 1), (w, 1), (w, h), (1, h), (1, 1)]]) plt.plot(rd[:, 0], rd[:, 1], 'b-', alpha=0.5) if inwise: wcs = wisewcs[j] w, h = wcs.imagew, wcs.imageh rd = np.array([wcs.pixelxy2radec(x, y) for x, y in [(1, 1), (w, 1), (w, h), (1, h), (1, 1)]]) plt.plot(rd[:, 0], rd[:, 1], 'r-', alpha=0.5) plt.plot([ra], [dec], 'o', mec='k', mfc='none', mew=3, ms=20, alpha=0.5) #plt.axis([ra+M, ra-M, dec-M, dec+M]) plt.axis([ra - M, ra + M, dec - M, dec + M]) plt.xticks([ra], ['RA = %0.3f' % ra]) plt.yticks([dec], ['Dec = %0.3f' % dec]) SW = 20 ss = N + 1 plt.subplot(2, N, ss) if insdss != -1: ss += 1 j = insdss wcs = wcses[j] xc, yc = wcs.radec2pixelxy(ra, dec) r, c, f = RCF[j] frame = sdssobj.readFrame(r, c, f, band) #S = 50 S = SW * 3.472 im = frame.image H, W = im.shape y0, x0 = max(0, yc - S), max(0, xc - S) y1, x1 = min(H, yc + S), min(W, xc + S) subim = im[y0:y1, x0:x1] # plt.imshow(subim, interpolation='nearest', origin='lower', # vmax=0.3, extent=[x0,x1,y0,y1]) plt.imshow(subim.T, interpolation='nearest', origin='lower', vmax=0.3, extent=[y0, y1, x0, x1]) # vmax=subim.max()*1.01) ax = plt.axis() sx, sy = wcs.radec2pixelxy(sdssnear.ra, sdssnear.dec) #plt.plot(x, y, 'o', mec='b', mfc='none', ms=15) plt.plot(sy, sx, 'o', mec='b', mfc='none', ms=15) x, y = wcs.radec2pixelxy(wisenear.ra, wisenear.dec) #plt.plot(x, y, 'rx', ms=10) plt.plot(y, x, 'rx', ms=10) # Which way up? x, y = wcs.radec2pixelxy(np.array([ra, ra]), np.array( [0.5, 2.0]) * S * 0.396 / 3600. + dec) #plt.plot(x, y, 'b-', alpha=0.5, lw=2) plt.plot(y, x, 'b-', alpha=0.5, lw=2) plt.axis(ax) plt.gray() plt.title('SDSS %s (%i/%i/%i)' % (band, r, c, f)) # Try to guess the PRIMARY run from the nearest object. for I in np.argsort((sx - xc)**2 + (sy - yc)**2): r, c, f = sdssnear.run[I], sdssnear.camcol[I], sdssnear.field[I] jj = None for j, (ri, ci, fi) in enumerate(RCF): if ri == r and ci == c and fi == f: jj = j break assert(jj is not None) wcs = wcses[jj] xc, yc = wcs.radec2pixelxy(ra, dec) frame = sdssobj.readFrame(r, c, f, band) S = SW * 3.472 im = frame.image H, W = im.shape y0, x0 = max(0, yc - S), max(0, xc - S) y1, x1 = min(H, yc + S), min(W, xc + S) subim = im[y0:y1, x0:x1] if np.prod(subim.shape) == 0: continue print('subim shape', subim.shape) plt.subplot(2, N, 2) plt.imshow(subim.T, interpolation='nearest', origin='lower', vmax=0.3, extent=[y0, y1, x0, x1]) plt.gray() plt.title('SDSS %s (%i/%i/%i)' % (band, r, c, f)) break if inwise != -1: plt.subplot(2, N, ss) ss += 1 j = inwise wcs = wisewcs[j] ok, x, y = wcs.radec2pixelxy(ra, dec) im = pyfits.open(wisefns[j])[0].data S = SW H, W = im.shape y0, x0 = max(0, y - S), max(0, x - S) subim = im[y0: min(H, y + S), x0: min(W, x + S)] plt.imshow(subim, interpolation='nearest', origin='lower', vmax=subim.max() * 1.01) ax = plt.axis() x, y = [], [] for r, d in zip(wisenear.ra, wisenear.dec): ok, xi, yi = wcs.radec2pixelxy(r, d) x.append(xi) y.append(yi) x = np.array(x) y = np.array(y) plt.plot(x - x0, y - y0, 'rx', ms=15) x, y = [], [] for r, d in zip(sdssnear.ra, sdssnear.dec): ok, xi, yi = wcs.radec2pixelxy(r, d) x.append(xi) y.append(yi) x = np.array(x) y = np.array(y) plt.plot(x - x0, y - y0, 'o', mec='b', mfc='none', ms=10) # Which way up? pixscale = 1.375 / 3600. ok, x1, y1 = wcs.radec2pixelxy(ra, dec + 0.5 * S * pixscale) ok, x2, y2 = wcs.radec2pixelxy(ra, dec + 2.0 * S * pixscale) plt.plot([x1 - x0, x2 - x0], [y1 - y0, y2 - y0], 'r-', alpha=0.5, lw=2) plt.axis([ax[1], ax[0], ax[2], ax[3]]) # plt.axis(ax) plt.gray() plt.title('WISE W1 (coadd)') plt.suptitle('WISE unmatched source: w1=%.1f, RA,Dec = (%.3f, %.3f)' % (wun.w1mpro[i], ra, dec)) ps.savefig() rcfs = zip(sdssnear.run, sdssnear.camcol, sdssnear.field) print('Nearby SDSS sources are from:', np.unique(rcfs)) return