Ejemplo n.º 1
0
def test_sloshing():

    tmpdir = tempfile.mkdtemp()
    curdir = os.getcwd()
    os.chdir(tmpdir)

    prng = RandomState(0x4d3d3d3)

    ds = data_dir_load(gslr)
    A = 2000.
    exp_time = 1.0e4
    redshift = 0.1

    sphere = ds.sphere("c", (0.1, "Mpc"))
    sphere.set_field_parameter("X_H", 0.75)

    thermal_model = ThermalSourceModel("apec", 0.1, 11.0, 10000, Zmet=0.3,
                                       thermal_broad=False, prng=prng)
    photons1 = PhotonList.from_data_source(sphere, redshift, A, exp_time,
                                           thermal_model)

    return_photons = return_data(photons1.photons)

    nphots = 0
    for i in range(4):
        phots = PhotonList.from_data_source(sphere, redshift, A, 0.25*exp_time,
                                            thermal_model)

        phots.write_h5_file("split_photons_%d.h5" % i)
        nphots += len(phots.photons["energy"])

    merge_files(["split_photons_%d.h5" % i for i in range(4)],
                "merged_photons.h5", add_exposure_times=True,
                overwrite=True)

    merged_photons = PhotonList.from_file("merged_photons.h5")
    assert len(merged_photons.photons["energy"]) == nphots
    assert merged_photons.parameters["fid_exp_time"] == exp_time

    events1 = photons1.project_photons([1.0,-0.5,0.2], [30., 45.],
                                       absorb_model="tbabs", nH=0.1, prng=prng)

    return_events = return_data(events1.events)

    events1.write_spectrum("test_events_spec.fits", 0.2, 10.0, 2000)

    f = pyfits.open("test_events_spec.fits")
    return_spec = return_data(f["SPECTRUM"].data["COUNTS"])
    f.close()

    events1.write_fits_image("test_events_img.fits", (20.0, "arcmin"), 
                             1024)

    f = pyfits.open("test_events_img.fits")
    return_img = return_data(f[0].data)
    f.close()

    tests = [GenericArrayTest(ds, return_photons, args=["photons"]),
             GenericArrayTest(ds, return_events, args=["events"]),
             GenericArrayTest(ds, return_spec, args=["spec"]),
             GenericArrayTest(ds, return_img, args=["img"])]

    for test in tests:
        test_sloshing.__name__ = test.description
        yield test

    photons1.write_h5_file("test_photons.h5")
    events1.write_h5_file("test_events.h5")
    events1.write_fits_file("test_events.fits", 20.0, 1024)

    photons2 = PhotonList.from_file("test_photons.h5")
    events2 = EventList.from_h5_file("test_events.h5")
    events3 = EventList.from_fits_file("test_events.fits")

    for k in photons1.keys():
        if k == "energy":
            arr1 = uconcatenate(photons1[k])
            arr2 = uconcatenate(photons2[k])
        else:
            arr1 = photons1[k]
            arr2 = photons2[k]
        assert_array_equal(arr1, arr2)
    for k in events2.keys():
        assert_array_equal(events1[k], events2[k])
        assert_allclose(events2[k], events3[k], rtol=1.0e-6)

    nevents = 0

    for i in range(4):
        events = photons1.project_photons([1.0, -0.5, 0.2], [30., 45.],
                                          absorb_model="tbabs", nH=0.1,
                                          prng=prng)
        events.write_h5_file("split_events_%d.h5" % i)
        nevents += len(events["xsky"])

    merge_files(["split_events_%d.h5" % i for i in range(4)],
                "merged_events.h5", add_exposure_times=True,
                overwrite=True)

    merged_events = EventList.from_h5_file("merged_events.h5")
    assert len(merged_events["xsky"]) == nevents
    assert merged_events.parameters["exp_time"] == 4.0*exp_time

    os.chdir(curdir)
    shutil.rmtree(tmpdir)
Ejemplo n.º 2
0
def test_sloshing():

    tmpdir = tempfile.mkdtemp()
    curdir = os.getcwd()
    os.chdir(tmpdir)

    prng = RandomState(0x4d3d3d3)

    ds = data_dir_load(gslr)
    A = 2000.
    exp_time = 1.0e4
    redshift = 0.1

    apec_model = TableApecModel(0.1, 11.0, 10000)
    tbabs_model = TBabsModel(0.1)

    sphere = ds.sphere("c", (0.1, "Mpc"))
    sphere.set_field_parameter("X_H", 0.75)

    thermal_model = ThermalSourceModel(apec_model, Zmet=0.3, prng=prng)
    photons1 = PhotonList.from_data_source(sphere, redshift, A, exp_time,
                                           thermal_model)

    return_photons = return_data(photons1.photons)

    tests = [GenericArrayTest(ds, return_photons, args=["photons"])]

    for a, r, i in zip(arfs, rmfs, instruments):
        arf = AuxiliaryResponseFile(a, rmffile=r)
        events1 = photons1.project_photons([1.0, -0.5, 0.2],
                                           area_new=arf.max_area,
                                           absorb_model=tbabs_model,
                                           prng=prng)
        events1["xsky"]
        events1 = i(events1, rebin=False, convolve_psf=False, prng=prng)
        return_events = return_data(events1.events)

        tests.append(GenericArrayTest(ds, return_events, args=[a]))

    for test in tests:
        test_sloshing.__name__ = test.description
        yield test

    photons1.write_h5_file("test_photons.h5")
    events1.write_h5_file("test_events.h5")

    photons2 = PhotonList.from_file("test_photons.h5")
    events2 = EventList.from_h5_file("test_events.h5")

    for k in photons1.keys():
        if k == "Energy":
            arr1 = uconcatenate(photons1[k])
            arr2 = uconcatenate(photons2[k])
        else:
            arr1 = photons1[k]
            arr2 = photons2[k]
        yield assert_array_equal, arr1, arr2
    for k in events1.keys():
        yield assert_array_equal, events1[k], events2[k]

    nevents = 0

    for i in range(4):
        events = photons1.project_photons([1.0, -0.5, 0.2],
                                          exp_time_new=0.25 * exp_time,
                                          absorb_model=tbabs_model,
                                          prng=prng)
        events.write_h5_file("split_events_%d.h5" % i)
        nevents += len(events["xsky"])

    merge_files(["split_events_%d.h5" % i for i in range(4)],
                "merged_events.h5",
                add_exposure_times=True,
                clobber=True)

    merged_events = EventList.from_h5_file("merged_events.h5")
    assert len(merged_events["xsky"]) == nevents
    assert merged_events.parameters["ExposureTime"] == exp_time

    os.chdir(curdir)
    shutil.rmtree(tmpdir)