Exemplo n.º 1
0
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')
Exemplo n.º 2
0
def mosaic():
    '''
    > cp ~/cosmo/staging/mosaicz/MZLS_CP/CP20180102/k4m_180103_040423_ooi_zd_v1.fits.fz /tmp
    > funpack /tmp/k4m_180103_040423_ooi_zd_v1.fits.fz
    > fitsgetext -i /tmp/k4m_180103_040423_ooi_zd_v1.fits -o mosaic-%02i.wcs -a -H
    > cat mosaic-??.wcs > mosaic.wcs
    > for ((i=1; i<=4; i++)); do modhead mosaic.wcs+$i NAXIS2; modhead mosaic.wcs+$i NAXIS2 0; done
    NAXIS2  =                 4079 / Axis length

    NAXIS2  =                 4079 / Axis length

    NAXIS2  =                 4079 / Axis length

    NAXIS2  =                 4061 / Axis length
    '''

    plt.figure(figsize=(4, 3))
    plt.subplots_adjust(left=0.15, right=0.99, top=0.99, bottom=0.15)

    T = fits_table('obstatus/mosaic-tiles_obstatus.fits')
    print(len(T), 'tiles')
    T.rename('pass', 'passnum')
    T.cut(T.passnum <= 3)
    print(len(T), 'tiles with passnum <= 3')
    ra, dec = 180.216, 40.191
    #ra,dec = 180., 40.
    I, J, d = match_radec(T.ra, T.dec, ra, dec, 2.)
    print(len(I), 'tiles near', ra, dec)
    T.cut(I)
    T.dist = d
    print('dists:', d)
    print('Passes:', T.passnum)

    F = fitsio.FITS(os.path.join(os.path.dirname(__file__), 'mosaic.wcs'))
    wcs = []

    heights = [4079, 4079, 4079, 4061]

    for i in range(1, len(F)):
        hdr = F[i].read_header()
        W = hdr['NAXIS1']
        wcs.append(wcs_pv2sip_hdr(hdr, H=heights[i - 1], W=W))
        print('WCS:', wcs[-1])

    # Rendering canvas
    W, H = 2200, 2200
    pixsc = 4. / 3600.
    targetwcs = Tan(ra, dec, W / 2. + 0.5, H / 2. + 0.5, -pixsc, 0., 0., pixsc,
                    float(W), float(H))
    II = np.lexsort((T.dist, T.passnum))

    print('First tile center:', T.ra[II[0]], T.dec[II[0]])

    # This is for making the (vector) PDF format tiling images.
    for maxit in [0, 8, 36, 37, 44, 73, 74, 82, 112]:
        plot = Plotstuff(outformat='pdf',
                         ra=ra,
                         dec=dec,
                         width=W * pixsc,
                         size=(W, H),
                         outfn='tile-mosaic-%02i.pdf' % maxit)
        plot.color = 'white'
        plot.alpha = 1.
        plot.plot('fill')

        out = plot.outline
        out.fill = True
        out.stepsize = 1024.
        plot.color = 'black'
        plot.alpha = 0.4
        plot.apply_settings()

        for it, t in enumerate(T[II]):
            print('Tile', it, 'pass', t.passnum)
            for w in wcs:
                w.set_crval((t.ra, t.dec))
                out.wcs = anwcs_new_sip(w)
                plot.plot('outline')
            if it == maxit:
                print('Writing', it)
                plot.write()
                break

    # # And this is for PNG-format tiling images and histograms.
    cov = np.zeros((H, W), np.uint8)
    for it, t in enumerate(T[II]):
        print('Tile', it, 'pass', t.passnum)
        for w in wcs:
            w.set_crval((t.ra, t.dec))
            try:
                Yo, Xo, Yi, Xi, nil = resample_with_wcs(targetwcs, w)
            except:
                continue
            cov[Yo, Xo] += 1

        if it in [0, 8, 36, 37, 44, 73, 74, 82, 112]:
            mx = {1: 2, 2: 4, 3: 6}[t.passnum]
            # plt.clf()
            # plt.imshow(cov, interpolation='nearest', origin='lower', vmin=0, vmax=mx)
            # plt.colorbar()
            # plt.savefig('tile-%02i.png' % it)
            plt.imsave('tile-mosaic-%02i.png' % it,
                       cov,
                       origin='lower',
                       vmin=0,
                       vmax=mx,
                       cmap=antigray)

        if it in [36, 73, 112]:
            from collections import Counter
            print('Coverage counts:', Counter(cov.ravel()).most_common())
            bins = -0.5 + np.arange(8)
            plt.clf()
            n, b, p = plt.hist(cov.ravel(), bins=bins, normed=True)
            #plt.hist(cov.ravel(), bins=bins, normed=True, cumulative=True, histtype='step')
            # Cumulative histogram from the right...
            xx, yy = [], []
            for blo, bhi, ni in reversed(list(zip(bins, bins[1:], n))):
                nc = float(np.sum(cov.ravel() > blo)) / len(cov.ravel())
                yy.extend([nc, nc])
                xx.extend([bhi, blo])
                if ni > 0:
                    if nc != ni:
                        if nc > ni + 0.03:
                            # If there's room, label the histogram bin above, else below
                            plt.text((blo + bhi) / 2.,
                                     ni,
                                     '%.1f \%%' % (100. * ni),
                                     ha='center',
                                     va='bottom',
                                     color='k')
                        else:
                            plt.text((blo + bhi) / 2.,
                                     ni - 0.01,
                                     '%.1f \%%' % (100. * ni),
                                     ha='center',
                                     va='top',
                                     color='k')
                    plt.text((blo + bhi) / 2.,
                             nc,
                             '%.1f \%%' % (100. * nc),
                             ha='center',
                             va='bottom',
                             color='k')

            plt.plot(xx, yy, 'k-')

            plt.xlim(bins.min(), bins.max())
            plt.ylim(0., 1.1)
            plt.xlabel('Number of exposures')
            plt.ylabel('Fraction of sky')
            plt.savefig('hist-mosaic-%02i.pdf' % it)
Exemplo n.º 3
0
def decam():
    '''
    cp ~/cosmo/staging/decam/DECam_CP/CP20170731/c4d_170801_080516_oki_g_v1.fits.fz /tmp
    funpack /tmp/c4d_170801_080516_oki_g_v1.fits.fz
    fitsgetext -i /tmp/c4d_170801_080516_oki_g_v1.fits -o decam-%02i.wcs -a -H
    cat decam-??.wcs > decam.wcs
    for ((i=1; i<=61; i++)); do modhead decam.wcs+$i NAXIS2 0; done
    '''

    plt.figure(figsize=(4, 3))
    plt.subplots_adjust(left=0.15, right=0.99, top=0.99, bottom=0.15)

    T = fits_table('obstatus/decam-tiles_obstatus.fits')
    T.rename('pass', 'passnum')
    ra, dec = 0.933, 0.
    I, J, d = match_radec(T.ra, T.dec, ra, dec, 5.)  #2.8)
    print(len(I), 'tiles near 0,0')
    T.cut(I)
    T.dist = d
    print('dists:', d)
    print('Passes:', T.passnum)

    F = fitsio.FITS(os.path.join(os.path.dirname(__file__), 'decam.wcs'))
    wcs = []
    for i in range(1, len(F)):
        hdr = F[i].read_header()
        wcs.append(wcs_pv2sip_hdr(hdr, W=2046, H=4094))

    W, H = 5000, 5000
    pixsc = 4. / 3600.
    targetwcs = Tan(ra, dec, W / 2. + 0.5, H / 2. + 0.5, -pixsc, 0., 0., pixsc,
                    float(W), float(H))
    II = np.lexsort((T.dist, T.passnum))

    # This is for making the (vector) PDF format tiling images.
    for maxit in [0, 6, 30, 31, 37, 61, 62, 68, 90]:
        #mx = { 1: 2, 2: 4, 3: 6 }[t.passnum]
        plot = Plotstuff(outformat='pdf',
                         ra=ra,
                         dec=dec,
                         width=W * pixsc,
                         size=(W, H),
                         outfn='tile-%02i.pdf' % maxit)
        plot.color = 'white'
        plot.alpha = 1.
        plot.plot('fill')

        out = plot.outline
        out.fill = True
        out.stepsize = 1024.
        plot.color = 'black'
        plot.alpha = 0.4
        plot.apply_settings()

        for it, t in enumerate(T[II]):
            print('Tile', it, 'pass', t.passnum)
            for w in wcs:
                w.set_crval((t.ra, t.dec))
                out.wcs = anwcs_new_sip(w)
                plot.plot('outline')
            if it == maxit:
                print('Writing', it)
                plot.write()
                break

    # And this is for PNG-format tiling images and histograms.
    cov = np.zeros((H, W), np.uint8)
    for it, t in enumerate(T[II]):
        print('Tile', it, 'pass', t.passnum)
        for w in wcs:
            w.set_crval((t.ra, t.dec))
            #print('WCS:', w)
            try:
                Yo, Xo, Yi, Xi, nil = resample_with_wcs(targetwcs, w)
            except:
                #import traceback
                #traceback.print_exc()
                continue
            cov[Yo, Xo] += 1

        if it in [0, 6, 30, 31, 37, 61, 62, 68, 90]:
            mx = {1: 2, 2: 4, 3: 6}[t.passnum]
            # plt.clf()
            # plt.imshow(cov, interpolation='nearest', origin='lower', vmin=0, vmax=mx)
            # plt.colorbar()
            # plt.savefig('tile-%02i.png' % it)

            plt.imsave('tile-%02i.png' % it,
                       cov,
                       origin='lower',
                       vmin=0,
                       vmax=mx,
                       cmap=antigray)
            #plt.imsave('tile-%02i.pdf' % it, cov, origin='lower', vmin=0, vmax=mx, cmap=antigray, format='pdf')

        if it in [30, 61, 90]:
            from collections import Counter
            print('Coverage counts:', Counter(cov.ravel()).most_common())
            bins = -0.5 + np.arange(8)
            plt.clf()
            n, b, p = plt.hist(cov.ravel(), bins=bins, normed=True)
            #plt.hist(cov.ravel(), bins=bins, normed=True, cumulative=True, histtype='step')
            # Cumulative histogram from the right...
            xx, yy = [], []
            for blo, bhi, ni in reversed(zip(bins, bins[1:], n)):
                nc = float(np.sum(cov.ravel() > blo)) / len(cov.ravel())
                yy.extend([nc, nc])
                xx.extend([bhi, blo])
                if ni > 0:
                    if nc != ni:
                        if nc > ni + 0.03:
                            # If there's room, label the histogram bin above, else below
                            plt.text((blo + bhi) / 2.,
                                     ni,
                                     '%.1f \%%' % (100. * ni),
                                     ha='center',
                                     va='bottom',
                                     color='k')
                        else:
                            plt.text((blo + bhi) / 2.,
                                     ni - 0.01,
                                     '%.1f \%%' % (100. * ni),
                                     ha='center',
                                     va='top',
                                     color='k')
                    plt.text((blo + bhi) / 2.,
                             nc,
                             '%.1f \%%' % (100. * nc),
                             ha='center',
                             va='bottom',
                             color='k')

            plt.plot(xx, yy, 'k-')

            plt.xlim(bins.min(), bins.max())
            plt.ylim(0., 1.1)
            plt.xlabel('Number of exposures')
            plt.ylabel('Fraction of sky')
            #plt.title('DECaLS tiling, %i pass%s' % (t.passnum, t.passnum > 1 and 'es' or ''))
            #plt.savefig('hist-%02i.png' % it)
            plt.savefig('hist-%02i.pdf' % it)