Example #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
Example #2
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
Example #3
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
Example #4
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
Example #5
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
Example #6
0
    def _fit_simple_max(self, mb_obs_list, model, nm_pars, ntry=1):
        """
        parameters
        ----------
        mb_obs_list: MultiBandObsList
            The observations to fit
        model: string
            model to fit
        params: dict
            from the config file 'me_iter' or 'coadd_iter'
        """

        prior=self['model_pars'][model]['gflat_prior']

        method = 'Nelder-Mead'

        fitter=MaxSimple(mb_obs_list,
                         model,
                         prior=prior,
                         method=method)

        guess=self.guesser(prior=prior)

        for i in xrange(ntry):
            fitter.run_max(guess, **nm_pars)
            res=fitter.get_result()

            errbad=False
            if 'pars_err' in res:
                errmin=res['pars_err'][2:2+3].min()
                errbad = (errmin < 1.0e-8)

            if (ntry > 1) and ( (res['flags'] & EIG_NOTFINITE) != 0 or errbad ):
                # bad covariance matrix, need to get a new guess
                self._print_pars(res['pars'],front='        bad cov at pars')
                if 'pars_err' in res:
                    self._print_pars(res['pars_err'],front='                   perr')
                self.guesser=FromParsGuesser(guess, guess*0.1)
                guess=self.guesser(prior=prior)
                self._print_pars(guess,front='        new guess')
            else:
                break

        return fitter
Example #7
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