Exemple #1
0
    lvl = logging.INFO
    logging.basicConfig(level=lvl, format='%(message)s', stream=sys.stdout)
    bandname = band

    sdssprefix = '%06i-%s%i-%04i' % (run, bandname, camcol, field)

    timg, info = st.get_tractor_image(run, camcol, field, bandname, roi=roi)
    sources = st.get_tractor_sources(run, camcol, field, bandname, roi=roi)

    wcs = timg.getWcs()
    for source in sources:
        x, y = wcs.positionToPixel(source, source.getPosition())
        print('  (%.2f, %.2f):' % (x + x0, y + y0), source)

    tractor = st.SDSSTractor([timg])
    tractor.addSources(sources)

    lnlorig = tractor.getLogLikelihood()
    zr = np.array([-5., +20.]) * info['skysig']
    save(sdssprefix + '-orig', tractor, zr)

    # find closest source
    mini = -1
    mind2 = 1e6
    for i, src in enumerate(sources):
        rd = src.getPosition()
        rascale = np.cos(np.deg2rad(rd.ra))
        d2 = ((rd.ra - rd1.ra) * rascale)**2 + (rd.dec - rd1.dec)**2
        if d2 < mind2:
            mind2 = d2
Exemple #2
0
def halflight(name, makePlots=False, direc='RC3_Output'):
    CG = unpickle_from_file("%s/%s.pickle" % (direc, name))
    ra, dec = CG.getPosition()
    maxradius = max(CG.shapeExp.re, CG.shapeDev.re)
    assert (maxradius < 500.)
    print("Working on %s" % name)
    print(CG)

    #First step is to make an image, which needs:
    # data, invvar, psf, wcs, sky, photocal, name, zr

    crval1 = ra
    crval2 = dec
    pixscale = cd11 = .396 / 3600.
    cd12 = 0.
    cd21 = 0.
    cd22 = pixscale
    imagew = int(32 * maxradius)
    crpix1 = .5 * imagew
    imageh = int(32 * maxradius)
    crpix2 = .5 * imageh
    tan = Tan(crval1, crval2, crpix1, crpix2, cd11, cd12, cd21, cd22, imagew,
              imageh)

    wcs = ba.FitsWcs(tan)

    data = np.zeros((imagew, imageh))
    invvar = np.ones((imagew, imageh))

    psf = ba.GaussianMixturePSF(1., [0., 0.], np.array(1.))  #amp,mean,var

    skyobj = ba.ConstantSky(0.)
    zr = np.array([-5., +5.])

    tims = []
    bands = ['u', 'g', 'r', 'i', 'z']
    for bandname in bands:
        photocal = st.SdssNanomaggiesPhotoCal(bandname)
        image = en.Image(data=data,
                         invvar=invvar,
                         sky=skyobj,
                         psf=psf,
                         wcs=wcs,
                         photocal=photocal,
                         name="Half-light %s" % bandname,
                         zr=zr)
        tims.append(image)
    tractor = st.SDSSTractor(tims)
    tractor.addSources([CG])

    yg, xg = np.meshgrid(
        np.arange(imageh) - crpix2,
        np.arange(imagew) - crpix1)
    r2g = xg**2 + yg**2
    rlist_pix = np.exp(np.linspace(0., np.log(0.5 * imageh), 64))
    rlist_arcsec = rlist_pix * pixscale * 3600.
    mimgs = tractor.getModelImages()
    r50s = []
    r90s = []
    concs = []
    expr50 = CG.shapeExp.re * np.sqrt(CG.shapeExp.ab)
    devr50 = CG.shapeDev.re * np.sqrt(CG.shapeDev.ab)

    for bandname, image in zip(bands, mimgs):
        plist = [np.sum(image[r2g < (r * r)]) for r in rlist_pix]
        plist /= plist[-1]
        r50, r90 = np.interp([0.5, 0.9], plist, rlist_arcsec)
        conc = r90 / r50
        r50s.append(r50)
        r90s.append(r90)
        concs.append(conc)
        if r50 < min(devr50, expr50) or r50 > max(devr50, expr50):
            print("R50 is not in between DeV and exp radii for %s" % name)
        if 1. / conc > .46 or 1. / conc < .29:
            print("C=%.2f is a strange concentration for %s" % (conc, name))
        print(name, bandname, r50, r90, conc)
        if makePlots:
            plt.clf()
            plt.axhline(0, color='k', alpha=0.25)
            plt.xlabel("radius in arcsecond")
            plt.ylabel("fraction of azimuthally averaged flux")
            plt.title("%s" % name)
            plt.plot(rlist_arcsec, plist, 'k-')
            plt.axvline(r50, color='k', alpha=0.5)
            plt.axvline(r90, color='k', alpha=0.5)
            plt.axvline(devr50, color='r', alpha=0.5)
            plt.axvline(expr50, color='b', alpha=0.5)
            plt.text(1.02 * r90, 0.01, "$C = %.1f$" % (conc), ha='left')
            plt.xlim(0, 2. * r90)
            plt.ylim(-0.1, 1.1)
            plt.savefig("radial-profile-%s-%s.png" % (name, bandname))

    pickle_to_file([CG, r50s, r90s, concs],
                   '%s/%s-updated.pickle' % (direc, name))
Exemple #3
0
def main():
    ra = 126.925
    dec = 21.4833
    itune1 = 5
    itune2 = 5
    ntune = 2
    run = [4517, 4576, 4576]
    field = [103, 99, 100]
    camcol = [2, 6, 6]

    bands = ['r']
    bandname = 'r'
    flipBands = ['r']

    rerun = 0

    TI = []
    sources = []

    table = pyfits.open("J082742.02+212844.7-r.fits")
    table.info()

    header = table[0].header
    data = table[0].data
    invvar = table[1].data
    skyobj = ba.ConstantSky(header['skyval'])
    psffn = 'J082742.02+212844.7-r-bpsf.fits.gz'
    psfimg = pyfits.open(psffn)[0].data
    print('PSF image shape', psfimg.shape)
    # number of Gaussian components
    PS = psfimg.shape[0]
    K = 3
    w, mu, sig = em_init_params(K, None, None, None)
    II = psfimg.copy()
    II /= II.sum()
    # HACK
    II = np.maximum(II, 0)
    print('Multi-Gaussian PSF fit...')
    xm, ym = -(PS / 2), -(PS / 2)
    em_fit_2d(II, xm, ym, w, mu, sig)
    print('w,mu,sig', w, mu, sig)
    psf = GaussianMixturePSF(w, mu, sig)

    sources = []
    #    for run,camcol,field in zip(run,camcol,field):
    #        sources.append(st.get_tractor_sources(run,camcol,field,bandname,bands=bands))
    wcs = Tan("J082742.02+212844.7-r.fits", 0)
    wcs = FitsWcs(wcs)
    wcs.setX0Y0(1., 1.)
    photocal = ba.NasaSloanPhotoCal(bandname)  #Also probably not right
    TI.append(
        en.Image(data=data,
                 invvar=invvar,
                 sky=skyobj,
                 psf=psf,
                 wcs=wcs,
                 photocal=photocal,
                 name="NASA-Sloan Test"))

    lvl = logging.DEBUG
    logging.basicConfig(level=lvl, format='%(message)s', stream=sys.stdout)
    tims = [TI[0]]
    tractor = st.SDSSTractor(tims)
    for source in sources:
        tractor.addSources(source)

    zr = np.array([-5., +5.])  # * info['skysig']

    print(bands)

    prefix = 'ngc2595'
    #    saveAll('initial-'+prefix, tractor,zr,flipBands,debug=True)
    bright = None
    lowbright = 1000
    sources = []

    for timg, sources in zip(tims, sources):
        wcs = timg.getWcs()
        xtr, ytr = wcs.positionToPixel(RaDecPos(ra, dec))

        print(xtr, ytr)

        xt = xtr
        yt = ytr
        r = 250.
        for src in sources:
            xs, ys = wcs.positionToPixel(src.getPosition(), src)
            if (xs - xt)**2 + (ys - yt)**2 <= r**2:
                print("Removed:", src)
                print(xs, ys)
                tractor.removeSource(src)


#    saveAll('removed-'+prefix, tractor,zr,flipBands,debug=True)
    newShape = sg.GalaxyShape(30., 1., 0.)
    newBright = ba.Mags(r=15.0, g=15.0, u=15.0, z=15.0, i=15.0)
    EG = st.ExpGalaxy(RaDecPos(ra, dec), newBright, newShape)
    print(EG)
    tractor.addSource(EG)

    saveAll('added-' + prefix, tractor, zr, flipBands, debug=True)
    plotInvvar('added-' + prefix, tractor)

    for i in range(itune1):
        if (i % 5 == 0):
            tractor.optimizeCatalogLoop(nsteps=1, srcs=[EG], sky=True)
        else:
            tractor.optimizeCatalogLoop(nsteps=1, srcs=[EG], sky=False)
        tractor.changeInvvar(9.)
        tractor.clearCache()
        saveAll('itune1-%d-' % (i + 1) + prefix,
                tractor,
                zr,
                flipBands,
                debug=True)
        plotInvvar('itune1-%d-' % (i + 1) + prefix, tractor)

    CGPos = EG.getPosition()
    CGShape = EG.getShape()
    EGBright = EG.getBrightness()
    print(EGBright)
    CGg = EGBright[0] * 1.25
    CGi = EGBright[1] * 1.25
    CGr = EGBright[2] * 1.25
    CGu = EGBright[3] * 1.25
    CGz = EGBright[4] * 1.25
    CGBright = ba.Mags(r=CGr, g=CGg, u=CGu, z=CGz, i=CGi)
    print(EGBright)
    print(CGBright)

    CG = st.CompositeGalaxy(CGPos, CGBright, CGShape, CGBright, CGShape)
    tractor.removeSource(EG)
    tractor.addSource(CG)

    for i in range(itune2):
        if (i % 5 == 0):
            tractor.optimizeCatalogLoop(nsteps=1, srcs=[CG], sky=True)
        else:
            tractor.optimizeCatalogLoop(nsteps=1, srcs=[CG], sky=False)
        tractor.changeInvvar(9.)
        tractor.clearCache()
        saveAll('itune2-%d-' % (i + 1) + prefix,
                tractor,
                zr,
                flipBands,
                debug=True)
        plotInvvar('itune2-%d-' % (i + 1) + prefix, tractor)

    for i in range(ntune):
        tractor.optimizeCatalogLoop(nsteps=1, sky=True)
        saveAll('ntune-%d-' % (i + 1) + prefix,
                tractor,
                zr,
                flipBands,
                debug=True)
        tractor.clearCache()

    makeflipbook(prefix, len(tractor.getImages()), itune1, itune2, ntune)
Exemple #4
0
def main():
    run = 2863
    field = 180
    camcol = 4
    x0 = 200 #Field of view for the image
    x1 = 900
    y0 = 400
    y1 = 850
    starx = 200. #Star location
    stary = 300.
    starr = 50. #Star radius

    roi = [x0,x1,y0,y1]
    
    bands=['r','g','i','u','z']
    bandname = 'r'
    flipBands = ['r']

    rerun = 0

    TI = []
    TI.extend([st.get_tractor_image(run, camcol, field, bandname,roi=roi,useMags=True) for bandname in bands])
    sources = st.get_tractor_sources(run, camcol, field,bandname, bands=bands,roi=roi)

    timg,info = TI[0]
    photocal = timg.getPhotoCal()

    wcs = timg.getWcs()
    lvl = logging.DEBUG
    logging.basicConfig(level=lvl,format='%(message)s',stream=sys.stdout)

    tims = [timg for timg,tinf in TI]
    tractor = st.SDSSTractor(tims)
    tractor.addSources(sources)

    zr = np.array([-5.,+5.]) * info['skysig']

    print(bands)

    ra,dec = 152.041958,53.083472

    r = 200
    itune = 10
    ntune = 5
    prefix = 'ugc5459'

    saveBands('initial-'+prefix, tractor,zr,flipBands,debug=True)

    xtr,ytr = wcs.positionToPixel(RaDecPos(ra,dec))
    
    print(xtr,ytr)
    bright = None
    lowbright = 1000

    xt = 250. #Moving to the left for better results
    yt = 210.
    for src in sources:
        xs,ys = wcs.positionToPixel(src.getPosition(), src)
        if (xs-xt)**2+(ys-yt)**2 <= r**2:
            if isinstance(src,st.CompositeGalaxy):
                brightE = src.brightnessExp
                brightD = src.brightnessDev
                sumbright = sum([brightE.getMag(bandname)+brightD.getMag(bandname) for bandname in bands])
                if sumbright < lowbright:
                    print("GREATER")
                    lowBrightE = brightE
                    lowBrightD = brightD
                    lowShapeE = src.shapeExp
                    lowShapeD = src.shapeDev
            print("Removed:", src)
            print(xs,ys)
            tractor.removeSource(src)

    saveBands('removed-'+prefix, tractor,zr,flipBands,debug=True)

#    bright = Mags(r=15.,u=15.,g=15.,z=15.,i=15.,order=['r','u','g','z','i'])
#    shape = st.GalaxyShape(re,ab,phi)
#    shape2 = st.GalaxyShape(30.,0.3,45.)
#    print bright
#    print shape
#   print shape2

    CG = st.CompositeGalaxy(RaDecPos(ra,dec),lowBrightE,lowShapeE,lowBrightD,lowShapeD)
    print(CG)
    tractor.addSource(CG)


    saveBands('added-'+prefix,tractor,zr,flipBands,debug=True)


    for img in tractor.getImages():
        star =  [(x,y) for x in range(img.getWidth()) for y in range(img.getHeight()) if (x-starx)**2+(y-stary)**2 <= starr**2]
        for (x,y) in star:
            img.getInvError()[y][x] = 0


    saveBands('nostar-'+prefix,tractor,zr,flipBands,debug=True)
    for i in range(itune):
        tractor.optimizeCatalogLoop(nsteps=1,srcs=[CG],sky=False)
        tractor.clearCache()
        saveBands('itune-%d-' % (i+1)+prefix,tractor,zr,flipBands,debug=True)

    for i in range(ntune):
        tractor.optimizeCatalogLoop(nsteps=1,sky=True)
        saveBands('ntune-%d-' % (i+1)+prefix,tractor,zr,flipBands,debug=True)
        tractor.clearCache()

    makeflipbook(prefix,flipBands,itune,ntune)