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
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
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
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
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
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
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