Ejemplo n.º 1
0
def test_fit_1gauss_noisy(ellip=0.2, s2n=10000):
    import images
    import fimage
    numpy.random.seed(35)

    sigma = 1.4
    T=2*sigma**2
    nsig=5
    dim = int(nsig*T)
    if (dim % 2) == 0:
        dim += 1
    dims=array([dim,dim])
    cen=(dims-1.)/2.

    theta=23.7*numpy.pi/180.
    #eta=-0.7
    #ellip=(1+tanh(eta))/2
    eta = ellip2eta(ellip+1.e-8)
    print >>stderr,'ellip:',ellip
    pars=array([cen[0],cen[1],eta,theta,1.,T])
    print >>stderr,'pars'
    gmix = gmix_fit.pars2gmix_coellip_pick(pars,ptype='eta')

    nsub=1
    im0=gmix2image_em(gmix,dims,nsub=nsub)

    im,skysig = fimage.add_noise(im0, s2n,check=True)

    images.multiview(im,title='nsub: %d' % nsub)
    
    p0=pars.copy()
    p0[0] += 1*(randu()-0.5)  # cen0
    p0[1] += 1*(randu()-0.5)  # cen1
    p0[2] += 0.2*(randu()-0.5)  # eta
    p0[3] += 0.5*(randu()-0.5)   # theta radians
    p0[4] += 0.1*(randu()-0.5)  # p
    p0[5] += 1*(randu()-0.5)   # T
    print_pars(pars,front='pars:  ')
    print_pars(p0,  front='guess: ')

    gf=gmix_fit.GMixFitCoellip(im, p0, ptype='eta',verbose=True)

    print 'numiter:',gf.numiter
    print_pars(gf.popt, front='popt: ')
    print_pars(gf.perr, front='perr: ')
    images.imprint(gf.pcov)
Ejemplo n.º 2
0
    def _get_Rnoise(self, data, weights=None, show=False):
        import images

        noise0 = self['target_noise']
        print("noise0:",noise0)

        if 'detrend_noises' in self:
            target_noises = array( self['detrend_noises'] )
        else:
            target_noises = noise0*array( self['detrend_factors'] )

        ndiff = target_noises - noise0
        xvals = 2*noise0*ndiff

        if weights is not None:
            Rdt, Rdt_psf = self._get_Rnoise_means_weighted(data, weights)
        else:
            Rdt, Rdt_psf = self._get_Rnoise_means(data)

        plot_psf=True
        if Rdt_psf is None:
            plot_psf=False
            Rdt_psf = 0.0*Rdt[:,:,0]

        A = zeros( (2,2) )
        Apsf = zeros(2)

        p='%s (%.4g +/- %.4g) + (%.4g +/ %.4g) deltan'
        for i in xrange(2):
            res = fitline(xvals, Rdt_psf[:,i])
            Apsf[i] = res['slope']

            if plot_psf:
                plot_line_fit(
                    self['run'],
                    'Rnoise-detrend-Rpsf%d' % (i+1),
                    xvals, Rdt_psf[:,i],res,
                    r'$2 n \Delta n$',
                    r'$\Delta R^{PSF}_%d$' % (i+1),
                    show=show,
                    label_error=False,
                )

            for j in xrange(2):
                res = fitline(xvals, Rdt[:,i,j])
                A[i,j] = res['slope']

                n='A[%d,%d]' % (i+1,j+1)
                s=res['slope']
                serr=res['slope_err']
                o=res['offset']
                oerr=res['offset_err']
                print(p % (n,o,oerr,s,serr))

                plt=plot_line_fit(
                    self['run'],
                    'Rnoise-detrend-R%d%d' % (i+1,j+1),
                    xvals,
                    Rdt[:,i,j],
                    res,
                    r'$2 n \Delta n$',
                    r'$\Delta R_{%d,%d}$' % (i+1,j+1),
                    show=show,
                    label_error=False,
                )

        Rnoise = A*noise0**2
        Rnoise_psf = Apsf*noise0**2

        print("Rnoise")
        images.imprint(Rnoise, fmt='%.4g')
        print("Rnoise_psf")
        print('%.4g %.4g' % tuple(Rnoise_psf))

        return Rnoise, Rnoise_psf
Ejemplo n.º 3
0
    def calc_gmean(self, data, deep_data=None):
        """
        get gtrue, gmeas, gcov
        """
        import ngmix

        gtrue = data['shear_true'].mean(axis=0)

        print("getting weights")
        wts = self.get_weights(data)
        if wts is None:
            print("    weights are None")

        if deep_data is not None:
            print("getting deep data weights")
            deep_wts = self.get_weights(deep_data)
            if deep_wts is None:
                print("    weights are None")

        #print("using sens:",self.sens_field)

        chunksize = 1000
        if chunksize > data.size / 10.0:
            chunksize = data.size / 10
        #print("chunksize:",chunksize)

        if self.sens_style == 'lensfit':
            raise RuntimeError("lensfit not working yet")
            if self.sens_field is None:
                sens = numpy.ones((data.size, 2))
            else:
                sens = data[self.sens_field].copy()

            gmeas, gcov = ngmix.lensfit.lensfit_jackknife(data[self.g_field],
                                                          sens,
                                                          weights=wts,
                                                          chunksize=chunksize)
        elif self.sens_style == 'metacal':

            if self.sens_field is None:
                sens = numpy.ones((data.size, 2, 2))
            else:
                import images

                if deep_data is not None:
                    print("    using mean sensitivity from deep data")

                    wsum = deep_wts.sum()
                    wa = deep_wts[:, newaxis, newaxis]

                    s = deep_data[self.sens_field]
                    sens_mean = (s * wa).sum(axis=0) / wsum

                    sens = numpy.zeros((data.size, 2, 2))
                    sens[:, 0, 0] = sens_mean[0, 0]
                    sens[:, 0, 1] = sens_mean[0, 1]
                    sens[:, 1, 0] = sens_mean[1, 0]
                    sens[:, 1, 1] = sens_mean[1, 1]
                else:
                    print("    using sensitivity from this data")
                    sens = data[self.sens_field].copy()

            print("mean sens:")
            images.imprint(sens.mean(axis=0), fmt='%g')

            res = ngmix.metacal.jackknife_shear(data[self.g_field],
                                                sens,
                                                weights=wts,
                                                chunksize=chunksize)
            gmeas = res['shear']
            gcov = res['shear_cov']
        elif self.sens_style is None:
            gmeas = data[self.g_field].mean(axis=0)
            gcov = numpy.zeros((2, 2))
            gcov[0, 0] = data[self.g_field][:, 0].std() / numpy.sqrt(data.size)
            gcov[1, 1] = data[self.g_field][:, 1].std() / numpy.sqrt(data.size)
        else:
            raise ValueError("bad sens_style: '%s'" % self.sens_style)

        return gtrue, gmeas, gcov
Ejemplo n.º 4
0
def test_fit_1gauss_galsim(ellip=0.2, s2n=10000):
    import images
    import galsim
    import admom
    numpy.random.seed(35)

    #sigma = 1.4
    sigma = 1
    T=2*sigma**2
    e = 0.2
    theta=23.7
    e1,e2 = etheta2e1e2(e,theta)

    fimage_cov = ellip2mom(T, e=e, theta=theta)

    print 'e: ',e
    print 'e1:',e1
    print 'e2:',e2
    pixel_scale = 1.

    nsig=5
    dim = int(nsig*T)
    if (dim % 2) == 0:
        dim += 1
    dims=array([dim,dim])
    cen=(dims-1)/2

    pix = galsim.Pixel(xw=pixel_scale, yw=pixel_scale)

    gobj = galsim.Gaussian(sigma=sigma) 
    gobj.applyDistortion(galsim.Ellipse(e1=e1,e2=e2))
    gcobj = galsim.Convolve([gobj,pix])

    im0 = galsim.ImageD(int(dims[1]),int(dims[0]))

    gcobj.draw(image=im0, dx=pixel_scale)

    images.multiview(im0.array)
    galsim_nsub=16
    ares = admom.admom(im0.array,cen[0],cen[1],guess=T/2,nsub=galsim_nsub)
    print 'galsim sigma:',sqrt( (ares['Irr']+ares['Icc'])/2 )
    print 'galsim admom e1:',ares['e1']
    print 'galsim admom e2:',ares['e2']
    print 'galsim center:',ares['row'],ares['col']

    fnsub=16
    fim0 = model_image('gauss',dims,cen,fimage_cov,nsub=fnsub)
    fares = admom.admom(fim0,cen[0],cen[1],guess=T/2,nsub=fnsub)
    print 'fimage sigma:',sqrt( (fares['Irr']+fares['Icc'])/2 )
    print 'fimage admom e1:',fares['e1']
    print 'fimage admom e2:',fares['e2']
    print 'fimage center:',fares['row'],fares['col']


    return 


    theta=23.7*numpy.pi/180.
    print >>stderr,'ellip:',ellip
    pars=array([cen[0],cen[1],eta,theta,1.,T])
    print >>stderr,'pars'
    gmix = gmix_fit.pars2gmix_coellip_pick(pars,ptype='eta')

    nsub=1
    im0=gmix2image_em(gmix,dims,nsub=nsub)

    im,skysig = fimage.add_noise(im0, s2n,check=True)

    images.multiview(im,title='nsub: %d' % nsub)
    
    p0=pars.copy()
    p0[0] += 1*(randu()-0.5)  # cen0
    p0[1] += 1*(randu()-0.5)  # cen1
    p0[2] += 0.2*(randu()-0.5)  # eta
    p0[3] += 0.5*(randu()-0.5)   # theta radians
    p0[4] += 0.1*(randu()-0.5)  # p
    p0[5] += 1*(randu()-0.5)   # T
    print_pars(pars,front='pars:  ')
    print_pars(p0,  front='guess: ')

    gf=gmix_fit.GMixFitCoellip(im, p0, ptype='eta',verbose=True)

    print 'numiter:',gf.numiter
    print_pars(gf.popt, front='popt: ')
    print_pars(gf.perr, front='perr: ')
    images.imprint(gf.pcov)
Ejemplo n.º 5
0
    def calc_gmean(self, data, deep_data=None):
        """
        get gtrue, gmeas, gcov
        """
        import ngmix

        gtrue = data['shear_true'].mean(axis=0)

        print("getting weights")
        wts=self.get_weights(data)
        if wts is None:
            print("    weights are None")

        if deep_data is not None:
            print("getting deep data weights")
            deep_wts = self.get_weights(deep_data)
            if deep_wts is None:
                print("    weights are None")

        #print("using sens:",self.sens_field)

        chunksize=1000
        if chunksize > data.size/10.0:
            chunksize = data.size/10
        #print("chunksize:",chunksize)

        if self.sens_style=='lensfit':
            raise RuntimeError("lensfit not working yet")
            if self.sens_field is None:
                sens = numpy.ones( (data.size, 2) )
            else:
                sens = data[self.sens_field].copy()

            gmeas, gcov = ngmix.lensfit.lensfit_jackknife(data[self.g_field],
                                                          sens,
                                                          weights=wts,
                                                          chunksize=chunksize)
        elif self.sens_style=='metacal':

            if self.sens_field is None:
                sens = numpy.ones( (data.size,2,2) )
            else:
                import images

                if deep_data is not None:
                    print("    using mean sensitivity from deep data")

                    wsum = deep_wts.sum()
                    wa = deep_wts[:,newaxis,newaxis]

                    s=deep_data[self.sens_field]
                    sens_mean = (s*wa).sum(axis=0)/wsum

                    sens = numpy.zeros( (data.size,2,2) )
                    sens[:,0,0] = sens_mean[0,0]
                    sens[:,0,1] = sens_mean[0,1]
                    sens[:,1,0] = sens_mean[1,0]
                    sens[:,1,1] = sens_mean[1,1]
                else:
                    print("    using sensitivity from this data")
                    sens = data[self.sens_field].copy()

            print("mean sens:")
            images.imprint(sens.mean(axis=0), fmt='%g')

            res = ngmix.metacal.jackknife_shear(data[self.g_field],
                                                sens,
                                                weights=wts,
                                                chunksize=chunksize)
            gmeas=res['shear']
            gcov=res['shear_cov']
        elif self.sens_style is None:
            gmeas = data[self.g_field].mean(axis=0)
            gcov=numpy.zeros( (2,2) )
            gcov[0,0] = data[self.g_field][:,0].std()/numpy.sqrt(data.size)
            gcov[1,1] = data[self.g_field][:,1].std()/numpy.sqrt(data.size)
        else:
            raise ValueError("bad sens_style: '%s'" % self.sens_style)

        return gtrue, gmeas, gcov
Ejemplo n.º 6
0
 def _print_pcov(self, res):
     if res['flags']==0:
         import images
         import esutil as eu
         images.imprint(eu.stat.cov2cor( res['pcov']) , fmt='%10f')