def setup_two(make_data_path): from sherpa.astro.io import read_pha, read_arf, read_rmf from sherpa.astro import xspec abs1 = xspec.XSphabs('abs1') p1 = PowLaw1D('p1') model = abs1 * p1 * 1e-4 pi2278 = make_data_path("pi2278.fits") pi2286 = make_data_path("pi2286.fits") data_pi2278 = read_pha(pi2278) data_pi2286 = read_pha(pi2286) data_pi2278.set_rmf(read_rmf(make_data_path('rmf2278.fits'))) data_pi2278.set_arf(read_arf(make_data_path('arf2278.fits'))) data_pi2286.set_rmf(read_rmf(make_data_path('rmf2286.fits'))) data_pi2286.set_arf(read_arf(make_data_path('arf2286.fits'))) rsp_pi2278 = Response1D(data_pi2278) rsp_pi2286 = Response1D(data_pi2286) return { 'data_pi2278': data_pi2278, 'data_pi2286': data_pi2286, 'model_pi2278': rsp_pi2278(model), 'model_pi2286': rsp_pi2286(model) }
def test_read_arf_fails_rmf(make_data_path): """Just check in we can't read in a RNF as an ARF.""" if backend == 'pyfits': emsg = ' does not appear to be an ARF' elif backend == 'crates': emsg = "Required column 'SPECRESP' not found in " else: assert False, "Internal error: unknown backend {}".format(backend) infile = make_data_path(RMFFILE) with pytest.raises(IOErr) as excinfo: io.read_arf(infile) assert emsg in str(excinfo.value)
def test_read_arf_fails_rmf(make_data_path): """Just check in we can't read in a RNF as an ARF.""" if backend == 'pyfits': emsg = ' does not appear to be an ARF' elif backend == 'crates': emsg = "Required column 'SPECRESP' not found in " else: assert False, "Internal error: unknown backend {}".format(backend) infile = make_data_path(RMFFILE) with pytest.raises(IOErr) as excinfo: io.read_arf(infile) assert emsg in str(excinfo.value)
def test_read_arf_fails_pha(make_data_path): """Just check in we can't read in a PHA file as an ARF.""" if backend == 'pyfits': emsg = ' does not appear to be an ARF' elif backend == 'crates': emsg = " is not a filename or ARFCrate obj" else: assert False, "Internal error: unknown backend {}".format(backend) infile = make_data_path(PHAFILE) with pytest.raises(IOErr) as excinfo: io.read_arf(infile) assert emsg in str(excinfo.value)
def test_read_arf_fails_pha(make_data_path): """Just check in we can't read in a PHA file as an ARF.""" if backend == 'pyfits': emsg = ' does not appear to be an ARF' elif backend == 'crates': emsg = " is not a filename or ARFCrate obj" else: assert False, "Internal error: unknown backend {}".format(backend) infile = make_data_path(PHAFILE) with pytest.raises(IOErr) as excinfo: io.read_arf(infile) assert emsg in str(excinfo.value)
def test_read_arf_fails_pha(make_data_path): """Just check in we can't read in a PHA file as an ARF.""" if backend_is("pyfits"): emsg = " does not appear to be an ARF" elif backend_is("crates"): emsg = "Required column 'ENERG_LO' not found in " else: assert False, f"Internal error: unknown backend {io.backend}" infile = make_data_path(PHAFILE) with pytest.raises(IOErr) as excinfo: io.read_arf(infile) assert emsg in str(excinfo.value)
def test_read_arf(make_data_path, is_known_warning): """Can we read in a Swift ARF.""" infile = make_data_path(ARFFILE) with warnings.catch_warnings(record=True) as ws: warnings.simplefilter("always") arf = io.read_arf(infile) validate_replacement_warning(ws, 'ARF', infile, is_known_warning) assert isinstance(arf, DataARF) nbins = 2400 # Expect the upper edge of bin j to equal the lower # edge of bin j + 1. # assert len(arf.energ_lo) == nbins assert_allclose(arf.energ_lo[1:], arf.energ_hi[:-1]) assert_allclose(arf.energ_lo[0], EMIN) assert_allclose(arf.energ_hi[0], 0.005) assert_allclose(arf.energ_lo[-1], 11.995) assert_allclose(arf.energ_hi[-1], 12.0) # Rather than check each element, use some simple summary # statistics. assert len(arf.specresp) == nbins assert_allclose(arf.specresp.min(), 0.1506345272064209) assert_allclose(arf.specresp.max(), 145.38259887695312) assert_allclose(arf.specresp.sum(), 178696.1007297188) assert np.argmax(arf.specresp) == 309 for field in ['bin_lo', 'bin_hi', 'exposure']: assert getattr(arf, field) is None
def setup_bkg(make_data_path): from sherpa.astro.io import read_pha, read_arf, read_rmf from sherpa.astro import xspec infile = make_data_path("9774_bg.pi") bkg = read_pha(infile) bkg.exposure = 1 arf = read_arf(make_data_path('9774.arf')) rmf = read_rmf(make_data_path('9774.rmf')) bkg.set_arf(arf) bkg.set_rmf(rmf) bkg.set_analysis('energy') bkg.notice(0.5, 7.0) # We stay with a linear scale for the absorption model # here as the values don't seem to go below 0.1. # abs1 = xspec.XSwabs('abs1') p1 = PowLaw1D('p1') model = abs1 * p1 p1.ampl = 1e-4 rsp = Response1D(bkg) return {'bkg': bkg, 'model': rsp(model)}
def test_read_arf(make_data_path): """Can we read in a Swift ARF.""" infile = make_data_path(ARFFILE) with warnings.catch_warnings(record=True) as ws: warnings.simplefilter("always") arf = io.read_arf(infile) validate_replacement_warning(ws, 'ARF', infile) assert isinstance(arf, DataARF) nbins = 2400 # Expect the upper edge of bin j to equal the lower # edge of bin j + 1. # assert len(arf.energ_lo) == nbins assert_allclose(arf.energ_lo[1:], arf.energ_hi[:-1]) assert_allclose(arf.energ_lo[0], EMIN) assert_allclose(arf.energ_hi[0], 0.005) assert_allclose(arf.energ_lo[-1], 11.995) assert_allclose(arf.energ_hi[-1], 12.0) # Rather than check each element, use some simple summary # statistics. assert len(arf.specresp) == nbins assert_allclose(arf.specresp.min(), 0.1506345272064209) assert_allclose(arf.specresp.max(), 145.38259887695312) assert_allclose(arf.specresp.sum(), 178696.1007297188) assert np.argmax(arf.specresp) == 309 for field in ['bin_lo', 'bin_hi', 'exposure']: assert getattr(arf, field) is None
def test_read_arf(make_data_path): """Can we read in a Swift ARF.""" infile = make_data_path(ARFFILE) arf = io.read_arf(infile) assert isinstance(arf, DataARF) nbins = 2400 # Expect the upper edge of bin j to equal the lower # edge of bin j + 1. # assert len(arf.energ_lo) == nbins assert_allclose(arf.energ_lo[1:], arf.energ_hi[:-1]) assert_allclose(arf.energ_lo[0], 0.0) assert_allclose(arf.energ_hi[0], 0.005) assert_allclose(arf.energ_lo[-1], 11.995) assert_allclose(arf.energ_hi[-1], 12.0) # Rather than check each element, use some simple summary # statistics. assert len(arf.specresp) == nbins assert_allclose(arf.specresp.min(), 0.1506345272064209) assert_allclose(arf.specresp.max(), 145.38259887695312) assert_allclose(arf.specresp.sum(), 178696.1007297188) assert np.argmax(arf.specresp) == 309 for field in ['bin_lo', 'bin_hi', 'exposure']: assert getattr(arf, field) is None
def test_arf_real(make_data_path, override_plot_backend): """Read in an ARF""" from sherpa.astro.io import read_arf d = read_arf(make_data_path('9774.arf')) d.name = '9774.arf' r = d._repr_html_() check(r, 'ARF', '9774.arf', 'Exposure', nmeta=6) assert '<div class="dataname">Identifier</div><div class="dataval">9774.arf</div>' in r assert '<div class="dataname">Exposure</div><div class="dataval">75141.2 s</div>' in r assert '<div class="dataname">Number of bins</div><div class="dataval">1078</div>' in r assert '<div class="dataname">Energy range</div><div class="dataval">0.22 - 11 keV, bin size 0.0100002 keV</div>' in r assert '<div class="dataname">Area range</div><div class="dataval">0.533159 - 681.944 cm<sup>2</sup></div>' in r assert '<div class="dataname">Object</div><div class="dataval">3C 186</div>' in r assert '<div class="dataname">Observation date</div><div class="dataval">2007-12-06T05:30:00</div>' in r
def test_1209_response(mode, make_data_path): """Do we pick up the header keywords from the response? This is related to issue #1209 """ # We could set up channels and counts, but let's not. # d = DataPHA("dummy", None, None) assert d.header["TELESCOP"] == "none" assert d.header["INSTRUME"] == "none" assert d.header["FILTER"] == "none" # We do not care about the warning messages here from # ENERG_LO replacement. # if "arf" in mode: infile = make_data_path(ARFFILE) with warnings.catch_warnings(record=True) as ws: warnings.simplefilter("ignore") arf = io.read_arf(infile) d.set_arf(arf) if "rmf" in mode: infile = make_data_path(RMFFILE) with warnings.catch_warnings(record=True) as ws: warnings.simplefilter("ignore") rmf = io.read_rmf(infile) d.set_rmf(rmf) # The PHA file contains a FILTER keyword but the responses do not. # assert d.header["TELESCOP"] == "SWIFT" assert d.header["INSTRUME"] == "XRT" assert d.header["FILTER"] == "none"
print("{}".format(name)) print(repr(eval(name))) print("----------------------------------------") def savefig(name): outfile = os.path.join(savedir, name) plt.savefig(outfile) print("# Created: {}".format(name)) os.chdir('../../../../sherpa-test-data/sherpatest/') from sherpa.astro.io import read_arf, read_rmf arf = read_arf('3c273.arf') rmf = read_rmf('3c273.rmf') dump("rmf.detchans") from sherpa.models.basic import PowLaw1D mdl = PowLaw1D() from sherpa.astro.instrument import RSPModelNoPHA inst = RSPModelNoPHA(arf, rmf, mdl) dump("inst") report("inst") from sherpa.models.model import ArithmeticModel dump("isinstance(inst, ArithmeticModel)") dump("inst.pars")