Beispiel #1
0
    def _fit_simple_max(self, obs, model, guesser):
        from ngmix.fitting import MaxSimple

        max_pars = self['max_pars']
        if max_pars['method'] == 'lm':
            return self._fit_simple_lm(obs, model, guesser)

        prior = self['search_prior']
        #print("search prior:",prior)

        fitter = MaxSimple(obs,
                           model,
                           prior=prior,
                           use_logpars=self['use_logpars'],
                           **max_pars)

        for i in xrange(max_pars['ntry']):
            guess = guesser(prior=prior)
            print_pars(guess, front='    max_guess: ')

            fitter.run_max(guess, **max_pars)
            res = fitter.get_result()
            if res['flags'] == 0:
                break
        return fitter
Beispiel #2
0
    def _go_nm(self, ntry=1):
        from ngmix.fitting import MaxSimple

        for i in xrange(ntry):
            guess = self.guesser()
            fitter = MaxSimple(self.obs,
                               self.model,
                               method='Nelder-Mead',
                               use_logpars=self.use_logpars,
                               prior=self.prior)

            fitter.run_max(guess, **self.send_pars)

            res = fitter.get_result()
            if res['flags'] == 0:
                break

        self.fitter = fitter
Beispiel #3
0
    def _fit_psf_max(self, obs):
        from ngmix.fitting import MaxSimple, LMSimple
        assert self['psf_model'] in ["turb",
                                     "gauss"], "gauss,turb only for now"

        max_pars = self['psf_max_pars']

        if self['psf_method'] == 'Nelder-Mead':
            fitter = MaxSimple(obs,
                               self['psf_model'],
                               method=self['psf_method'])
        else:
            fitter = LMSimple(obs, self['psf_model'], lm_pars=max_pars)

        Tguess = 2 * self['psf_sigma_guess']**2
        Fguess = obs.image.sum()
        guess0 = array([0.0, 0.0, 0.0, 0.0, Tguess, Fguess])

        for i in xrange(self['psf_ntry']):
            guess = guess0.copy()
            guess[0:0 + 2] += 0.01 * srandu(2)
            guess[2:2 + 2] += 0.1 * srandu(2)
            guess[4] *= (1.0 + 0.1 * srandu())
            guess[5] *= (1.0 + 0.1 * srandu())

            print_pars(guess, front='    guess: ')

            if self['psf_method'] == 'lm':
                fitter.run_max(guess)
            else:
                fitter.run_max(guess, **max_pars)

            res = fitter.get_result()
            if res['flags'] == 0:
                print("    max_nfev:", res['nfev'])
                break

        return fitter