def sdss_coadd(targetwcs, bands): from astrometry.sdss import DR9, band_index from astrometry.sdss import AsTransWrapper #sdss = DR9(basedir=photoobjdir) #sdss.useLocalTree() sdss = DR9(basedir='tmp') sdss.saveUnzippedFiles('tmp') #wfn = sdss.filenames.get('window_flist', None) wfn = os.path.join(os.environ.get('PHOTO_RESOLVE', ''), 'window_flist.fits') from astrometry.sdss.fields import radec_to_sdss_rcf ra, dec = targetwcs.radec_center() rad = targetwcs.radius() rad = rad + np.hypot(10., 14.) / 2. / 60. print('Searching for run,camcol,fields with radius', rad, 'deg') RCF = radec_to_sdss_rcf(ra, dec, radius=rad * 60., tablefn=wfn) print('Found %i fields possibly in range' % len(RCF)) H, W = targetwcs.shape sdsscoimgs = [np.zeros((H, W), np.float32) for band in bands] sdsscons = [np.zeros((H, W), np.float32) for band in bands] for run, camcol, field, r, d in RCF: for iband, band in enumerate(bands): bandnum = band_index(band) sdss.retrieve('frame', run, camcol, field, band) frame = sdss.readFrame(run, camcol, field, bandnum) print('Got frame', frame) h, w = frame.getImageShape() simg = frame.getImage() wcs = AsTransWrapper(frame.astrans, w, h, 0.5, 0.5) try: Yo, Xo, Yi, Xi, nil = resample_with_wcs(targetwcs, wcs) except OverlapError: continue sdsscoimgs[iband][Yo, Xo] += simg[Yi, Xi] sdsscons[iband][Yo, Xo] += 1 for co, n in zip(sdsscoimgs, sdsscons): co /= np.maximum(1e-6, n) return sdsscoimgs, sdsscons
def sdss_coadd(targetwcs, bands): from astrometry.sdss import DR9, band_index from astrometry.sdss import AsTransWrapper #sdss = DR9(basedir=photoobjdir) #sdss.useLocalTree() sdss = DR9(basedir='tmp') sdss.saveUnzippedFiles('tmp') #wfn = sdss.filenames.get('window_flist', None) wfn = os.path.join(os.environ.get('PHOTO_RESOLVE',''), 'window_flist.fits') from astrometry.sdss.fields import radec_to_sdss_rcf ra,dec = targetwcs.radec_center() rad = targetwcs.radius() rad = rad + np.hypot(10.,14.)/2./60. print 'Searching for run,camcol,fields with radius', rad, 'deg' RCF = radec_to_sdss_rcf(ra, dec, radius=rad*60., tablefn=wfn) print 'Found %i fields possibly in range' % len(RCF) H,W = targetwcs.shape sdsscoimgs = [np.zeros((H,W),np.float32) for band in bands] sdsscons = [np.zeros((H,W),np.float32) for band in bands] for run,camcol,field,r,d in RCF: for iband,band in enumerate(bands): bandnum = band_index(band) sdss.retrieve('frame', run, camcol, field, band) frame = sdss.readFrame(run, camcol, field, bandnum) print 'Got frame', frame h,w = frame.getImageShape() simg = frame.getImage() wcs = AsTransWrapper(frame.astrans, w, h, 0.5, 0.5) try: Yo,Xo,Yi,Xi,nil = resample_with_wcs(targetwcs, wcs, [], 3) except OverlapError: continue sdsscoimgs[iband][Yo,Xo] += simg[Yi,Xi] sdsscons [iband][Yo,Xo] += 1 for co,n in zip(sdsscoimgs, sdsscons): co /= np.maximum(1e-6, n) return sdsscoimgs, sdsscons
def stage_initplots( coimgs=None, cons=None, bands=None, ps=None, targetwcs=None, blobs=None, T=None, cat=None, tims=None, tractor=None, **kwargs): # RGB image # plt.clf() # dimshow(get_rgb(coimgs, bands)) # ps.savefig() print 'T:' T.about() # cluster zoom-in #x0,x1, y0,y1 = 1700,2700, 200,1200 #x0,x1, y0,y1 = 1900,2500, 400,1000 #x0,x1, y0,y1 = 1900,2400, 450,950 x0,x1, y0,y1 = 0,500, 0,500 clco = [co[y0:y1, x0:x1] for co in coimgs] clW, clH = x1-x0, y1-y0 clwcs = targetwcs.get_subimage(x0, y0, clW, clH) plt.figure(figsize=(6,6)) plt.subplots_adjust(left=0.005, right=0.995, bottom=0.005, top=0.995) ps.suffixes = ['png','pdf'] # cluster zoom-in rgb = get_rgb(clco, bands) plt.clf() dimshow(rgb, ticks=False) ps.savefig() # blobs #b0 = blobs #b1 = binary_dilation(blobs, np.ones((3,3))) #bout = np.logical_and(b1, np.logical_not(b0)) # b0 = blobs # b1 = binary_erosion(b0, np.ones((3,3))) # bout = np.logical_and(b0, np.logical_not(b1)) # # set green # rgb[:,:,0][bout] = 0. # rgb[:,:,1][bout] = 1. # rgb[:,:,2][bout] = 0. # plt.clf() # dimshow(rgb, ticks=False) # ps.savefig() # Initial model (SDSS only) try: # convert from string to int T.objid = np.array([int(x) if len(x) else 0 for x in T.objid]) except: pass scat = Catalog(*[cat[i] for i in np.flatnonzero(T.objid)]) sedcat = Catalog(*[cat[i] for i in np.flatnonzero(T.objid == 0)]) print len(cat), 'total sources' print len(scat), 'SDSS sources' print len(sedcat), 'SED-matched sources' tr = Tractor(tractor.images, scat) comods = [] comods2 = [] for iband,band in enumerate(bands): comod = np.zeros((clH,clW)) comod2 = np.zeros((clH,clW)) con = np.zeros((clH,clW)) for itim,tim in enumerate(tims): if tim.band != band: continue (Yo,Xo,Yi,Xi) = tim.resamp mod = tr.getModelImage(tim) Yo -= y0 Xo -= x0 K, = np.nonzero((Yo >= 0) * (Yo < clH) * (Xo >= 0) * (Xo < clW)) Xo,Yo,Xi,Yi = Xo[K],Yo[K],Xi[K],Yi[K] comod[Yo,Xo] += mod[Yi,Xi] ie = tim.getInvError() noise = np.random.normal(size=ie.shape) / ie noise[ie == 0] = 0. comod2[Yo,Xo] += mod[Yi,Xi] + noise[Yi,Xi] con[Yo,Xo] += 1 comod /= np.maximum(con, 1) comods.append(comod) comod2 /= np.maximum(con, 1) comods2.append(comod2) plt.clf() dimshow(get_rgb(comods2, bands), ticks=False) ps.savefig() plt.clf() dimshow(get_rgb(comods, bands), ticks=False) ps.savefig() # Overplot SDSS sources ax = plt.axis() for src in scat: rd = src.getPosition() ok,x,y = clwcs.radec2pixelxy(rd.ra, rd.dec) cc = (0,1,0) if isinstance(src, PointSource): plt.plot(x-1, y-1, 'o', mec=cc, mfc='none', ms=10, mew=1.5) else: plt.plot(x-1, y-1, 'o', mec='r', mfc='none', ms=10, mew=1.5) plt.axis(ax) ps.savefig() # Add SED-matched detections for src in sedcat: rd = src.getPosition() ok,x,y = clwcs.radec2pixelxy(rd.ra, rd.dec) plt.plot(x-1, y-1, 'o', mec='c', mfc='none', ms=10, mew=1.5) plt.axis(ax) ps.savefig() # Mark SED-matched detections on image plt.clf() dimshow(get_rgb(clco, bands), ticks=False) ax = plt.axis() for src in sedcat: rd = src.getPosition() ok,x,y = clwcs.radec2pixelxy(rd.ra, rd.dec) #plt.plot(x-1, y-1, 'o', mec='c', mfc='none', ms=10, mew=1.5) x,y = x-1, y-1 hi,lo = 20,7 # plt.plot([x-lo,x-hi],[y,y], 'c-') # plt.plot([x+lo,x+hi],[y,y], 'c-') # plt.plot([x,x],[y+lo,y+hi], 'c-') # plt.plot([x,x],[y-lo,y-hi], 'c-') plt.annotate('', (x,y+lo), xytext=(x,y+hi), arrowprops=dict(color='c', width=1, frac=0.3, headwidth=5)) plt.axis(ax) ps.savefig() # plt.clf() # dimshow(get_rgb([gaussian_filter(x,1) for x in clco], bands), ticks=False) # ps.savefig() # Resid # plt.clf() # dimshow(get_rgb([im-mo for im,mo in zip(clco,comods)], bands), ticks=False) # ps.savefig() # find SDSS fields within that WCS #sdss = DR9(basedir=photoobjdir) #sdss.useLocalTree() sdss = DR9(basedir='tmp') sdss.saveUnzippedFiles('tmp') #wfn = sdss.filenames.get('window_flist', None) wfn = os.path.join(os.environ['PHOTO_RESOLVE'], 'window_flist.fits') from astrometry.sdss.fields import radec_to_sdss_rcf clra,cldec = clwcs.radec_center() clrad = clwcs.radius() clrad = clrad + np.hypot(10.,14.)/2./60. print 'Searching for run,camcol,fields with radius', clrad, 'deg' RCF = radec_to_sdss_rcf(clra, cldec, radius=clrad*60., tablefn=wfn) print 'Found %i fields possibly in range' % len(RCF) sdsscoimgs = [np.zeros((clH,clW),np.float32) for band in bands] sdsscons = [np.zeros((clH,clW),np.float32) for band in bands] for run,camcol,field,r,d in RCF: for iband,band in enumerate(bands): bandnum = band_index(band) sdss.retrieve('frame', run, camcol, field, band) frame = sdss.readFrame(run, camcol, field, bandnum) print 'Got frame', frame h,w = frame.getImageShape() simg = frame.getImage() wcs = AsTransWrapper(frame.astrans, w, h, 0.5, 0.5) try: Yo,Xo,Yi,Xi,nil = resample_with_wcs(clwcs, wcs, [], 3) except OverlapError: continue sdsscoimgs[iband][Yo,Xo] += simg[Yi,Xi] sdsscons [iband][Yo,Xo] += 1 for co,n in zip(sdsscoimgs, sdsscons): co /= np.maximum(1e-6, n) plt.clf() dimshow(get_rgb(sdsscoimgs, bands, **rgbkwargs), ticks=False) #plt.title('SDSS') ps.savefig()