def test_save_resid_dataimg_fits(tmp_path): """Residual, DataIMG, FITS""" from sherpa.astro.io import read_image y, x = np.mgrid[10:12, 20:23] x = x.flatten() y = y.flatten() z = (x - 11)**2 + (y - 21)**2 ui.load_arrays(1, x, y, z, (2, 3), ui.DataIMG) ui.set_source(1, ui.const2d.cmdl) cmdl.c0 = 100 out = tmp_path / "resid" outfile = str(out) ui.save_resid(outfile) ans = read_image(outfile) assert ans.shape == (2, 3) # Is this correct? yl, xl = np.mgrid[1:3, 1:4] xl = xl.flatten() yl = yl.flatten() assert ans.x0 == pytest.approx(xl) assert ans.x1 == pytest.approx(yl) assert ans.y == pytest.approx(z - 100)
def test_save_resid_datapha_fits(tmp_path): """Residual, DataPHA, FITS""" from sherpa.astro.io import read_table_blocks ui.load_arrays(1, [1, 2], [5, 10], ui.DataPHA) # we need a response egrid = np.asarray([0.1, 0.2, 0.4]) elo = egrid[:-1] ehi = egrid[1:] rmf = create_delta_rmf(elo, ehi, e_min=elo, e_max=ehi) ui.set_rmf(rmf) yarf = np.asarray([10, 20]) arf = create_arf(elo, ehi, yarf) ui.set_arf(arf) ui.set_source(ui.const1d.cmdl) cmdl.c0 = 2 out = tmp_path / 'resid.out' outfile = str(out) ui.save_resid(outfile) ans = read_table_blocks(outfile) blocks = ans[1] assert len(blocks) == 2 check_table(blocks[2], {'X': [0.15, 0.3], 'RESID': [30, 10]})
def test_save_resid_datapha(tmp_path): """Residual, DataPHA, ASCII""" ui.load_arrays(1, [1, 2], [5, 10], ui.DataPHA) # we need a response egrid = np.asarray([0.1, 0.2, 0.4]) elo = egrid[:-1] ehi = egrid[1:] rmf = create_delta_rmf(elo, ehi, e_min=elo, e_max=ehi) ui.set_rmf(rmf) yarf = np.asarray([10, 20]) arf = create_arf(elo, ehi, yarf) ui.set_arf(arf) ui.set_source(ui.const1d.cmdl) cmdl.c0 = 2 out = tmp_path / 'resid.out' outfile = str(out) ui.save_resid(outfile, ascii=True) cts = out.read_text() check_output(cts, ['X', 'RESID'], [[0.15, 30], [0.3, 10]])
def test_save_resid_data1d(tmp_path): """Residual, Data1D, ASCII""" ui.load_arrays(1, [100, 200], [20, 230], ui.Data1D) ui.set_source(ui.const1d.cmdl) cmdl.c0 = 220 out = tmp_path / 'resid.out' outfile = str(out) ui.save_resid(outfile, ascii=True) cts = out.read_text() check_output(cts, ['X', 'RESID'], [[100, -200], [200, 10]])
def test_save_resid_data1d_fits(tmp_path): """Residual, Data1D, FITS""" from sherpa.astro.io import read_table_blocks ui.load_arrays(1, [100, 200], [20, 230], ui.Data1D) ui.set_source(ui.const1d.cmdl) cmdl.c0 = 220 out = tmp_path / 'resid.out' outfile = str(out) ui.save_resid(outfile) ans = read_table_blocks(outfile) blocks = ans[1] assert len(blocks) == 2 check_table(blocks[2], {'X': [100, 200], 'RESID': [-200, 10]})
def test_save_resid_dataimg(tmp_path): """Residual, DataIMG, ASCII""" # Can not write out an ASCII image with crates from sherpa.astro.io import backend if backend.__name__ == 'sherpa.astro.io.crates_backend': pytest.skip('ASCII not supported for images with pycrates') y, x = np.mgrid[10:12, 20:23] x = x.flatten() y = y.flatten() z = (x - 11)**2 + (y - 21)**2 ui.load_arrays(1, x, y, z, (2, 3), ui.DataIMG) ui.set_source(1, ui.const2d.cmdl) cmdl.c0 = 10 out = tmp_path / "resid" outfile = str(out) ui.save_resid(outfile, ascii=True) cts = out.read_text() expected = "\n".join([str(zz - 10) for zz in z]) + "\n" assert cts == expected