Passed
Pull Request — master (#2153)
by
unknown
02:11
created

TestSpectrumStats.test_str()   A

Complexity

Conditions 1

Size

Total Lines 5
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 5
nop 1
dl 0
loc 5
rs 10
c 0
b 0
f 0
1
# Licensed under a 3-clause BSD style license - see LICENSE.rst
2
from numpy.testing import assert_allclose
3
import pytest
4
from astropy.coordinates import SkyCoord
5
import astropy.units as u
6
from regions import CircleSkyRegion
7
from ...data import DataStore, Observations, ObservationStats, SpectrumStats
8
from ...utils.testing import requires_data
9
from ...background import ReflectedRegionsBackgroundEstimator
10
11
12
@pytest.fixture(scope="session")
13
def observations():
14
    data_store = DataStore.from_dir("$GAMMAPY_DATA/hess-dl3-dr1/")
15
    run_list = [23523, 23526]
16
    return Observations([data_store.obs(_) for _ in run_list])
17
18
19
@pytest.fixture(scope="session")
20
def on_region():
21
    pos = SkyCoord(83.63 * u.deg, 22.01 * u.deg)
22
    on_size = 0.3 * u.deg
23
    return CircleSkyRegion(pos, on_size)
24
25
26
@pytest.fixture(scope="session")
27
def bad_on_region():
28
    pos = SkyCoord(83.6333 * u.deg, 21.5144 * u.deg)
29
    on_size = 0.3 * u.deg
30
    return CircleSkyRegion(pos, on_size)
31
32
33
@pytest.fixture(scope="session")
34
def stats(on_region, observations):
35
    obs = observations[0]
36
    bge = ReflectedRegionsBackgroundEstimator(on_region=on_region, observations=obs)
37
    bg = bge.process(obs)
38
    return ObservationStats.from_observation(obs, bg)
39
40
41
@pytest.fixture(scope="session")
42
def stats_bad_on_region(bad_on_region, observations):
43
    obs = observations[0]
44
    bge = ReflectedRegionsBackgroundEstimator(on_region=bad_on_region, observations=obs)
45
    bg = bge.process(obs)
46
    return ObservationStats.from_observation(obs, bg)
47
48
49
@pytest.fixture(scope="session")
50
def stats_stacked(on_region, observations):
51
    bge = ReflectedRegionsBackgroundEstimator(
52
        on_region=on_region, observations=observations
53
    )
54
    bge.run()
55
56
    return ObservationStats.stack(
57
        [
58
            ObservationStats.from_observation(obs, bg)
59
            for obs, bg in zip(observations, bge.result)
60
        ]
61
    )
62
63
64
@pytest.fixture(scope="session")
65
def stats_stacked_bad_on_region(bad_on_region, observations):
66
    bge = ReflectedRegionsBackgroundEstimator(
67
        on_region=bad_on_region, observations=observations
68
    )
69
    bge.run()
70
71
    return ObservationStats.stack(
72
        [
73
            ObservationStats.from_observation(obs, bg)
74
            for obs, bg in zip(observations, bge.result)
75
        ]
76
    )
77
78
79
@requires_data("gammapy-data")
80
class TestObservationStats:
81
    @staticmethod
82
    def test_str(stats):
83
        text = str(stats)
84
        assert "Observation summary report" in text
85
86
    @staticmethod
87
    def test_to_dict(stats):
88
        data = stats.to_dict()
89
        assert data["n_on"] == 425
90
        assert data["n_off"] == 395
91
        assert_allclose(data["alpha"], 0.333, rtol=1e-2)
92
        assert_allclose(data["sigma"], 16.430, rtol=1e-3)
93
        assert_allclose(data["gamma_rate"].value, 11.127, rtol=1e-3)
94
        assert_allclose(data["bg_rate"].value, 4.995, rtol=1e-3)
95
        assert_allclose(data["livetime"].value, 26.362, rtol=1e-3)
96
97
    @staticmethod
98
    def test_bad_on(stats_bad_on_region):
99
        data = stats_bad_on_region.to_dict()
100
        assert data["alpha"] == 0
101
102
    @staticmethod
103
    def test_stack(stats_stacked):
104
        data = stats_stacked.to_dict()
105
        assert data["n_on"] == 900
106
        assert data["n_off"] == 766
107
        assert_allclose(data["alpha"], 0.333, rtol=1e-2)
108
        assert_allclose(data["sigma"], 25.244, rtol=1e-3)
109
110
    @staticmethod
111
    def test_stack_bad_on(stats_stacked_bad_on_region):
112
        data = stats_stacked_bad_on_region.to_dict()
113
        assert data["n_on"] == 156
114
        assert data["n_off"] == 1006
115
        assert_allclose(data["alpha"], 0.125, rtol=1e-3)
116
        assert_allclose(data["livetime"].value, 26.211, rtol=1e-3)
117
118
119
@pytest.fixture(scope="session")
120
def spectrum_stats(on_region, observations):
121
    obs = observations[0]
122
    bge = ReflectedRegionsBackgroundEstimator(on_region=on_region, observations=obs)
123
    bg = bge.process(obs)
124
    e_range = [1 * u.TeV, 10 * u.TeV]
125
    return SpectrumStats.from_observation_in_range(obs, bg, e_range)
126
127
128
@requires_data("gammapy-data")
129
class TestSpectrumStats:
130
    @staticmethod
131
    def test_str(spectrum_stats):
132
        text = str(spectrum_stats)
133
        assert "Observation summary report" in text
134
        assert "energy range" in text
135
136
    @staticmethod
137
    def test_to_dict(spectrum_stats):
138
        data = spectrum_stats.to_dict()
139
        assert data["energy_min"] == 1 * u.TeV
140
        assert data["energy_max"] == 10 * u.TeV
141