コード例 #1
0
def test_flux_estimator_norm_range_template():
    energy = MapAxis.from_energy_bounds(0.1,
                                        10,
                                        3.0,
                                        unit="TeV",
                                        name="energy_true")
    template = WcsNDMap.create(npix=10,
                               axes=[energy],
                               unit="cm-2 s-1 sr-1 TeV-1")
    spatial = TemplateSpatialModel(template, normalize=False)
    spectral = PowerLawNormSpectralModel()
    model = SkyModel(spectral_model=spectral,
                     spatial_model=spatial,
                     name="test")

    model.spectral_model.norm.max = 10
    model.spectral_model.norm.min = 0

    estimator = FluxEstimator(source="test",
                              selection_optional=[],
                              reoptimize=True)

    scale_model = estimator.get_scale_model(Models([model]))

    assert_allclose(scale_model.norm.min, 0)
    assert_allclose(scale_model.norm.max, 10)
    assert scale_model.norm.interp == "log"
コード例 #2
0
ファイル: test_flux.py プロジェクト: LauraOlivera/gammapy
def test_flux_estimator_fermi_no_reoptimization(fermi_datasets):
    estimator = FluxEstimator(
        0,
        norm_n_values=5,
        norm_min=0.5,
        norm_max=2,
        selection_optional="all",
        reoptimize=False
    )

    datasets = fermi_datasets.slice_by_energy(
        energy_min="1 GeV", energy_max="100 GeV"
    )
    datasets.models = fermi_datasets.models

    result = estimator.run(datasets)

    assert_allclose(result["norm"], 0.98949, atol=1e-3)
    assert_allclose(result["ts"], 25083.75408, rtol=1e-3)
    assert_allclose(result["norm_err"], 0.01998, atol=1e-3)
    assert_allclose(result["norm_errn"], 0.0199, atol=1e-3)
    assert_allclose(result["norm_errp"], 0.0199, atol=1e-3)
    assert len(result["norm_scan"]) == 5
    assert_allclose(result["norm_scan"][0], 0.5)
    assert_allclose(result["norm_scan"][-1], 2)
    assert_allclose(result["e_min"], 10 * u.GeV, atol=1e-3)
    assert_allclose(result["e_max"], 83.255 * u.GeV, atol=1e-3)
コード例 #3
0
def test_flux_estimator_fermi_with_reoptimization(fermi_datasets):
    estimator = FluxEstimator(0, energy_range=["1 GeV", "100 GeV"], reoptimize=True)
    result = estimator.run(fermi_datasets, steps=["err", "ts"])

    assert_allclose(result["norm"], 0.970614, atol=1e-3)
    assert_allclose(result["ts"], 13005.903067, atol=1e-3)
    assert_allclose(result["norm_err"], 0.01998, atol=1e-3)
コード例 #4
0
def test_flux_estimator_incorrect_energy_range(hess_datasets):
    with pytest.raises(ValueError):
        FluxEstimator(hess_datasets,
                      source="Crab",
                      energy_range=[1, 3, 10] * u.TeV)
    with pytest.raises(ValueError):
        FluxEstimator(hess_datasets,
                      source="Crab",
                      energy_range=[10, 1] * u.TeV)
コード例 #5
0
def test_flux_estimator_1d(hess_datasets):
    estimator = FluxEstimator(hess_datasets, source="Crab")
    result = estimator.run('1 TeV', '10 TeV', steps=["ts", "errp-errn", "ul"])

    assert_allclose(result["norm"], 1.176789, atol=1e-3)
    assert_allclose(result["delta_ts"], 693.111777, atol=1e-3)
    assert_allclose(result["err"], 0.078087, atol=1e-3)
    assert_allclose(result["errn"], 0.078046, atol=1e-3)
    assert_allclose(result["errp"], 0.081665, atol=1e-3)
    assert_allclose(result["ul"], 1.431722, atol=1e-3)
コード例 #6
0
def test_flux_estimator_1d(hess_datasets):
    estimator = FluxEstimator(source="Crab", energy_range=[1, 10] * u.TeV)
    result = estimator.run(hess_datasets, steps=["err", "ts", "errp-errn", "ul"])

    assert_allclose(result["norm"], 1.176789, atol=1e-3)
    assert_allclose(result["ts"], 693.111777, atol=1e-3)
    assert_allclose(result["norm_err"], 0.078087, atol=1e-3)
    assert_allclose(result["norm_errn"], 0.078046, atol=1e-3)
    assert_allclose(result["norm_errp"], 0.081665, atol=1e-3)
    assert_allclose(result["norm_ul"], 1.431722, atol=1e-3)
コード例 #7
0
def test_flux_estimator_fermi_with_reoptimization(fermi_datasets):
    estimator = FluxEstimator(0,
                              e_min="1 GeV",
                              e_max="100 GeV",
                              reoptimize=True,
                              selection_optional=None)
    result = estimator.run(fermi_datasets)

    assert_allclose(result["norm"], 1.010983, atol=1e-3)
    assert_allclose(result["ts"], 20896.1864, atol=1e-3)
    assert_allclose(result["norm_err"], 0.01998, atol=1e-3)
コード例 #8
0
ファイル: test_flux.py プロジェクト: AtreyeeS/gammapy
def test_flux_estimator_fermi_with_reoptimization(fermi_datasets):
    estimator = FluxEstimator(0,
                              energy_min="1 GeV",
                              energy_max="100 GeV",
                              selection_optional=None,
                              reoptimize=True)
    result = estimator.run(fermi_datasets)

    assert_allclose(result["norm"], 0.989989, atol=1e-3)
    assert_allclose(result["ts"], 18729.907481, rtol=1e-3)
    assert_allclose(result["norm_err"], 0.01998, atol=1e-3)
コード例 #9
0
def test_flux_estimator_fermi_with_reoptimization(fermi_datasets):
    estimator = FluxEstimator(0, selection_optional=None, reoptimize=True)

    datasets = fermi_datasets.slice_by_energy(energy_min="1 GeV",
                                              energy_max="100 GeV")
    datasets.models = fermi_datasets.models

    result = estimator.run(datasets)

    assert_allclose(result["norm"], 0.989989, atol=1e-3)
    assert_allclose(result["ts"], 18729.368105, rtol=1e-3)
    assert_allclose(result["norm_err"], 0.01998, atol=1e-3)
コード例 #10
0
def test_flux_estimator_incorrect_energy_range(fermi_datasets):
    with pytest.raises(ValueError):
        FluxEstimator(source="Crab",
                      energy_min=10 * u.TeV,
                      energy_max=1 * u.TeV)

    fe = FluxEstimator(source="Crab Nebula",
                       energy_min=0.18 * u.TeV,
                       energy_max=0.2 * u.TeV)

    result = fe.run(fermi_datasets)

    assert np.isnan(result["norm"])
コード例 #11
0
def test_flux_estimator_1d(hess_datasets):
    estimator = FluxEstimator(source="Crab",
                              e_min=1 * u.TeV,
                              e_max=10 * u.TeV,
                              selection_optional=["errn-errp", "ul"])
    result = estimator.run(hess_datasets)

    assert_allclose(result["norm"], 1.176789, atol=1e-3)
    assert_allclose(result["ts"], 693.111777, atol=1e-3)
    assert_allclose(result["norm_err"], 0.078087, atol=1e-3)
    assert_allclose(result["norm_errn"], 0.078046, atol=1e-3)
    assert_allclose(result["norm_errp"], 0.081665, atol=1e-3)
    assert_allclose(result["norm_ul"], 1.431722, atol=1e-3)
コード例 #12
0
def test_flux_estimator_norm_range():
    model = SkyModel.create("pl", "gauss", name="test")

    model.spectral_model.amplitude.min = 1e-15
    model.spectral_model.amplitude.max = 1e-10

    estimator = FluxEstimator(source="test",
                              selection_optional=[],
                              reoptimize=True)

    scale_model = estimator.get_scale_model(Models([model]))

    assert_allclose(scale_model.norm.min, 1e-3)
    assert_allclose(scale_model.norm.max, 1e2)
    assert scale_model.norm.interp == "log"
コード例 #13
0
def test_flux_estimator_naima_model():
    import naima
    ECPL = naima.models.ExponentialCutoffPowerLaw(1e36 * u.Unit("1/eV"),
                                                  1 * u.TeV, 2.1, 13 * u.TeV)
    IC = naima.models.InverseCompton(ECPL, seed_photon_fields=["CMB"])
    naima_model = NaimaSpectralModel(IC)

    model = SkyModel(spectral_model=naima_model, name="test")

    estimator = FluxEstimator(source="test",
                              selection_optional=[],
                              reoptimize=True)

    scale_model = estimator.get_scale_model(Models([model]))

    assert_allclose(scale_model.norm.min, np.nan)
    assert_allclose(scale_model.norm.max, np.nan)
コード例 #14
0
def test_flux_estimator_fermi_no_reoptimization(fermi_datasets):
    estimator = FluxEstimator(fermi_datasets,
                              0,
                              norm_n_values=5,
                              norm_min=0.5,
                              norm_max=2,
                              reoptimize=False)
    result = estimator.run("1 GeV", "100 GeV")

    assert_allclose(result["norm"], 0.970614, atol=1e-3)
    assert_allclose(result["delta_ts"], 29695.720611, atol=1e-3)
    assert_allclose(result["err"], 0.01998, atol=1e-3)
    assert_allclose(result["errn"], 0.0199, atol=1e-3)
    assert_allclose(result["errp"], 0.0199, atol=1e-3)
    assert len(result["norm_scan"]) == 5
    assert_allclose(result["norm_scan"][0], 0.5)
    assert_allclose(result["norm_scan"][-1], 2)
コード例 #15
0
def test_flux_estimator_compound_model():
    pl = PowerLawSpectralModel()
    pl.amplitude.min = 1e-15
    pl.amplitude.max = 1e-10
    pln = PowerLawNormSpectralModel()
    pln.norm.value = 0.1
    spectral_model = pl * pln
    model = SkyModel(spectral_model=spectral_model, name="test")

    estimator = FluxEstimator(source="test",
                              selection_optional=[],
                              reoptimize=True)

    scale_model = estimator.get_scale_model(Models([model]))

    assert_allclose(scale_model.norm.min, 1e-3)
    assert_allclose(scale_model.norm.max, 1e2)
コード例 #16
0
def test_flux_estimator_1d(hess_datasets):
    estimator = FluxEstimator(
        source="Crab",
        energy_min=1 * u.TeV,
        energy_max=10 * u.TeV,
        selection_optional=["errn-errp", "ul"],
    )
    result = estimator.run(hess_datasets)

    assert_allclose(result["norm"], 1.218139, atol=1e-3)
    assert_allclose(result["ts"], 527.492959, atol=1e-3)
    assert_allclose(result["norm_err"], 0.095496, atol=1e-3)
    assert_allclose(result["norm_errn"], 0.093204, atol=1e-3)
    assert_allclose(result["norm_errp"], 0.097818, atol=1e-3)
    assert_allclose(result["norm_ul"], 1.525773, atol=1e-3)
    assert_allclose(result["e_min"], 1 * u.TeV, atol=1e-3)
    assert_allclose(result["e_max"], 10 * u.TeV, atol=1e-3)
コード例 #17
0
def test_inhomogeneous_datasets(fermi_datasets, hess_datasets):

    for dataset in hess_datasets:
        dataset.models = fermi_datasets.models

    datasets = Datasets()

    datasets.extend(fermi_datasets)
    datasets.extend(hess_datasets)

    estimator = FluxEstimator(source="Crab Nebula",
                              e_min=1 * u.TeV,
                              e_max=10 * u.TeV,
                              selection_optional=None)
    result = estimator.run(datasets)

    assert_allclose(result["norm"], 1.022802, atol=1e-3)
    assert_allclose(result["ts"], 21584.515969, atol=1e-3)
    assert_allclose(result["norm_err"], 0.01966, atol=1e-3)
コード例 #18
0
ファイル: test_flux.py プロジェクト: dkkyjy/gammapy
def test_flux_estimator_fermi_no_reoptimization(fermi_datasets):
    estimator = FluxEstimator(
        0,
        energy_range=["1 GeV", "100 GeV"],
        norm_n_values=5,
        norm_min=0.5,
        norm_max=2,
        reoptimize=False,
    )
    result = estimator.run(fermi_datasets)

    assert_allclose(result["norm"], 0.970614, atol=1e-3)
    assert_allclose(result["ts"], 29695.689216, atol=1e-3)
    assert_allclose(result["norm_err"], 0.01998, atol=1e-3)
    assert_allclose(result["norm_errn"], 0.0199, atol=1e-3)
    assert_allclose(result["norm_errp"], 0.0199, atol=1e-3)
    assert len(result["norm_scan"]) == 5
    assert_allclose(result["norm_scan"][0], 0.5)
    assert_allclose(result["norm_scan"][-1], 2)
コード例 #19
0
ファイル: test_flux.py プロジェクト: Rishank2610/gammapy
def test_flux_estimator_1d(hess_datasets):
    estimator = FluxEstimator(
        source="Crab",
        selection_optional=["errn-errp", "ul"],
        reoptimize=False
    )
    datasets = hess_datasets.slice_by_energy(
        energy_min=1 * u.TeV, energy_max=10 * u.TeV,
    )
    datasets.models = hess_datasets.models

    result = estimator.run(datasets)

    assert_allclose(result["norm"], 1.218139, atol=1e-3)
    assert_allclose(result["ts"], 527.492959, atol=1e-3)
    assert_allclose(result["norm_err"], 0.095496, atol=1e-3)
    assert_allclose(result["norm_errn"], 0.093204, atol=1e-3)
    assert_allclose(result["norm_errp"], 0.097818, atol=1e-3)
    assert_allclose(result["norm_ul"], 1.418475, atol=1e-3)
    assert_allclose(result["e_min"], 1 * u.TeV, atol=1e-3)
    assert_allclose(result["e_max"], 10 * u.TeV, atol=1e-3)
コード例 #20
0
def test_flux_estimator_fermi_no_reoptimization(fermi_datasets):
    estimator = FluxEstimator(
        0,
        e_min="1 GeV",
        e_max="100 GeV",
        norm_n_values=5,
        norm_min=0.5,
        norm_max=2,
        reoptimize=False,
    )

    result = estimator.run(fermi_datasets)

    assert_allclose(result["norm"], 1.010983, atol=1e-3)
    assert_allclose(result["ts"], 28086.565, atol=1e-3)
    assert_allclose(result["norm_err"], 0.01998, atol=1e-3)
    assert_allclose(result["norm_errn"], 0.0199, atol=1e-3)
    assert_allclose(result["norm_errp"], 0.0199, atol=1e-3)
    assert len(result["norm_scan"]) == 5
    assert_allclose(result["norm_scan"][0], 0.5)
    assert_allclose(result["norm_scan"][-1], 2)
コード例 #21
0
ファイル: test_flux.py プロジェクト: registerrier/gammapy
def test_inhomogeneous_datasets(fermi_datasets, hess_datasets):
    datasets = Datasets()

    datasets.extend(fermi_datasets)
    datasets.extend(hess_datasets)

    datasets = datasets.slice_by_energy(
        energy_min=1 * u.TeV,
        energy_max=10 * u.TeV,
    )
    datasets.models = fermi_datasets.models

    estimator = FluxEstimator(source="Crab Nebula",
                              selection_optional=[],
                              reoptimize=True)
    result = estimator.run(datasets)

    assert_allclose(result["norm"], 1.190622, atol=1e-3)
    assert_allclose(result["ts"], 612.50171, atol=1e-3)
    assert_allclose(result["norm_err"], 0.090744, atol=1e-3)
    assert_allclose(result["e_min"], 0.693145 * u.TeV, atol=1e-3)
    assert_allclose(result["e_max"], 10 * u.TeV, atol=1e-3)
コード例 #22
0
def test_flux_estimator_fermi_no_reoptimization(fermi_datasets):
    estimator = FluxEstimator(
        0,
        energy_min="1 GeV",
        energy_max="100 GeV",
        norm_n_values=5,
        norm_min=0.5,
        norm_max=2,
        reoptimize=False,
    )

    result = estimator.run(fermi_datasets)

    assert_allclose(result["norm"], 0.982434, atol=1e-3)
    assert_allclose(result["ts"], 23856.262603, atol=1e-3)
    assert_allclose(result["norm_err"], 0.01998, atol=1e-3)
    assert_allclose(result["norm_errn"], 0.0199, atol=1e-3)
    assert_allclose(result["norm_errp"], 0.0199, atol=1e-3)
    assert len(result["norm_scan"]) == 5
    assert_allclose(result["norm_scan"][0], 0.5)
    assert_allclose(result["norm_scan"][-1], 2)
    assert_allclose(result["e_min"], 10 * u.GeV, atol=1e-3)
    assert_allclose(result["e_max"], 83.255 * u.GeV, atol=1e-3)
コード例 #23
0
def test_inhomogeneous_datasets(fermi_datasets, hess_datasets):

    for dataset in hess_datasets:
        dataset.models = fermi_datasets.models

    datasets = Datasets()

    datasets.extend(fermi_datasets)
    datasets.extend(hess_datasets)

    estimator = FluxEstimator(
        source="Crab Nebula",
        energy_min=1 * u.TeV,
        energy_max=10 * u.TeV,
        selection_optional=None,
    )
    result = estimator.run(datasets)

    assert_allclose(result["norm"], 1.190622, atol=1e-3)
    assert_allclose(result["ts"], 612.500392, atol=1e-3)
    assert_allclose(result["norm_err"], 0.090744, atol=1e-3)
    assert_allclose(result["e_min"], 0.693145 * u.TeV, atol=1e-3)
    assert_allclose(result["e_max"], 2 * u.TeV, atol=1e-3)
コード例 #24
0
def test_flux_estimator_incorrect_energy_range():
    with pytest.raises(ValueError):
        FluxEstimator(source="Crab",
                      energy_min=10 * u.TeV,
                      energy_max=1 * u.TeV)
コード例 #25
0
def test_inhomogeneous_datasets(fermi_datasets, hess_datasets):
    fermi_datasets.append(hess_datasets[0])
    with pytest.raises(ValueError):
        estimator = FluxEstimator(source=0, energy_range=[1, 10] * u.TeV)
        estimator.run(fermi_datasets)
コード例 #26
0
def test_inhomogeneous_datasets(fermi_datasets, hess_datasets):
    fermi_datasets.append(hess_datasets[0])
    with pytest.raises(ValueError):
        FluxEstimator(fermi_datasets, source=0)