示例#1
0
文件: regauss.py 项目: esheldon/admom
    def do_rg_corr(self):
        self['rgcorrstats'] = None
        if 'rgstats' not in self or 'psfstats' not in self:
            return
        if self['psfstats'] is None or self['rgstats'] is None:
            return
        if len(self['rgstats']) == 1:
            # this is when we couldn't make f0
            return

        if self['psfstats']['whyflag'] != 0 or self['rgstats']['whyflag'] != 0:
            return

        # apply basic correction
        rgs = self['rgstats']
        psfs = self['psfstats']

        #e1,e2,R,flags = admom.correct(rgs['Irr']+rgs['Icc'],
        #                              rgs['e1'],rgs['e2'],rgs['a4'],
        #                              psfs['Irr']+psfs['Icc'],
        #                              psfs['e1'],psfs['e2'],psfs['a4'])

        # the PSF is supposed to be gaussian now, put in a4=0?
        e1,e2,R,flags = admom.correct(rgs['Irr']+rgs['Icc'],
                                      rgs['e1'],rgs['e2'],rgs['a4'],
                                      psfs['Irr']+psfs['Icc'],
                                      psfs['e1'],psfs['e2'],0.0)

        self['rgcorrstats'] = {'e1':e1,'e2':e2,'R':R,'flags':flags}
        if self.verbose:
            print("rgcorrstats:")
            pprint(self['rgcorrstats'])
示例#2
0
    def _fit_stacks(self):
        import admom

        sdata=self._stack_data

        self.res_fmom=self._run_fmom(sdata['image_stack'], sdata['psf_stack'])
        if 'imsum' in sdata:
            self.res_sums=self._run_sums_shear()

        ares = self._run_admom(sdata['image_stack'], sdata['image_skyvar'])
        psf_ares = self._run_admom(sdata['psf_stack'], sdata['psf_skyvar'])
        
        T=ares['Irr']+ares['Icc']
        Tpsf=psf_ares['Irr'] + psf_ares['Icc']
        e1corr,e2corr,R,flags=admom.correct(T, ares['e1'], ares['e2'],ares['a4'],
                                            Tpsf, psf_ares['e1'], psf_ares['e2'], psf_ares['a4'])
        ares['e1corr'] = e1corr
        ares['e2corr'] = e2corr
        ares['R'] = R
        ares['compea4_flags']=flags

        self._ares=ares
        self._psf_ares=psf_ares
        print 'Admom R:',R
        print 'admom sh1: ',0.5*e1corr,            'sh2:       ',0.5*e2corr
        print 'sh1/Rshear:',0.5*e1corr/self.Rshear,'sh2/Rshear:',0.5*e2corr/self.Rshear


        psf_fitter = self._fit_stack(sdata['psf_stack'], sdata['psf_skyvar'], psf_ares, 
                                     ngauss=self.ngauss_psf, name='PSF')

        psf_gmix=psf_fitter.get_gmix()

        fitter=self._fit_stack(sdata['image_stack'], sdata['image_skyvar'], ares, psf=psf_gmix, 
                               ngauss=self.ngauss_obj, name='Images')

        self._fitter=fitter
        self._psf_fitter=psf_fitter


        res=self._fitter.get_result()
        sh1,sh2=0.5*res['pars'][2], 0.5*res['pars'][3]
        err1=0.5*res['perr'][2]
        err2=0.5*res['perr'][3]
        fmt='%15.6f'
        print_pars(res['pars'], front='pars: ', fmt='%15.6f')
        print_pars(res['perr'], front='perr: ', fmt='%15.6f')
        print 'fit:  sh1: %.6g +/- %.6g  sh2: %.6g +/- %.6g' % (sh1,err1,sh2,err2)
        print 'fit/Rshear: ',sh1/self.Rshear,sh2/self.Rshear
示例#3
0
文件: regauss.py 项目: esheldon/admom
    def do_basic_corr(self):
        if 'imstats' not in self or 'psfstats' not in self:
            raise ValueError("run do_psf_admom() and do_admom() first")

        if self['psfstats']['whyflag'] != 0 or self['imstats']['whyflag'] != 0:
            self['corrstats'] = None
            return

        # apply basic correction
        ims = self['imstats']
        psfs = self['psfstats']
        e1,e2,R,flags = admom.correct(ims['Irr']+ims['Icc'],
                                      ims['e1'],ims['e2'],ims['a4'],
                                      psfs['Irr']+psfs['Icc'],
                                      psfs['e1'],psfs['e2'],psfs['a4'])

        self['corrstats'] = {'e1':e1,'e2':e2,'R':R,'flags':flags}
        if self.verbose:
            print("corrstats:")
            pprint(self['corrstats'])
示例#4
0
    def _measure_gals_admom(self):
        import admom
        nbin=self.im_stacks.size

        Tpsf=self.psf_ares['Irr'] + self.psf_ares['Icc']
        e1p=self.psf_ares['e1']
        e2p=self.psf_ares['e2']
        a4p=self.psf_ares['a4']

        st=zeros(nbin, dtype=[('s2n','f8'),
                              ('e1','f8'),
                              ('e1err','f8'),
                              ('e2','f8'),
                              ('e2err','f8'),
                              ('T','f8'),
                              ('R','f8')])
        self._ares_dicts=[]
        for i in xrange(nbin):
            print '-'*70
            s2n_min=self.im_stacks['s2n_min'][i]
            s2n_max=self.im_stacks['s2n_max'][i]

            print 's2n: [%.2f,%.2f]' % (s2n_min,s2n_max)


            im=self.im_stacks['images'][i,:,:]
            skysig=sqrt(self.im_stacks['skyvar'][i])

            images.multiview(im)

            cen=array(im.shape)/2.
            ares = admom.admom(im, cen[0], cen[1],
                               sigsky=skysig,
                               guess=4.0,
                               nsub=self.nsub)
            T=ares['Irr']+ares['Icc']

            corr=admom.correct(T, ares['e1'], ares['e2'],ares['a4'],
                               Tpsf, e1p, e2p, a4p)
            
            e1,e2,R,flags=corr

            sh1=0.5*e1/self.Rshear
            sh2=0.5*e2/self.Rshear

            uncer=ares['uncer']/R

            err=0.16/sqrt(self.im_stacks['nstack'][i])

            mess='sh1: %s +/- %s sh2: %s +/- %s R: %s  flags: %s'
            mess=mess % (sh1,err,sh2,err,R,flags)
            print mess

            st['s2n'][i] = (s2n_min+s2n_max)/2.
            st['e1'][i] = e1
            st['e1err'][i] = err
            st['e2'][i] = e2
            st['e2err'][i] = err
            st['R'][i] = R
            st['T'][i] = T

            self._ares_dicts.append(ares)

        self._admom_shear = st
示例#5
0
    def run(self):
        import lensing
        import admom
        i=0
        j=0

        e1vals=numpy.zeros(self.nimage)
        e2vals=numpy.zeros(self.nimage)
        gvals=numpy.zeros(self.nimage/2)

        while i < self.nimage:
            if (((i+1) % 100) == 0):
                print '%d/%d' % (i+1,self.nimage)

            g=self.gprior.sample1d(1)

            imd1,imd2=self._make_pair(g[0])

            ares1 = self._run_admom(imd1['image'], imd1['image_skyvar'])
            if ares1['whyflag'] != 0:
                print 'bad1'
                continue

            psfres1 = self._run_admom(imd1['psf_image'], imd1['psf_skyvar'])
            if psfres1['whyflag'] != 0:
                print 'badpsf1'
                continue

            ares2 = self._run_admom(imd2['image'], imd2['image_skyvar'])
            if ares2['whyflag'] != 0:
                print 'bad2'
                continue

            psfres2 = self._run_admom(imd2['psf_image'], imd2['psf_skyvar'])
            if psfres2['whyflag'] != 0:
                print 'badpsf2'
                continue

            gvals[i] = g

            for ares,pres in zip([ares1,ares2],[psfres1,psfres2]):
                T=ares['Irr']+ares['Icc']
                Tpsf=pres['Irr'] + pres['Icc']
                e1,e2,R,flags=admom.correct(T, ares['e1'], ares['e2'],ares['a4'],
                                            Tpsf, pres['e1'], pres['e2'], pres['a4'])
                if flags != 0:
                    raise ValueError("compea4 failed")

                e1vals[j] = e1
                e2vals[j] = e2
                j += 1
            

            i += 1

        data=numpy.zeros(e1vals.size, dtype=[('e1','f8'),('e2','f8')])
        data['e1'] = e1vals
        data['e2'] = e2vals
        self._data=data

        self.calc_shear()
示例#6
0
    def _measure_gals_admom(self):
        import admom
        nbin=self.im_stacks.size

        Tpsf=self.psf_ares['Irr'] + self.psf_ares['Icc']
        e1p=self.psf_ares['e1']
        e2p=self.psf_ares['e2']
        a4p=self.psf_ares['a4']

        st=zeros(nbin, dtype=[('s2n','f8'),
                              ('e1','f8'),
                              ('e1err','f8'),
                              ('e2','f8'),
                              ('e2err','f8'),
                              ('T','f8'),
                              ('R','f8')])
        for i in xrange(nbin):
            print '-'*70
            s2n_min=self.im_stacks['s2n_min'][i]
            s2n_max=self.im_stacks['s2n_max'][i]

            print 's2n: [%.2f,%.2f]' % (s2n_min,s2n_max)


            im_real=self.im_stacks['images_real'][i,:,:]
            im_imag=self.im_stacks['images_imag'][i,:,:]

            imc = self._make_complex_image(im_real, im_imag)
            im=self._make_cspace_image(imc)
            if False and i==3:
                import images
                images.multiview(im)

            skysig=sqrt(self.im_stacks['skyvar'][i])

            cen=array(im.shape)/2.
            ares = admom.admom(im, cen[0], cen[1],
                               sigsky=skysig,
                               guess=4.0,
                               nsub=self.nsub)
            T=ares['Irr']+ares['Icc']

            corr=admom.correct(T, ares['e1'], ares['e2'],ares['a4'],
                               Tpsf, e1p, e2p, a4p)
            
            e1,e2,R,flags=corr
            uncer=ares['uncer']/R

            err2=( 0.32**2 + uncer**2)/self.im_stacks['nstack'][i]
            err=sqrt(err2)

            mess='e1: %s +/- %s e2: %s +/- %s R: %s  flags: %s'
            mess=mess % (e1,err,e2,err,R,flags)
            print mess

            st['s2n'][i] = (s2n_min+s2n_max)/2.
            st['e1'][i] = e1
            st['e1err'][i] = err
            st['e2'][i] = e2
            st['e2err'][i] = err
            st['R'][i] = R
            st['T'][i] = T

        self._admom_shear = st