예제 #1
0
    def process_nlsolver(self):
        wlog("Using jarvis solver")
        c=self['filternum']
        self.set_admom()

        ntrials = len(self['psf']['trials'])

        chi2arr=zeros(ntrials) + 1.e9
        gmlist=[]

        for i,trial in enumerate(self['psf']['trials']):
            ngauss=trial['ngauss']
            if ngauss==3:
                prior,width = self.get_prior_turb(trial)
            elif ngauss==2:
                prior,width = self.get_prior_2generic(trial)
            else:
                raise ValueError("only have ngauss in [2,3] now")

            #prior,width = self.get_prior_2psfield(trial)
            #prior,width = self.get_prior_test(trial)
            #prior,width = self.get_prior_2generic(trial)

            if self['verbose']:
                print_pars(prior,front="guess: ")
            # kludge using skysig=1 for now
            maxiter=2000
            psf=None
            gm=gmix_image.gmix_nlsolve.GMixCoellipSolver(self.psf, prior, 1., maxiter, psf, False)

            success=gm.get_success()
            if not success:
                raise ValueError("error")

            chi2per=gm.get_chi2per()

            # kludge
            chi2per /= self['skysig']**2

            chi2arr[i] = chi2per
            if self['verbose']:
                popt = gm.get_pars()
                cov=gm.get_pcov()
                perr=sqrt(diag(cov))

                print_pars(popt,front="pars:  ")
                # kludge
                perr *= self['skysig']
                print_pars(perr,front="perr:  ")
                wlog("chi2/pdeg:",chi2arr[i])

            gmlist.append(gm)

        w=chi2arr.argmin()
        self.gm = gmlist[w]
        wlog('w:',w)

        if self['verbose']:
            print_pars(chi2arr,front='chi2/deg: ')

            wlog("\n")

            print_pars(gm.get_pars(),front='popt: ')
            cov=gm.get_pcov()
            perr=sqrt(diag(cov))
            # kludge
            perr *= self['skysig']
            print_pars(perr,front='perr: ')
예제 #2
0
    def process(self):
        c=self['filternum']
        self.set_admom()

        ntrials = len(self['psf']['trials'])

        chi2arr=zeros(ntrials) + 1.e9
        gmlist=[]

        for i,trial in enumerate(self['psf']['trials']):
            ngauss=trial['ngauss']
            if ngauss==3:
                prior,width = self.get_prior_turb(trial)
            elif ngauss==2:
                prior,width = self.get_prior_2generic(trial)
            else:
                raise ValueError("only have ngauss in [2,3] now")
            #prior,width = self.get_prior_2psfield(trial)
            #prior,width = self.get_prior_test(trial)

            if self['verbose']:
                print_pars(prior,front="guess: ")
            gm = gmix_image.GMixFitCoellip(self.psf, self['skysig'],
                                           prior,width, verbose=False)
            #gm = gmix_image.gmix_fit.GMixFitCoellipNoPrior(self.psf, self['skysig'],
            #                                               prior, verbose=False)

            if gm.flags != 0:
                gmix_image.printflags("flags:",gm.flags)
                raise ValueError("error")
            chi2arr[i] = gm.get_chi2per(gm.popt)
            if self['verbose']:
                print_pars(gm.popt,front="pars:  ")
                print_pars(gm.perr,front="perr:  ")
                wlog("chi2/pdeg:",chi2arr[i])

            gmlist.append(gm)

        w=chi2arr.argmin()
        self.gm = gmlist[w]
        wlog('w:',w)

        if self['verbose']:
            print_pars(chi2arr,front='chi2/deg: ')

            wlog("\n")

            print_pars(gm.popt,front='popt: ')
            print_pars(gm.perr,front='perr: ')
            #wlog("s2n:",s2n)
            wlog("numiter gmix:",gm.numiter)
            ngauss=(len(gm.popt)-4)/2