def basic_img(make_data_path): """Create a basic image data set/setup""" ui.set_default_id(2) ui.load_image(make_data_path('img.fits')) ui.set_source(ui.gauss2d.gmdl) ui.guess()
def test_get_stat_info(self): fname_3c273 = self.make_path("3c273.pi") ui.load_pha(fname_3c273) src = ui.xspowerlaw.pl ui.set_source(src) ui.guess('pl') ui.set_stat('wstat') stat_info = ui.get_stat_info()[0] assert stat_info.dof == 44 assert stat_info.numpoints == 46
def test_fit_profile(model, stat, pars, reset_seed, clean_astro_ui): """Regression test simple 1D fits""" setup_data1d_fit() ui.set_source(model('mdl')) ui.guess() ui.fit() assert ui.calc_stat() == pytest.approx(stat) assert np.asarray(mdl.thawedpars) == pytest.approx(np.asarray(pars))
filename = 'skymap_ex.fits' nomposstr = '05h34m31.94s 22d00m52.2s' header = fits.getheader(filename) proj = wcs.Projection(header) xc, yc = float(header['NAXIS1']) / 2., float(header['NAXIS2']) / 2. ui.load_image(filename) ui.notice2d('circle({0}, {1}, {2})'.format(xc, yc, float(header['NAXIS2']) / 4.)) ui.set_source(ui.gauss2d.g1 + ui.gauss2d.g2) g1.xpos = xc g1.ypos = yc g2.fwhm = g1.fwhm = 3. ui.link(g2.xpos, g1.xpos) ui.link(g2.ypos, g1.ypos) g2.ampl = 50. g1.ampl = 50. ui.guess() ui.fit() ui.image_fit() ui.covar() conf = ui.get_covar_results() conf_dict = dict([(n,(v, l, h)) for n,v,l,h in zip(conf.parnames, conf.parvals, conf.parmins, conf.parmaxes)]) x, y = proj.toworld((conf_dict['g1.xpos'][0], conf_dict['g1.ypos'][0])) xmin, ymin = proj.toworld((conf_dict['g1.xpos'][0] + conf_dict['g1.xpos'][1], conf_dict['g1.ypos'][0] + conf_dict['g1.ypos'][1])) xmax, ymax = proj.toworld((conf_dict['g1.xpos'][0] + conf_dict['g1.xpos'][2], conf_dict['g1.ypos'][0] + conf_dict['g1.ypos'][2])) nompos = positions.str2pos(nomposstr, proj) print('{0} ({1}-{2}) vs {3}'.format(x, xmin, xmax, nompos[0][0][0])) print('{0} ({1}-{2}) vs {3}'.format(y, ymin, ymax, nompos[0][0][1]))
nomposstr = '05h34m31.94s 22d00m52.2s' header = fits.getheader(filename) proj = wcs.Projection(header) xc, yc = float(header['NAXIS1']) / 2., float(header['NAXIS2']) / 2. ui.load_image(filename) ui.notice2d('circle({0}, {1}, {2})'.format(xc, yc, float(header['NAXIS2']) / 4.)) ui.set_source(ui.gauss2d.g1 + ui.gauss2d.g2) g1.xpos = xc g1.ypos = yc g2.fwhm = g1.fwhm = 3. ui.link(g2.xpos, g1.xpos) ui.link(g2.ypos, g1.ypos) g2.ampl = 50. g1.ampl = 50. ui.guess() ui.fit() ui.image_fit() ui.covar() conf = ui.get_covar_results() conf_dict = dict([(n, (v, l, h)) for n, v, l, h in zip( conf.parnames, conf.parvals, conf.parmins, conf.parmaxes)]) x, y = proj.toworld((conf_dict['g1.xpos'][0], conf_dict['g1.ypos'][0])) xmin, ymin = proj.toworld((conf_dict['g1.xpos'][0] + conf_dict['g1.xpos'][1], conf_dict['g1.ypos'][0] + conf_dict['g1.ypos'][1])) xmax, ymax = proj.toworld((conf_dict['g1.xpos'][0] + conf_dict['g1.xpos'][2], conf_dict['g1.ypos'][0] + conf_dict['g1.ypos'][2])) nompos = positions.str2pos(nomposstr, proj) print('{0} ({1}-{2}) vs {3}'.format(x, xmin, xmax, nompos[0][0][0])) print('{0} ({1}-{2}) vs {3}'.format(y, ymin, ymax, nompos[0][0][1]))
def simulate_null_images(img_file: str, psf_file: str, n_null_sims: int, no_core: bool = False, mcmciter: int = 5000, **kwargs) -> None: """ Simulates a specified number of baseline images for a given input observation and a psf file :param img_file: Path to the input image file :param psf_file: Path to the psf image file :param n_null_sims: Number of baseline replicates to be simulated :param no_core: Setting this to True will only generate baseline replicates with a flat background while the default value includes a point source at the location of the core :param mcmciter: The number of MCMC samples to draw for simulating the baselines """ print("Creating the null file") clean() set_stat("cstat") set_method("simplex") load_image(img_file) load_psf("mypsf", psf_file) set_psf(mypsf) if no_core: set_model(const2d.c0) set_par(c0.c0, min=0) else: set_model(gauss2d.q1 + const2d.c0) set_par(c0.c0, min=0) # set_par(q1.fwhm,max=0.5) guess(q1) fit() results = get_fit_results() save("core_source_fit.save", clobber=True) save_source("null_q1_c1.fits", clobber=True) covar() if no_core: for i in range(n_null_sims): fake() save_image("sim_null_{}.fits".format(i), clobber=True) clean() return normgauss1d.g1 g1.pos = q1.fwhm g1.fwhm = get_covar_results().parmaxes[0] # check if there is a valid upper bound. print(get_covar_results()) if (get_covar_results().parmaxes[0] is None or get_covar_results().parmins[1] is None or get_covar_results().parmins[0] is None): for i in range(n_null_sims): fake() save_image("sim_null_{}.fits".format(i), clobber=True) clean() return # if not go for the regular set_prior(q1.fwhm, g1) set_sampler_opt("defaultprior", False) set_sampler_opt("priorshape", [True, False, False, False, False]) set_sampler_opt("originalscale", [True, True, True, True, True]) if mcmciter < n_null_sims * 100: mcmciter = n_null_sims * 100 # the following code throws an error sometimes #bug try: stats, accept, params = get_draws(1, niter=mcmciter) except: params = [np.repeat(q1.fwhm.val, mcmciter)] # print('Simulating the null files') for i in range(n_null_sims): set_par(q1.fwhm, params[0][(i + 1) * 100 - 1]) fake() save_image("sim_null_{}.fits".format(i), clobber=True) save_all(outfile="lira_input_baseline_sim.log", clobber=True) clean()
import sherpa.astro.ui as sau sau.load_pha("3c273.pi") sau.set_source(sau.powlaw1d.p1) sau.guess(p1) sau.set_stat("wstat") sau.fit() stats = sau.get_stat_info()