Exemplo n.º 1
0
def test_large_kernel(input_dataset):
    """Minimal test of compute_ts_image"""
    kernel = Gaussian2DKernel(100)
    ts_estimator = TSMapEstimator()

    with pytest.raises(ValueError):
        ts_estimator.run(input_dataset, kernel=kernel)
Exemplo n.º 2
0
def test_compute_ts_map_psf(fermi_dataset):
    spatial_model = PointSpatialModel()
    spectral_model = PowerLawSpectralModel(amplitude="1e-22 cm-2 s-1 keV-1")
    model = SkyModel(spatial_model=spatial_model,
                     spectral_model=spectral_model)

    estimator = TSMapEstimator(model=model,
                               kernel_width="1 deg",
                               selection_optional="all")
    result = estimator.run(fermi_dataset)

    assert_allclose(result["ts"].data[0, 29, 29], 835.140605, rtol=1e-2)
    assert_allclose(result["niter"].data[0, 29, 29], 7)
    assert_allclose(result["flux"].data[0, 29, 29], 1.351949e-09, rtol=1e-2)

    assert_allclose(result["flux_err"].data[0, 29, 29],
                    7.93751176e-11,
                    rtol=1e-2)
    assert_allclose(result["flux_errp"].data[0, 29, 29],
                    7.9376134e-11,
                    rtol=1e-2)
    assert_allclose(result["flux_errn"].data[0, 29, 29],
                    7.5180404579e-11,
                    rtol=1e-2)
    assert_allclose(result["flux_ul"].data[0, 29, 29],
                    1.63222157e-10,
                    rtol=1e-2)

    assert result["flux"].unit == u.Unit("cm-2s-1")
    assert result["flux_err"].unit == u.Unit("cm-2s-1")
    assert result["flux_ul"].unit == u.Unit("cm-2s-1")
Exemplo n.º 3
0
def test_compute_ts_map_energy(fermi_dataset):
    spatial_model = PointSpatialModel()
    spectral_model = PowerLawSpectralModel(amplitude="1e-22 cm-2 s-1 keV-1")
    model = SkyModel(spatial_model=spatial_model,
                     spectral_model=spectral_model)

    estimator = TSMapEstimator(
        model=model,
        kernel_width="0.6 deg",
        energy_edges=[10, 100, 1000] * u.GeV,
        sum_over_energy_groups=False,
    )

    result = estimator.run(fermi_dataset)

    assert_allclose(result["ts"].data[:, 29, 29], [804.86171, 16.988756],
                    rtol=1e-2)
    assert_allclose(result["flux"].data[:, 29, 29],
                    [1.233119e-09, 3.590694e-11],
                    rtol=1e-2)
    assert_allclose(result["flux_err"].data[:, 29, 29],
                    [7.382305e-11, 1.338985e-11],
                    rtol=1e-2)
    assert_allclose(result["niter"].data[:, 29, 29], [6, 6])

    energy_axis = result["ts"].geom.axes["energy"]
    assert_allclose(energy_axis.edges.to_value("GeV"), [10, 84.471641, 500],
                    rtol=1e-4)
Exemplo n.º 4
0
def test_compute_ts_map_newton(input_dataset):
    """Minimal test of compute_ts_image"""
    spatial_model = GaussianSpatialModel(sigma="0.1 deg")
    spectral_model = PowerLawSpectralModel(index=2)
    model = SkyModel(spatial_model=spatial_model,
                     spectral_model=spectral_model)

    ts_estimator = TSMapEstimator(model=model,
                                  method="root newton",
                                  threshold=1,
                                  kernel_width="1 deg")
    result = ts_estimator.run(input_dataset)

    assert "root newton" in repr(ts_estimator)
    assert_allclose(result["ts"].data[99, 99], 1714.23, rtol=1e-2)
    assert_allclose(result["niter"].data[99, 99], 0)
    assert_allclose(result["flux"].data[99, 99], 1.02e-09, rtol=1e-2)
    assert_allclose(result["flux_err"].data[99, 99], 3.84e-11, rtol=1e-2)
    assert_allclose(result["flux_ul"].data[99, 99], 1.10e-09, rtol=1e-2)

    assert result["flux"].unit == u.Unit("cm-2s-1")
    assert result["flux_err"].unit == u.Unit("cm-2s-1")
    assert result["flux_ul"].unit == u.Unit("cm-2s-1")

    # Check mask is correctly taken into account
    assert np.isnan(result["ts"].data[30, 40])
Exemplo n.º 5
0
def test_compute_ts_map_downsampled(input_dataset):
    """Minimal test of compute_ts_image"""
    spatial_model = GaussianSpatialModel(sigma="0.11 deg")
    spectral_model = PowerLawSpectralModel(index=2)
    model = SkyModel(spatial_model=spatial_model,
                     spectral_model=spectral_model)

    ts_estimator = TSMapEstimator(model=model,
                                  downsampling_factor=2,
                                  kernel_width="1 deg",
                                  selection_optional=["ul"])
    result = ts_estimator.run(input_dataset)

    assert_allclose(result["ts"].data[0, 99, 99], 1661.49, rtol=1e-2)
    assert_allclose(result["niter"].data[0, 99, 99], 7)
    assert_allclose(result["flux"].data[0, 99, 99], 1.065988e-09, rtol=1e-2)
    assert_allclose(result["flux_err"].data[0, 99, 99],
                    4.005628e-11,
                    rtol=1e-2)
    assert_allclose(result["flux_ul"].data[0, 99, 99], 8.220152e-11, rtol=1e-2)

    assert result["flux"].unit == u.Unit("cm-2s-1")
    assert result["flux_err"].unit == u.Unit("cm-2s-1")
    assert result["flux_ul"].unit == u.Unit("cm-2s-1")

    # Check mask is correctly taken into account
    assert np.isnan(result["ts"].data[0, 30, 40])
Exemplo n.º 6
0
def test_compute_ts_map(input_dataset):
    """Minimal test of compute_ts_image"""
    spatial_model = GaussianSpatialModel(sigma="0.1 deg")
    spectral_model = PowerLawSpectralModel(index=2)
    model = SkyModel(spatial_model=spatial_model,
                     spectral_model=spectral_model)
    ts_estimator = TSMapEstimator(model=model,
                                  threshold=1,
                                  kernel_width="1 deg",
                                  selection_optional=[])
    result = ts_estimator.run(input_dataset)

    assert_allclose(result["ts"].data[0, 99, 99], 1704.23, rtol=1e-2)
    assert_allclose(result["niter"].data[0, 99, 99], 8)
    assert_allclose(result["flux"].data[0, 99, 99], 1.02e-09, rtol=1e-2)
    assert_allclose(result["flux_err"].data[0, 99, 99], 3.84e-11, rtol=1e-2)
    assert_allclose(result["npred"].data[0, 99, 99], 3627.874063, rtol=1e-2)
    assert_allclose(result["npred_null"].data[0, 99, 99], 2601, rtol=1e-2)
    assert_allclose(result["npred_excess"].data[0, 99, 99],
                    1026.874063,
                    rtol=1e-2)

    assert result["flux"].unit == u.Unit("cm-2s-1")
    assert result["flux_err"].unit == u.Unit("cm-2s-1")

    # Check mask is correctly taken into account
    assert np.isnan(result["ts"].data[0, 30, 40])

    energy_axis = result["ts"].geom.axes["energy"]
    assert_allclose(energy_axis.edges.value, [0.1, 1])
Exemplo n.º 7
0
def test_large_kernel(input_dataset):
    """Minimal test of compute_ts_image"""
    spatial_model = GaussianSpatialModel(sigma="4 deg")
    spectral_model = PowerLawSpectralModel(index=2)
    model = SkyModel(spatial_model=spatial_model, spectral_model=spectral_model)
    ts_estimator = TSMapEstimator(model=model, kernel_width="4 deg")

    with pytest.raises(ValueError):
        ts_estimator.run(input_dataset)
Exemplo n.º 8
0
def fit_estimator(dataset):
    spatial_model = PointSpatialModel()
    spectral_model = PowerLawSpectralModel(index=2)
    model = SkyModel(spatial_model=spatial_model,
                     spectral_model=spectral_model)
    estimator = TSMapEstimator(model,
                               kernel_width="1 deg",
                               energy_edges=[10, 30, 300] * u.GeV)
    images = estimator.run(dataset)
    return images
Exemplo n.º 9
0
def test_compute_ts_map_psf(fermi_dataset):
    estimator = TSMapEstimator(kernel_width="1 deg")
    result = estimator.run(fermi_dataset)

    assert "root brentq" in repr(estimator)
    assert_allclose(result["ts"].data[29, 29], 852.1548, rtol=1e-2)
    assert_allclose(result["niter"].data[29, 29], 7)
    assert_allclose(result["flux"].data[29, 29], 1.419909e-09, rtol=1e-2)
    assert_allclose(result["flux_err"].data[29, 29], 8.245766e-11, rtol=1e-2)
    assert_allclose(result["flux_ul"].data[29, 29], 1.584825e-09, rtol=1e-2)
    assert result["flux"].unit == u.Unit("cm-2s-1")
    assert result["flux_err"].unit == u.Unit("cm-2s-1")
    assert result["flux_ul"].unit == u.Unit("cm-2s-1")
Exemplo n.º 10
0
def test_compute_ts_map_psf(fermi_dataset):
    estimator = TSMapEstimator(kernel_width="1 deg")
    result = estimator.run(fermi_dataset)

    assert_allclose(result["ts"].data[0, 29, 29], 835.140605, rtol=1e-2)
    assert_allclose(result["niter"].data[0, 29, 29], 7)
    assert_allclose(result["flux"].data[0, 29, 29], 1.351949e-09, rtol=1e-2)
    assert_allclose(result["flux_err"].data[0, 29, 29], 7.93751176e-11, rtol=1e-2)
    assert_allclose(result["flux_errp"].data[0, 29, 29], 7.9376134e-11, rtol=1e-2)
    assert_allclose(result["flux_errn"].data[0, 29, 29], 7.5180404579e-11, rtol=1e-2)
    assert_allclose(result["flux_ul"].data[0, 29, 29], 1.63222157e-10, rtol=1e-2)
    assert result["flux"].unit == u.Unit("cm-2s-1")
    assert result["flux_err"].unit == u.Unit("cm-2s-1")
    assert result["flux_ul"].unit == u.Unit("cm-2s-1")
Exemplo n.º 11
0
def test_compute_ts_map_psf(fermi_dataset):
    estimator = TSMapEstimator(kernel_width="1 deg")
    result = estimator.run(fermi_dataset)

    assert_allclose(result["ts"].data[29, 29], 835.140605, rtol=1e-2)
    assert_allclose(result["niter"].data[29, 29], 7)
    assert_allclose(result["flux"].data[29, 29], 1.626651e-09, rtol=1e-2)
    assert_allclose(result["flux_err"].data[29, 29], 9.548939e-11, rtol=1e-2)
    assert_allclose(result["flux_errp"].data[29, 29], 9.540259e-11, rtol=1e-2)
    assert_allclose(result["flux_errn"].data[29, 29], 9.034366e-11, rtol=1e-2)
    assert_allclose(result["flux_ul"].data[29, 29], 1.961776e-10, rtol=1e-2)
    assert result["flux"].unit == u.Unit("cm-2s-1")
    assert result["flux_err"].unit == u.Unit("cm-2s-1")
    assert result["flux_ul"].unit == u.Unit("cm-2s-1")
Exemplo n.º 12
0
def test_ts_map_with_model(fake_dataset):
    model = fake_dataset.models["source"]

    fake_dataset.models = []

    estimator = TSMapEstimator(
        model,
        kernel_width="0.3 deg",
        selection_optional=[],
        energy_edges=[200, 3500] * u.GeV,
    )
    maps = estimator.run(fake_dataset)

    assert_allclose(maps["sqrt_ts"].data[:, 25, 25], 18.369942, atol=0.1)
    assert_allclose(maps["flux"].data[:, 25, 25], 3.513e-10, atol=1e-12)

    fake_dataset.models = [model]
    maps = estimator.run(fake_dataset)

    assert_allclose(maps["sqrt_ts"].data[:, 25, 25], -0.231187, atol=0.1)
    assert_allclose(maps["flux"].data[:, 25, 25], -5.899423e-12, atol=1e-12)

    # Try downsmapling
    estimator = TSMapEstimator(
        model,
        kernel_width="0.3 deg",
        selection_optional=[],
        downsampling_factor=2,
        energy_edges=[200, 3500] * u.GeV,
    )
    maps = estimator.run(fake_dataset)
    assert_allclose(maps["sqrt_ts"].data[:, 25, 25], 0.323, atol=0.1)
    assert_allclose(maps["flux"].data[:, 25, 25], 1.015417e-12, atol=1e-12)
Exemplo n.º 13
0
def test_compute_ts_map_newton(input_dataset):
    """Minimal test of compute_ts_image"""
    kernel = Gaussian2DKernel(5)

    ts_estimator = TSMapEstimator(method="root newton", threshold=1)
    result = ts_estimator.run(input_dataset, kernel=kernel)

    assert "root newton" in repr(ts_estimator)
    assert_allclose(result["ts"].data[99, 99], 1714.23, rtol=1e-2)
    assert_allclose(result["niter"].data[99, 99], 0)
    assert_allclose(result["flux"].data[99, 99], 1.02e-09, rtol=1e-2)
    assert_allclose(result["flux_err"].data[99, 99], 3.84e-11, rtol=1e-2)
    assert_allclose(result["flux_ul"].data[99, 99], 1.10e-09, rtol=1e-2)

    assert result["flux"].unit == u.Unit("cm-2s-1")
    assert result["flux_err"].unit == u.Unit("cm-2s-1")
    assert result["flux_ul"].unit == u.Unit("cm-2s-1")

    # Check mask is correctly taken into account
    assert np.isnan(result["ts"].data[30, 40])
Exemplo n.º 14
0
def test_compute_ts_map_energy(fermi_dataset):
    estimator = TSMapEstimator(kernel_width="0.6 deg",
                               e_edges=[10, 100, 1000] * u.GeV,
                               sum_over_energy_groups=False)

    result = estimator.run(fermi_dataset)

    assert_allclose(result["ts"].data[:, 29, 29], [804.86171, 16.988756],
                    rtol=1e-2)
    assert_allclose(result["flux"].data[:, 29, 29],
                    [1.233119e-09, 3.590694e-11],
                    rtol=1e-2)
    assert_allclose(result["flux_err"].data[:, 29, 29],
                    [7.382305e-11, 1.338985e-11],
                    rtol=1e-2)
    assert_allclose(result["niter"].data[:, 29, 29], [6, 6])

    energy_axis = result["ts"].geom.axes["energy"]
    assert_allclose(energy_axis.edges.to_value("GeV"), [10, 84.471641, 500],
                    rtol=1e-4)
Exemplo n.º 15
0
def test_compute_ts_map_downsampled(input_dataset):
    """Minimal test of compute_ts_image"""
    kernel = Gaussian2DKernel(2.5)

    ts_estimator = TSMapEstimator(method="root brentq",
                                  error_method="conf",
                                  ul_method="conf")
    result = ts_estimator.run(input_dataset,
                              kernel=kernel,
                              downsampling_factor=2)

    assert_allclose(result["ts"].data[99, 99], 1675.28, rtol=1e-2)
    assert_allclose(result["niter"].data[99, 99], 7)
    assert_allclose(result["flux"].data[99, 99], 1.02e-09, rtol=1e-2)
    assert_allclose(result["flux_err"].data[99, 99], 3.84e-11, rtol=1e-2)
    assert_allclose(result["flux_ul"].data[99, 99], 1.10e-09, rtol=1e-2)

    assert result["flux"].unit == u.Unit("cm-2s-1")
    assert result["flux_err"].unit == u.Unit("cm-2s-1")
    assert result["flux_ul"].unit == u.Unit("cm-2s-1")

    # Check mask is correctly taken into account
    assert np.isnan(result["ts"].data[30, 40])
Exemplo n.º 16
0
def test_large_kernel(input_dataset):
    """Minimal test of compute_ts_image"""
    ts_estimator = TSMapEstimator(kernel_width="4 deg")

    with pytest.raises(ValueError):
        ts_estimator.run(input_dataset)
Exemplo n.º 17
0
def test_incorrect_method():
    with pytest.raises(ValueError):
        TSMapEstimator(method="bad")
    with pytest.raises(ValueError):
        TSMapEstimator(error_method="bad")
Exemplo n.º 18
0
def test_incorrect_method():
    model = GaussianSpatialModel(sigma="0.2 deg")
    with pytest.raises(ValueError):
        TSMapEstimator(model, method="bad")
    with pytest.raises(ValueError):
        TSMapEstimator(model, error_method="bad")