def test_fit_dev_eta_bysigma(): """ Round object as a function of sigma """ import admom import biggles from fimage import model_image, ellip2mom numpy.random.seed(35) ngauss=4 nsig=15 npars=2*ngauss+4 nsigma_vals=20 e=0.3 eta = ellip2eta(e) theta=23.7 print >>stderr,'ellip:',e print >>stderr,'eta:',eta print >>stderr,'theta:',theta*pi/180. f='test-opt-dev-bysigma.rec' pngf=f.replace('.rec','.png') if not os.path.exists(f): data=numpy.zeros(nsigma_vals,dtype=[('sigma','f8'),('pars','f8',npars)]) #sigvals = numpy.linspace(1.5,5.0,nsigma_vals) #sigvals = numpy.linspace(3.,5.0,nsigma_vals) sigvals=array([7.0]) for isigma,sigma in enumerate(sigvals): print '-'*70 print 'sigma:',sigma T = 2*sigma**2 dim = int(2*nsig*sigma) if (dim % 2) == 0: dim += 1 dims=array([dim,dim]) cen=(dims-1)/2. cov=ellip2mom(T, e=e, theta=theta) im = model_image('dev',dims,cen,cov,nsub=16) #images.multiview(im) ares = admom.admom(im,cen[0],cen[1],guess=T/2,nsub=16) if ares['whyflag'] != 0: raise ValueError("admom failed") Tadmom = ares['Irr']+ares['Icc'] print >>stderr,'admom sigma:',sqrt(Tadmom/2) print >>stderr,'admom T:',Tadmom print >>stderr,'admom e:',sqrt(ares['e1']**2 + ares['e2']**2) print >>stderr,'T input:',T #Tuse = Tadmom Tuse = T p0 = array([cen[0], cen[1], eta, theta*pi/180., 0.22, 0.35, 0.25, 0.15, Tuse*0.15, Tuse*0.5, Tuse*2.0, Tuse*5.0]) #0.18450384 2.09205287 10.31125635 67.13233512 print_pars(p0, front='guess: ') gf=gmix_fit.GMixFitCoellip(im, p0, ptype='eta',verbose=True) flags = gf.flags print 'numiter:',gf.numiter print_pars(gf.popt, front='popt: ') #for i in xrange(len(gf.popt)): # print '%.6g' % gf.popt[i] if gf.flags != 0: raise RuntimeError("failed") print >>stderr,'T relative to T uw:',gf.popt[4+ngauss:]/T print >>stderr,'T relative to T admom:',gf.popt[4+ngauss:]/Tadmom data['sigma'][isigma] = sigma data['pars'][isigma,:] = gf.popt # plot the last one gmix = gmix_fit.pars2gmix_coellip_eta(gf.popt) model = gmix2image_em(gmix,im.shape) images.compare_images(im,model) else: data=eu.io.read(f) biggles.configure('fontsize_min', 1.0) biggles.configure('linewidth',1.0) # frame only nrows=3 ncols=4 tab=biggles.Table(nrows,ncols) for par in xrange(npars): plt=biggles.FramedPlot() plt.add(biggles.Curve(data['sigma'],data['pars'][:,par])) plt.add(biggles.Points(data['sigma'],data['pars'][:,par], type='filled circle')) plt.xlabel = r'$\sigma$' plt.ylabel = 'p%d' % par tab[par//ncols,par%ncols] = plt tab.show() tab.write_img(1024,1024,pngf)
def test_fit_exp_eta(): import biggles from fimage import model_image numpy.random.seed(35) nsig=7 ngauss=3 npars=2*ngauss+4 nsigma=20 data=numpy.zeros(nsigma,dtype=[('sigma','f8'),('pars','f8',npars)]) sigvals = numpy.linspace(1.5,5.0,nsigma) for isigma,sigma in enumerate(sigvals): print '-'*70 T = 2*sigma**2 e = 0.3 eta = ellip2eta(e) #theta = randu()*360.*pi/180. theta = 23.7*pi/180. e1 = e*cos(2*theta) e2 = e*sin(2*theta) Irc = e2*T/2. Icc = (1+e1)*T/2. Irr = (1-e1)*T/2. sigma = sqrt( (Irr+Icc)/2. ) dim = int(2*nsig*sigma) if (dim % 2) == 0: dim += 1 dims=array([dim,dim]) cen=(dims-1)/2. cov=[Irr,Irc,Icc] im = model_image('exp',dims,cen,cov,nsub=16) ngauss=3 p0 = [cen[0],# + 0.1*(randu()-0.5), cen[1],# + 0.1*(randu()-0.5), eta,# + 0.2*(randu()-0.5), theta,# + 10.*pi/180.*(randu()-0.5), 0.2, 0.5, 0.3, T, 0.05*T, 3.8*T] gf=gmix_fit.GMixFitCoellip(im, p0, ptype='eta', verbose=True) if gf.flags != 0: raise RuntimeError("failed") print 'numiter:',gf.numiter if gf.flags != 0: stop #pcov = gf.pcov #err = sqrt(diag(pcov)) for i in xrange(len(gf.popt)): #print '%.6g %.6g' % (gf.popt[i],err[i]) print '%.6g %.6g' % (gf.popt[i],gf.perr[i]) data['sigma'][isigma] = sigma data['pars'][isigma,:] = gf.popt tvals = gf.popt[4+ngauss:] tmax=tvals.max() print 't ratios:',tvals/tmax print 'p values:',gf.popt[4:4+ngauss] # plot the last one gmix = gmix_fit.pars2gmix_coellip_eta(gf.popt) model = gmix2image_em(gmix,im.shape) plt=images.compare_images(im,model) epsfile='test-opt-exp.eps' print >>stderr,'epsfile of image compare:',epsfile plt.write_eps(epsfile) biggles.configure('fontsize_min', 1.0) biggles.configure('linewidth',1.0) # frame only nrows=3 ncols=4 tab=biggles.Table(nrows,ncols) for par in xrange(npars): plt=biggles.FramedPlot() plt.add(biggles.Curve(data['sigma'],data['pars'][:,par])) plt.xlabel = r'$\sigma$' plt.ylabel = 'p%d' % par tab[par//ncols,par%ncols] = plt tab.show()