Skip to content

Commit 4e4a029

Browse files
authored
Added support for parsing level 0 files (#25)
1 parent 08066a3 commit 4e4a029

File tree

3 files changed

+171
-133
lines changed

3 files changed

+171
-133
lines changed

hermes_core/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,6 @@
2020
MISSION_NAME = "hermes"
2121
INST_NAMES = ["eea", "nemisis", "merit", "spani"]
2222
INST_SHORTNAMES = ["eea", "nms", "mrt", "spn"]
23+
INST_TARGETNAMES = ["EEA", "MAG", "MERIT", "SPANI"]
2324
INST_TO_SHORTNAME = dict(zip(INST_NAMES, INST_SHORTNAMES))
25+
INST_TO_TARGETNAME = dict(zip(INST_NAMES, INST_TARGETNAMES))

hermes_core/tests/test_util_util.py

Lines changed: 102 additions & 101 deletions
Original file line numberDiff line numberDiff line change
@@ -4,35 +4,40 @@
44
from astropy.time import Time
55
from hermes_core.util import util
66

7+
time = "2024-04-06T12:06:21"
8+
time_formatted = "20240406_120621"
9+
10+
11+
# fmt: off
12+
@pytest.mark.parametrize(
13+
"instrument, time, level, version, result",
14+
[
15+
("eea", time, "l1", "1.2.3", "hermes_eea_l1_{}_v1.2.3.cdf".format(time_formatted)),
16+
("merit", time, "l2", "2.4.5", "hermes_mrt_l2_{}_v2.4.5.cdf".format(time_formatted)),
17+
("nemisis", time, "l2", "1.3.5", "hermes_nms_l2_{}_v1.3.5.cdf".format(time_formatted)),
18+
("spani", time, "l3", "2.4.5", "hermes_spn_l3_{}_v2.4.5.cdf".format(time_formatted)),
19+
],
20+
)
21+
def test_science_filename_output_a(instrument, time, level, version, result):
22+
"""Test simple cases with expected output"""
23+
assert (
24+
util.create_science_filename(instrument, time, level=level, version=version)
25+
== result
26+
)
27+
# fmt: on
728

8-
def test_science_filename_output():
9-
"""Test expected output"""
10-
time = "2024-04-06T12:06:21"
11-
time_formatted = "20240406_120621"
1229

13-
assert util.create_science_filename(
14-
"eea", time, level="l0", version="1.2.3"
15-
) == "hermes_eea_l0_{}_v1.2.3".format(time_formatted)
16-
# merit
17-
assert util.create_science_filename(
18-
"merit", time, level="l2", version="2.4.5"
19-
) == "hermes_mrt_l2_{}_v2.4.5".format(time_formatted)
20-
# nemisis and version
21-
assert util.create_science_filename(
22-
"nemisis", time, level="l2", version="1.3.5"
23-
) == "hermes_nms_l2_{}_v1.3.5".format(time_formatted)
24-
# spani and level
25-
assert util.create_science_filename(
26-
"spani", time, level="l3", version="2.4.5"
27-
) == "hermes_spn_l3_{}_v2.4.5".format(time_formatted)
30+
def test_science_filename_output_b():
31+
"""Test more complex cases of expected output"""
32+
2833
# mode
2934
assert util.create_science_filename(
3035
"spani", time, level="l3", mode="2s", version="2.4.5"
31-
) == "hermes_spn_2s_l3_{}_v2.4.5".format(time_formatted)
36+
) == "hermes_spn_2s_l3_{}_v2.4.5.cdf".format(time_formatted)
3237
# test
3338
assert util.create_science_filename(
34-
"spani", time, level="l0", version="2.4.5", test=True
35-
) == "hermes_spn_l0test_{}_v2.4.5".format(time_formatted)
39+
"spani", time, level="l1", version="2.4.5", test=True
40+
) == "hermes_spn_l1test_{}_v2.4.5.cdf".format(time_formatted)
3641
# all options
3742
assert util.create_science_filename(
3843
"spani",
@@ -42,7 +47,7 @@ def test_science_filename_output():
4247
descriptor="burst",
4348
version="2.4.5",
4449
test=True,
45-
) == "hermes_spn_2s_l3test_burst_{}_v2.4.5".format(time_formatted)
50+
) == "hermes_spn_2s_l3test_burst_{}_v2.4.5.cdf".format(time_formatted)
4651
# Time object instead of str
4752
assert util.create_science_filename(
4853
"spani",
@@ -52,7 +57,7 @@ def test_science_filename_output():
5257
descriptor="burst",
5358
version="2.4.5",
5459
test=True,
55-
) == "hermes_spn_2s_l3test_burst_{}_v2.4.5".format(time_formatted)
60+
) == "hermes_spn_2s_l3test_burst_{}_v2.4.5.cdf".format(time_formatted)
5661
# Time object but created differently
5762
assert util.create_science_filename(
5863
"spani",
@@ -62,81 +67,7 @@ def test_science_filename_output():
6267
descriptor="burst",
6368
version="2.4.5",
6469
test=True,
65-
) == "hermes_spn_2s_l3test_burst_{}_v2.4.5".format(time_formatted)
66-
67-
68-
def test_science_filename_exceptions():
69-
"""Test for errors"""
70-
good_time = "2025-06-02T12:04:01"
71-
good_instrument = "eea"
72-
good_level = "l0"
73-
good_version = "1.3.4"
74-
with pytest.raises(ValueError):
75-
# not enough depth to version number
76-
util.create_science_filename(
77-
good_instrument, good_time, level=good_level, version="1.3"
78-
)
79-
util.create_science_filename(
80-
good_instrument, good_time, level=good_level, version="1"
81-
)
82-
util.create_science_filename(
83-
good_instrument, good_time, level=good_level, version="1.5.6.7"
84-
)
85-
util.create_science_filename(
86-
good_instrument, good_time, level=good_level, version="1.."
87-
)
88-
# a letter in version number
89-
util.create_science_filename(
90-
good_instrument, good_time, level=good_level, version="a.5.6"
91-
)
92-
93-
# wrong level specification
94-
util.create_science_filename(
95-
good_instrument, good_time, level="la", version=good_version
96-
)
97-
util.create_science_filename(
98-
good_instrument, good_time, level="squirrel", version=good_version
99-
)
100-
101-
# wrong instrument name
102-
util.create_science_filename(
103-
"eeb", good_time, level=good_level, version=good_version
104-
)
105-
util.create_science_filename(
106-
"fpi", good_time, level=good_level, version=good_version
107-
)
108-
util.create_science_filename(
109-
"potato", good_time, level=good_level, version=good_version
110-
)
111-
112-
# bad time string
113-
# non-existent time
114-
util.create_science_filename(
115-
good_instrument,
116-
"2023-13-04T12:06:21",
117-
level=good_level,
118-
version=good_version,
119-
)
120-
# not isot format
121-
util.create_science_filename(
122-
"eeb", "2023/13/04 12:06:21", level=good_level, version=good_version
123-
)
124-
# not valid input for time
125-
util.create_science_filename(
126-
"eeb", time=12345345, level=good_level, version=good_version
127-
)
128-
# _ character in mode
129-
util.create_science_filename(
130-
"eeb", time=12345345, level=good_level, version=good_version, mode="o_o"
131-
)
132-
# _ character in descriptor
133-
util.create_science_filename(
134-
"eeb",
135-
time=12345345,
136-
level=good_level,
137-
version=good_version,
138-
descriptor="blue_green",
139-
)
70+
) == "hermes_spn_2s_l3test_burst_{}_v2.4.5.cdf".format(time_formatted)
14071

14172

14273
def test_parse_science_filename_output():
@@ -224,8 +155,8 @@ def test_parse_science_filename_output():
224155
assert util.parse_science_filename(f) == input
225156

226157

227-
def test_parse_science_filename_errors():
228-
"""Test for errors"""
158+
def test_parse_science_filename_errors_l1():
159+
"""Test for errors in l1 and above files"""
229160
with pytest.raises(ValueError):
230161
# wrong mission name
231162
f = "veeger_spn_2s_l3test_burst_20240406_120621_v2.4.5"
@@ -234,3 +165,73 @@ def test_parse_science_filename_errors():
234165
# wrong instrument name
235166
f = "hermes_www_2s_l3test_burst_20240406_120621_v2.4.5"
236167
util.parse_science_filename(f)
168+
169+
170+
good_time = "2025-06-02T12:04:01"
171+
good_instrument = "eea"
172+
good_level = "l1"
173+
good_version = "1.3.4"
174+
175+
176+
# fmt: off
177+
@pytest.mark.parametrize(
178+
"instrument,time,level,version",
179+
[
180+
(good_instrument, good_time, good_level, "1.3"), # bad version specifications
181+
(good_instrument, good_time, good_level, "1"),
182+
(good_instrument, good_time, good_level, "1.5.6.7"),
183+
(good_instrument, good_time, good_level, "1.."),
184+
(good_instrument, good_time, good_level, "a.5.6"),
185+
(good_instrument, good_time, "la", good_version), # wrong level specifications
186+
(good_instrument, good_time, "squirrel", good_version),
187+
(good_instrument, good_time, "l0", good_version),
188+
("potato", good_time, good_level, good_version), # wrong instrument names
189+
("eeb", good_time, good_level, good_version),
190+
("fpi", good_time, good_level, good_version),
191+
(good_instrument, "2023-13-04T12:06:21", good_level, good_version), # non-existent time
192+
(good_instrument, "2023/13/04 12:06:21", good_level, good_version), # not isot format
193+
(good_instrument, "2023/13/04 12:06:21", good_level, good_version), # not isot format
194+
(good_instrument, "12345345", good_level, good_version), # not valid input for time
195+
]
196+
)
197+
def test_science_filename_errors_l1_a(instrument, time, level, version):
198+
""""""
199+
with pytest.raises(ValueError) as e:
200+
util.create_science_filename(
201+
instrument, time, level=level, version=version
202+
)
203+
# fmt: on
204+
205+
206+
def test_science_filename_errors_l1_b():
207+
with pytest.raises(ValueError):
208+
# _ character in mode
209+
util.create_science_filename(
210+
"eeb", time="12345345", level=good_level, version=good_version, mode="o_o"
211+
)
212+
with pytest.raises(ValueError):
213+
# _ character in descriptor
214+
util.create_science_filename(
215+
"eeb",
216+
time="12345345",
217+
level=good_level,
218+
version=good_version,
219+
descriptor="blue_green",
220+
)
221+
222+
223+
# fmt: off
224+
@pytest.mark.parametrize("filename,instrument,time,level,version", [
225+
("hermes_MAG_l0_2024094-124603_v01.bin", "nemisis", "2024-04-03T12:46:03", "l0", "01"),
226+
("hermes_EEA_l0_2026337-124603_v11.bin", "eea", "2026-12-03T12:46:03", "l0", "11"),
227+
("hermes_MERIT_l0_2026215-124603_v21.bin", "merit", "2026-08-03T12:46:03", "l0", "21"),
228+
("hermes_SPANI_l0_2026337-065422_v11.bin", "spani", "2026-12-03T06:54:22", "l0", "11"),
229+
])
230+
def test_parse_l0_filenames(filename, instrument, time, level, version):
231+
"""Testing parsing of MOC-generated level 0 files."""
232+
result = util.parse_science_filename(filename)
233+
assert result['instrument'] == instrument
234+
assert result['level'] == level
235+
assert result['version'] == version
236+
assert result['time'] == Time(time)
237+
# fmt: on

0 commit comments

Comments
 (0)