IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 20285


Ignore:
Timestamp:
Oct 20, 2008, 11:29:18 PM (18 years ago)
Author:
Sebastian Jester
Message:

Working version of Gauss-fitting functions

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/sj_ippTests_branch_20080929/ippTests/compIPPphoto.py

    r20279 r20285  
    759759    scale,x0,xsig,y0,ysig,theta = p
    760760    model=scale*gauss2D(yx,x0,xsig,y0,ysig,theta)
    761     win.showArray(data-model)
    762761    resid = reshape(data,(data.shape[0]*data.shape[1],))-reshape(model,(model.shape[0]*model.shape[1],))
    763762    if (blankRadius > 0):
     
    770769            inradius = (((x-x0)**2 + (y-y0)**2) > blankRadius**2)
    771770        inradius = reshape(inradius,(inradius.shape[0]*inradius.shape[1],))
    772         resid[inradius==1] = 0
     771        resid[inradius] = 0
     772    # win.showArray(reshape(resid,model.shape))
    773773    return resid
    774774   
     
    794794        theta -= 180
    795795    bestp=(scale,x0,xsig,y0,ysig,theta)
    796     resid=reshape(gaussResid(bestp,yx,data,blankrad),data.shape)
     796    resid=reshape(gaussResid(bestp,yx,data,blankrad,blankInner),data.shape)
    797797    mod=data-resid
    798798    return bestp,resid,mod
     
    812812   
    813813def doGaussPsfPhotometry(infile,initialGuessList=[(2000.,1011.,2.,1176.,2.,0)],\
    814                              blankrad=15,defHalfwinsize=15,HDU=0):
     814                             blankrad=9,defHalfwinsize=15,HDU=0):
    815815    """Fit Gaussians to image in infile's HDU near the
    816816    positions and with fluxes and sigmas given in initialGuessList"""
     817    # XXX Todo: Make frame with residuals. Make blank array, then insert residuals.   
    817818    import pyfits
    818819    from numpy import nan
     820    from numarray import ones,zeros,Float32
     821    from scipy import ogrid
    819822    f_handle=pyfits.open(infile)
    820823    img = f_handle[HDU].data
     824    resid_img = 1e-7*ones(img.shape,Float32)
     825    print resid_img.shape,type(resid_img),img.shape,type(img)
    821826    fitlist = []
    822827    for initialGuessTuple in initialGuessList:
     
    829834            halfwinsize = defHalfwinsize
    830835        subim = img[int(y0)-halfwinsize:int(y0)+halfwinsize+1,int(x0)-halfwinsize:int(x0)+halfwinsize+1]
    831         # ds9-based coords start at 1,1, while these start at 0,0, so
    832         # we need to add 1 to all internally used coords to get them
    833         # to match with what we see in ds9
    834         yx=scipy.ogrid[1+y0-halfwinsize:1+y0+halfwinsize+1,1+x0-halfwinsize:1+x0+halfwinsize+1]
     836        # ds9-based coords start at 1,1, while numpy's start at 0,0,
     837        # so we need to add 1 to all internally used coords to get the
     838        # fitted coordinates to match with what we see in ds9
     839        yx=ogrid[1+int(y0)-halfwinsize:1+int(y0)+halfwinsize+1,1+int(x0)-halfwinsize:1+int(x0)+halfwinsize+1]
    835840        try:
    836841            par,res,bestfit=fitGauss(yx,subim,initialGuessTuple,blankrad,blankInner=False)
    837842        except:
    838843            par=(nan,nan,nan,nan,nan,nan)
     844            res = subim
    839845        (scale,x,xsig,y,ysig,theta)=par
     846        win.showArray(res)
     847        resid_img[int(y0)-halfwinsize:int(y0)+halfwinsize+1,int(x0)-halfwinsize:int(x0)+halfwinsize+1] = res
    840848        print initialGuessTuple, scale,x,xsig,y,ysig,theta
    841849        fitlist.append(par)
    842850    f_handle.close()
    843     return par
     851    outname = 'gaussfit_resid_'+infile
     852    primHDU = pyfits.PrimaryHDU(resid_img)
     853    hdulist = pyfits.HDUList([primHDU])
     854    hdulist.writeto(outname,clobber=True)
     855    return fitlist
    844856       
    845857def doEfbComparison(simfile='simtest.1.00a.fits',efbfile='efbsim.1.00a.fits',simtab='simtest.1.00a.cmf'):
    846858    import pyfits
    847     from numpy import array
     859    from numpy import array, rec
     860    import re
    848861    tab = pyfits.open(simtab)
    849862    tdata = tab[1].data
     
    861874
    862875    savelist = [ inparlist[i] + efbparlist[i] + simparlist[i] for i in range(nrows)]
    863     saverows = numpy.rec.array(savelist,names=['counts_in','x_in','y_in',\
    864                                                    'efbfit_counts','efbfit_x','efbfit_fwhm_x',\
    865                                                    'efbfit_y','efbfit_fwhm_y','efbfit_theta',\
    866                                                    'simfit_counts','simfit_x','simfit_fwhm_x',\
    867                                                    'simfit_y','simfit_fwhm_y','simfit_theta'])
     876    saverows = rec.array(savelist,names=['counts_in','x_in','y_in',\
     877                                             'efbfit_counts','efbfit_x','efbfit_fwhm_x',\
     878                                             'efbfit_y','efbfit_fwhm_y','efbfit_theta',\
     879                                             'simfit_counts','simfit_x','simfit_fwhm_x',\
     880                                             'simfit_y','simfit_fwhm_y','simfit_theta'])
    868881    for col in ['efbfit_fwhm_x','efbfit_fwhm_y','simfit_fwhm_x','simfit_fwhm_y']:
    869882        saverows.field(col)[0:] *= 2.35
    870883   
    871884    saveHDU = tabHDUfromRecArray(saverows)
    872     saveHDU.writeto('gaussfit_'+efbfile)
    873 
    874    
     885    fitsend = re.compile('(\.[sc]mf|\.fits?)$')
     886    saveHDU.writeto('gaussfit_'+fitsend.sub('',efbfile)+'___'+simfile,clobber=True)
     887   
     888
     889   
Note: See TracChangeset for help on using the changeset viewer.