def showRes(x,y,src,psf,img,sig,mask,iflt,vflt,cmat,reg,niter,npix): oy,ox = iT.coords((npix,npix)) oy -= oy.mean() ox -= ox.mean() span = max(x.max()-x.min(),y.max()-y.min()) oy *= span/npix ox *= span/npix ox += x.mean() oy += y.mean() lmat = psf*src.lmat rmat = src.rmat res,fit,model,rhs,regg = aT.getModelG(iflt,vflt,lmat,cmat,rmat,reg,niter=niter) osrc = src.eval(ox.ravel(),oy.ravel(),fit).reshape(ox.shape) oimg = img*numpy.nan oimg[mask] = (lmat*fit) ext = [0,img.shape[1],0,img.shape[0]] ext2 = [x.mean()-span/2.,x.mean()+span/2.,y.mean()-span/2.,y.mean()+span/2.] pylab.figure() pylab.subplot(221) img[~mask] = numpy.nan pylab.imshow(img,origin='lower',interpolation='nearest',extent=ext) pylab.colorbar() pylab.subplot(222) pylab.imshow(oimg,origin='lower',interpolation='nearest',extent=ext) pylab.colorbar() pylab.subplot(223) pylab.imshow((img-oimg)/sig,origin='lower',interpolation='nearest',extent=ext) pylab.colorbar() pylab.subplot(224) pylab.imshow(osrc,origin='lower',interpolation='nearest',extent=ext2) pylab.colorbar() return osrc
def doFit(p=None,doReg=True,updateReg=True,checkImgs=True,levMar=False): global reg # Check if using levMar-style parameters if p is not None: for i in range(len(p)): pars[i].value = p[i] # If the parameter is out-of-bounds return a bad fit try: a = pars[i].logp except: return iflt/sflt for l in lenses: l.setPars() xl,yl = pylens.getDeflections(lenses,coords) src.update(xl,yl,doReg=doReg) lmat = PSFm*src.lmat if doReg==True: rmat = src.rmat else: rmat = None nupdate = 0 if doReg==True and updateReg==True: nupdate = 10 res,fit,model,_,regg = aT.getModelG(ifltm,vfltm,lmat,cmatm,rmat,reg,nupdate) reg = regg[0] if checkImgs is False: if levMar: res = res**0.5+ifltm*0. return -0.5*res # This checks is images are formed outside of the masked region xl,yl = pylens.getDeflections(lenses,[xflt,yflt]) oimg,pix = src.eval(xl,yl,fit,domask=False) oimg = PSF*oimg res = (iflt-oimg)/sflt if levMar: return res return -0.5*(res**2).sum()