예제 #1
0
class TestSpectralModelErrorPropagation:
    """Test spectral model error propagation.

    https://github.com/gammapy/gammapy/blob/master/docs/development/pigs/pig-014.rst#proposal
    https://nbviewer.jupyter.org/github/gammapy/gammapy-extra/blob/master/experiments/uncertainty_estimation_prototype.ipynb
    """

    def setup(self):
        self.model = LogParabolaSpectralModel(
            amplitude=3.76e-11 * u.Unit("cm-2 s-1 TeV-1"),
            reference=1 * u.TeV,
            alpha=2.44,
            beta=0.25,
        )
        self.model.covariance = [
            [1.31e-23, 0, -6.80e-14, 3.04e-13],
            [0, 0, 0, 0],
            [-6.80e-14, 0, 0.00899, 0.00904],
            [3.04e-13, 0, 0.00904, 0.0284],
        ]

    def test_evaluate_error_scalar(self):
        # evaluate_error on scalar
        out = self.model.evaluate_error(1 * u.TeV)
        assert isinstance(out, u.Quantity)
        assert out.unit == "cm-2 s-1 TeV-1"
        assert out.shape == (2,)
        assert_allclose(out.data, [3.7600e-11, 3.6193e-12], rtol=1e-3)

    def test_evaluate_error_array(self):
        out = self.model.evaluate_error([1, 100] * u.TeV)
        assert out.shape == (2, 2)
        expected = [[3.76e-11, 2.469e-18], [3.619e-12, 9.375e-18]]
        assert_allclose(out.data, expected, rtol=1e-3)

    def test_evaluate_error_unit(self):
        out = self.model.evaluate_error(1e6 * u.MeV)
        assert out.unit == "cm-2 s-1 TeV-1"
        assert_allclose(out.data, [3.760e-11, 3.6193e-12], rtol=1e-3)

    def test_integral_error(self):
        out = self.model.integral_error(1 * u.TeV, 10 * u.TeV)
        assert out.unit == "cm-2 s-1"
        assert out.shape == (2,)
        assert_allclose(out.data, [2.197e-11, 2.796e-12], rtol=1e-3)

    def test_energy_flux_error(self):
        out = self.model.energy_flux_error(1 * u.TeV, 10 * u.TeV)
        assert out.unit == "TeV cm-2 s-1"
        assert out.shape == (2,)
        assert_allclose(out.data, [4.119e-11, 8.157e-12], rtol=1e-3)
예제 #2
0
class TestSpectralModelErrorPropagation:
    """Test spectral model error propagation.

    https://github.com/gammapy/gammapy/blob/master/docs/development/pigs/pig-014.rst#proposal
    https://nbviewer.jupyter.org/github/gammapy/gammapy-extra/blob/master/experiments/uncertainty_estimation_prototype.ipynb
    """
    def setup(self):
        self.model = LogParabolaSpectralModel(
            amplitude=3.76e-11 * u.Unit("cm-2 s-1 TeV-1"),
            reference=1 * u.TeV,
            alpha=2.44,
            beta=0.25,
        )
        self.model.covariance = [
            [1.31e-23, 0, -6.80e-14, 3.04e-13],
            [0, 0, 0, 0],
            [-6.80e-14, 0, 0.00899, 0.00904],
            [3.04e-13, 0, 0.00904, 0.0284],
        ]

    def test_evaluate_error_scalar(self):
        # evaluate_error on scalar
        out = self.model.evaluate_error(1 * u.TeV)
        assert isinstance(out, u.Quantity)
        assert out.unit == "cm-2 s-1 TeV-1"
        assert out.shape == (2, )
        assert_allclose(out.data, [3.7600e-11, 3.6193e-12], rtol=1e-3)

    def test_evaluate_error_array(self):
        out = self.model.evaluate_error([1, 100] * u.TeV)
        assert out.shape == (2, 2)
        expected = [[3.76e-11, 2.469e-18], [3.619e-12, 9.375e-18]]
        assert_allclose(out.data, expected, rtol=1e-3)

    def test_evaluate_error_unit(self):
        out = self.model.evaluate_error(1e6 * u.MeV)
        assert out.unit == "cm-2 s-1 TeV-1"
        assert_allclose(out.data, [3.760e-11, 3.6193e-12], rtol=1e-3)

    @pytest.mark.xfail(reason="FIXME, do we need this method?")
    def test_integral_error(self):
        out = self.model.integral_error(1 * u.TeV, 10 * u.TeV)
        assert out.unit == "cm-2 s-1"
        assert out.shape == (2, )
        assert_allclose(out.data, [2.197e-11, 2.796e-12], rtol=1e-3)

    @pytest.mark.xfail(reason="FIXME, do we need this method?")
    def test_energy_flux_error(self):
        out = self.model.energy_flux_error(1 * u.TeV, 10 * u.TeV)
        assert out.unit == "TeV cm-2 s-1"
        assert out.shape == (2, )
        assert_allclose(out.data, [4.119e-11, 8.157e-12], rtol=1e-3)

    def test_ecpl_model(self):
        # Regression test for ECPL model
        # https://github.com/gammapy/gammapy/issues/2007
        model = ExpCutoffPowerLawSpectralModel(
            amplitude=2.076183759227292e-12 * u.Unit("cm-2 s-1 TeV-1"),
            index=1.8763343736076483,
            lambda_=0.08703226432146616 * u.Unit("TeV-1"),
            reference=1 * u.TeV,
        )
        model.covariance = [
            [0.00204191498, -1.507724e-14, 0.0, -0.001834819, 0.0],
            [-1.507724e-14, 1.6864740e-25, 0.0, 1.854251e-14, 0.0],
            [0.0, 0.0, 0.0, 0.0, 0.0],
            [-0.001834819175, 1.8542517e-14, 0.0, 0.0032559101, 0.0],
            [0.0, 0.0, 0.0, 0.0, 0.0],
        ]

        out = model.evaluate_error(1 * u.TeV)
        assert_allclose(out.data, [1.903129e-12, 2.979976e-13], rtol=1e-3)

        out = model.evaluate_error(0.1 * u.TeV)
        assert_allclose(out.data, [1.548176e-10, 1.933612e-11], rtol=1e-3)