Skip to content

Commit c24d41a

Browse files
authored
Updates to pass pipeline settings thorugh GLOWS L2 (IMAP-Science-Operations-Center#2699)
* Updates to pass pipeline settings thorugh L2 * Update ancillary file name * Revert "Update ancillary file name" This reverts commit f49579e.
1 parent 59c3dd3 commit c24d41a

4 files changed

Lines changed: 63 additions & 16 deletions

File tree

imap_processing/cli.py

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -742,11 +742,27 @@ def do_processing(
742742
science_files = dependencies.get_file_paths(source="glows")
743743
if len(science_files) != 1:
744744
raise ValueError(
745-
f"GLOWS L1A requires exactly one input science file, received: "
746-
f"{science_files}."
745+
f"GLOWS L2 requires exactly one input science file, "
746+
f"received: {science_files}."
747747
)
748748
input_dataset = load_cdf(science_files[0])
749-
datasets = glows_l2(input_dataset)
749+
750+
# Load pipeline settings for L2 processing
751+
current_day = np.datetime64(
752+
f"{self.start_date[:4]}-{self.start_date[4:6]}-{self.start_date[6:]}"
753+
)
754+
day_buffer = current_day + np.timedelta64(3, "D")
755+
pipeline_settings_input = dependencies.get_processing_inputs(
756+
descriptor="pipeline-settings"
757+
)[0]
758+
pipeline_settings_combiner = GlowsAncillaryCombiner(
759+
pipeline_settings_input, day_buffer
760+
)
761+
762+
datasets = glows_l2(
763+
input_dataset,
764+
pipeline_settings_combiner.combined_dataset,
765+
)
750766

751767
return datasets
752768

imap_processing/glows/l2/glows_l2.py

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,35 +8,55 @@
88

99
from imap_processing.cdf.imap_cdf_manager import ImapCdfAttributes
1010
from imap_processing.glows import FLAG_LENGTH
11-
from imap_processing.glows.l1b.glows_l1b_data import HistogramL1B
11+
from imap_processing.glows.l1b.glows_l1b_data import (
12+
HistogramL1B,
13+
PipelineSettings,
14+
)
1215
from imap_processing.glows.l2.glows_l2_data import DailyLightcurve, HistogramL2
16+
from imap_processing.spice.time import et_to_datetime64, ttj2000ns_to_et
1317

1418

15-
def glows_l2(input_dataset: xr.Dataset) -> list[xr.Dataset]:
19+
def glows_l2(
20+
input_dataset: xr.Dataset,
21+
pipeline_settings_dataset: xr.Dataset,
22+
) -> list[xr.Dataset]:
1623
"""
1724
Will process GLoWS L2 data from L1 data.
1825
1926
Parameters
2027
----------
2128
input_dataset : xarray.Dataset
2229
Input L1B dataset.
30+
pipeline_settings_dataset : xarray.Dataset
31+
Dataset containing pipeline settings from
32+
GlowsAncillaryCombiner.
2333
2434
Returns
2535
-------
26-
xarray.Dataset
27-
Glows L2 Dataset.
36+
list[xarray.Dataset]
37+
Glows L2 Dataset.
2838
"""
2939
cdf_attrs = ImapCdfAttributes()
3040
cdf_attrs.add_instrument_global_attrs("glows")
3141
cdf_attrs.add_instrument_variable_attrs("glows", "l2")
3242

33-
l2 = generate_l2(input_dataset)
43+
# Select pipeline settings for the day matching
44+
# the first epoch in the L1B data. Convert from
45+
# TT J2000 nanoseconds to datetime64 for indexing.
46+
day = et_to_datetime64(ttj2000ns_to_et(input_dataset["epoch"].data[0]))
47+
pipeline_settings = PipelineSettings(
48+
pipeline_settings_dataset.sel(epoch=day, method="nearest")
49+
)
50+
51+
l2 = generate_l2(input_dataset, pipeline_settings)
3452

3553
return [create_l2_dataset(l2, cdf_attrs)]
3654

3755

38-
# TODO: filter good times out
39-
def generate_l2(l1b_dataset: xr.Dataset) -> HistogramL2:
56+
def generate_l2(
57+
l1b_dataset: xr.Dataset,
58+
pipeline_settings: PipelineSettings,
59+
) -> HistogramL2:
4060
"""
4161
Generate L2 data from L1B data.
4262
@@ -46,15 +66,18 @@ def generate_l2(l1b_dataset: xr.Dataset) -> HistogramL2:
4666
----------
4767
l1b_dataset : xarray.Dataset
4868
Input L1B dataset.
69+
pipeline_settings : PipelineSettings
70+
Pipeline settings for active flags and offsets.
4971
5072
Returns
5173
-------
5274
HistogramL2
5375
L2 data in the form of a HistogramL2 dataclass.
5476
"""
77+
active_flags = np.array(pipeline_settings.active_bad_time_flags, dtype=float)
5578
# most of the values from L1B are averaged over a day
5679
good_data = l1b_dataset.isel(
57-
epoch=return_good_times(l1b_dataset["flags"], np.ones((FLAG_LENGTH,)))
80+
epoch=return_good_times(l1b_dataset["flags"], active_flags)
5881
)
5982
# todo: bad angle filter
6083
# TODO filter bad bins out. Needs to happen here while everything is still

imap_processing/tests/glows/conftest.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@ def l1b_hist_dataset(
6565

6666

6767
@pytest.fixture
68-
def l2_hist_dataset(l1b_datasets):
69-
return glows_l2(l1b_datasets)
68+
def l2_hist_dataset(l1b_hist_dataset, mock_pipeline_settings):
69+
return glows_l2(l1b_hist_dataset, mock_pipeline_settings)
7070

7171

7272
@pytest.fixture

imap_processing/tests/glows/test_glows_l2.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,17 @@
55
import xarray as xr
66

77
from imap_processing.glows.l1b.glows_l1b import glows_l1b
8-
from imap_processing.glows.l1b.glows_l1b_data import HistogramL1B
8+
from imap_processing.glows.l1b.glows_l1b_data import (
9+
HistogramL1B,
10+
PipelineSettings,
11+
)
912
from imap_processing.glows.l2.glows_l2 import (
1013
generate_l2,
1114
glows_l2,
1215
return_good_times,
1316
)
1417
from imap_processing.glows.l2.glows_l2_data import DailyLightcurve
18+
from imap_processing.spice.time import et_to_datetime64, ttj2000ns_to_et
1519
from imap_processing.tests.glows.conftest import mock_update_spice_parameters
1620

1721

@@ -52,7 +56,7 @@ def test_glows_l2(
5256
mock_pipeline_settings,
5357
mock_conversion_table_dict,
5458
)
55-
l2 = glows_l2(l1b_hist_dataset)[0]
59+
l2 = glows_l2(l1b_hist_dataset, mock_pipeline_settings)[0]
5660
assert l2.attrs["Logical_source"] == "imap_glows_l2_hist"
5761

5862
assert np.allclose(l2["filter_temperature_average"].values, [57.6], rtol=0.1)
@@ -91,7 +95,11 @@ def test_generate_l2(
9195
mock_pipeline_settings,
9296
mock_conversion_table_dict,
9397
)
94-
l2 = generate_l2(l1b_hist_dataset)
98+
day = et_to_datetime64(ttj2000ns_to_et(l1b_hist_dataset["epoch"].data[0]))
99+
pipeline_settings = PipelineSettings(
100+
mock_pipeline_settings.sel(epoch=day, method="nearest")
101+
)
102+
l2 = generate_l2(l1b_hist_dataset, pipeline_settings)
95103

96104
expected_values = {
97105
"filter_temperature_average": [57.59],

0 commit comments

Comments
 (0)