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_xspec_expression(): """Check we can enforce XSPEC expressions""" from sherpa.astro import xspec # pick an additive and multiplicative model a1 = xspec.XSpowerlaw() m1 = xspec.XSwabs() m = 2 * (a1 + m1) assert a1.ndim == 1 assert m1.ndim == 1 assert m.ndim == 1
def test_instrument_model(make_data_path): """Check the full response model""" from sherpa.astro import xspec s = Session() s.load_pha(make_data_path('3c273.pi')) a1 = xspec.XSpowerlaw() m1 = xspec.XSwabs() s.set_source(m1 * a1) src = s.get_source() mdl = s.get_model() assert src.ndim == 1 assert mdl.ndim == 1
def setup(make_data_path): from sherpa.astro.io import read_pha from sherpa.astro import xspec infile = make_data_path("9774.pi") data = read_pha(infile) data.notice(0.3, 7.0) # Change the exposure time to make the fitted amplitude # > 1 # data.exposure = 1 # Use the wabs model because it is unlikely to change # (as scientifically it is no-longer useful). The problem # with using something like the phabs model is that # changes to that model in XSPEC could change the results # here. # # We fit the log of the nH since this makes the numbers # a bit closer to O(1), and so checking should be easier. # abs1 = xspec.XSwabs('abs1') p1 = PowLaw1D('p1') factor = Const1D('factor') factor.integrate = False model = abs1 * p1 + 0 * factor factor.c0 = 0 abs1.nh = 10**factor.c0 # Ensure the nh limits are honoured by factor (upper limit only). # If you don't do this then the fit can fail because a value # outside the abs1.nh but within factor.c0 can be picked. # factor.c0.max = numpy.log10(abs1.nh.max) rsp = Response1D(data) return {'data': data, 'model': rsp(model)}