imap-processing 0.17.0__py3-none-any.whl → 0.19.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of imap-processing might be problematic. Click here for more details.
- imap_processing/_version.py +2 -2
- imap_processing/ancillary/ancillary_dataset_combiner.py +161 -1
- imap_processing/ccsds/excel_to_xtce.py +12 -0
- imap_processing/cdf/config/imap_codice_global_cdf_attrs.yaml +6 -6
- imap_processing/cdf/config/imap_codice_l1a_variable_attrs.yaml +312 -274
- imap_processing/cdf/config/imap_codice_l1b_variable_attrs.yaml +39 -28
- imap_processing/cdf/config/imap_codice_l2_variable_attrs.yaml +1048 -183
- imap_processing/cdf/config/imap_constant_attrs.yaml +4 -2
- imap_processing/cdf/config/imap_glows_l1b_variable_attrs.yaml +12 -0
- imap_processing/cdf/config/imap_hi_global_cdf_attrs.yaml +5 -0
- imap_processing/cdf/config/imap_hit_global_cdf_attrs.yaml +10 -4
- imap_processing/cdf/config/imap_hit_l1a_variable_attrs.yaml +163 -100
- imap_processing/cdf/config/imap_hit_l2_variable_attrs.yaml +4 -4
- imap_processing/cdf/config/imap_ialirt_l1_variable_attrs.yaml +97 -54
- imap_processing/cdf/config/imap_idex_l2a_variable_attrs.yaml +33 -4
- imap_processing/cdf/config/imap_idex_l2b_variable_attrs.yaml +44 -44
- imap_processing/cdf/config/imap_idex_l2c_variable_attrs.yaml +77 -61
- imap_processing/cdf/config/imap_lo_global_cdf_attrs.yaml +30 -0
- imap_processing/cdf/config/imap_lo_l1a_variable_attrs.yaml +4 -15
- imap_processing/cdf/config/imap_lo_l1c_variable_attrs.yaml +189 -98
- imap_processing/cdf/config/imap_mag_global_cdf_attrs.yaml +99 -2
- imap_processing/cdf/config/imap_mag_l1c_variable_attrs.yaml +24 -1
- imap_processing/cdf/config/imap_ultra_global_cdf_attrs.yaml +60 -0
- imap_processing/cdf/config/imap_ultra_l1b_variable_attrs.yaml +99 -11
- imap_processing/cdf/config/imap_ultra_l1c_variable_attrs.yaml +50 -7
- imap_processing/cli.py +121 -44
- imap_processing/codice/codice_l1a.py +165 -77
- imap_processing/codice/codice_l1b.py +1 -1
- imap_processing/codice/codice_l2.py +118 -19
- imap_processing/codice/constants.py +1217 -1089
- imap_processing/decom.py +1 -4
- imap_processing/ena_maps/ena_maps.py +32 -25
- imap_processing/ena_maps/utils/naming.py +8 -2
- imap_processing/glows/ancillary/imap_glows_exclusions-by-instr-team_20250923_v002.dat +10 -0
- imap_processing/glows/ancillary/imap_glows_map-of-excluded-regions_20250923_v002.dat +393 -0
- imap_processing/glows/ancillary/imap_glows_map-of-uv-sources_20250923_v002.dat +593 -0
- imap_processing/glows/ancillary/imap_glows_pipeline_settings_20250923_v002.json +54 -0
- imap_processing/glows/ancillary/imap_glows_suspected-transients_20250923_v002.dat +10 -0
- imap_processing/glows/l1b/glows_l1b.py +99 -9
- imap_processing/glows/l1b/glows_l1b_data.py +350 -38
- imap_processing/glows/l2/glows_l2.py +11 -0
- imap_processing/hi/hi_l1a.py +124 -3
- imap_processing/hi/hi_l1b.py +154 -71
- imap_processing/hi/hi_l2.py +84 -51
- imap_processing/hi/utils.py +153 -8
- imap_processing/hit/l0/constants.py +3 -0
- imap_processing/hit/l0/decom_hit.py +5 -8
- imap_processing/hit/l1a/hit_l1a.py +375 -45
- imap_processing/hit/l1b/constants.py +5 -0
- imap_processing/hit/l1b/hit_l1b.py +61 -131
- imap_processing/hit/l2/constants.py +1 -1
- imap_processing/hit/l2/hit_l2.py +10 -11
- imap_processing/ialirt/calculate_ingest.py +219 -0
- imap_processing/ialirt/constants.py +32 -1
- imap_processing/ialirt/generate_coverage.py +201 -0
- imap_processing/ialirt/l0/ialirt_spice.py +5 -2
- imap_processing/ialirt/l0/parse_mag.py +337 -29
- imap_processing/ialirt/l0/process_hit.py +5 -3
- imap_processing/ialirt/l0/process_swapi.py +41 -25
- imap_processing/ialirt/l0/process_swe.py +23 -7
- imap_processing/ialirt/process_ephemeris.py +70 -14
- imap_processing/ialirt/utils/constants.py +22 -16
- imap_processing/ialirt/utils/create_xarray.py +42 -19
- imap_processing/idex/idex_constants.py +1 -5
- imap_processing/idex/idex_l0.py +2 -2
- imap_processing/idex/idex_l1a.py +2 -3
- imap_processing/idex/idex_l1b.py +2 -3
- imap_processing/idex/idex_l2a.py +130 -4
- imap_processing/idex/idex_l2b.py +313 -119
- imap_processing/idex/idex_utils.py +1 -3
- imap_processing/lo/l0/lo_apid.py +1 -0
- imap_processing/lo/l0/lo_science.py +25 -24
- imap_processing/lo/l1a/lo_l1a.py +44 -0
- imap_processing/lo/l1b/lo_l1b.py +3 -3
- imap_processing/lo/l1c/lo_l1c.py +116 -50
- imap_processing/lo/l2/lo_l2.py +29 -29
- imap_processing/lo/lo_ancillary.py +55 -0
- imap_processing/lo/packet_definitions/lo_xtce.xml +5359 -106
- imap_processing/mag/constants.py +1 -0
- imap_processing/mag/l1a/mag_l1a.py +1 -0
- imap_processing/mag/l1a/mag_l1a_data.py +26 -0
- imap_processing/mag/l1b/mag_l1b.py +3 -2
- imap_processing/mag/l1c/interpolation_methods.py +14 -15
- imap_processing/mag/l1c/mag_l1c.py +23 -6
- imap_processing/mag/l1d/__init__.py +0 -0
- imap_processing/mag/l1d/mag_l1d.py +176 -0
- imap_processing/mag/l1d/mag_l1d_data.py +725 -0
- imap_processing/mag/l2/__init__.py +0 -0
- imap_processing/mag/l2/mag_l2.py +25 -20
- imap_processing/mag/l2/mag_l2_data.py +199 -130
- imap_processing/quality_flags.py +28 -2
- imap_processing/spice/geometry.py +101 -36
- imap_processing/spice/pointing_frame.py +1 -7
- imap_processing/spice/repoint.py +29 -2
- imap_processing/spice/spin.py +32 -8
- imap_processing/spice/time.py +60 -19
- imap_processing/swapi/l1/swapi_l1.py +10 -4
- imap_processing/swapi/l2/swapi_l2.py +66 -24
- imap_processing/swapi/swapi_utils.py +1 -1
- imap_processing/swe/l1b/swe_l1b.py +3 -6
- imap_processing/ultra/constants.py +28 -3
- imap_processing/ultra/l0/decom_tools.py +15 -8
- imap_processing/ultra/l0/decom_ultra.py +35 -11
- imap_processing/ultra/l0/ultra_utils.py +102 -12
- imap_processing/ultra/l1a/ultra_l1a.py +26 -6
- imap_processing/ultra/l1b/cullingmask.py +6 -3
- imap_processing/ultra/l1b/de.py +122 -26
- imap_processing/ultra/l1b/extendedspin.py +29 -2
- imap_processing/ultra/l1b/lookup_utils.py +424 -50
- imap_processing/ultra/l1b/quality_flag_filters.py +23 -0
- imap_processing/ultra/l1b/ultra_l1b_culling.py +356 -5
- imap_processing/ultra/l1b/ultra_l1b_extended.py +534 -90
- imap_processing/ultra/l1c/helio_pset.py +127 -7
- imap_processing/ultra/l1c/l1c_lookup_utils.py +256 -0
- imap_processing/ultra/l1c/spacecraft_pset.py +90 -15
- imap_processing/ultra/l1c/ultra_l1c.py +6 -0
- imap_processing/ultra/l1c/ultra_l1c_culling.py +85 -0
- imap_processing/ultra/l1c/ultra_l1c_pset_bins.py +446 -341
- imap_processing/ultra/l2/ultra_l2.py +0 -1
- imap_processing/ultra/utils/ultra_l1_utils.py +40 -3
- imap_processing/utils.py +3 -4
- {imap_processing-0.17.0.dist-info → imap_processing-0.19.0.dist-info}/METADATA +3 -3
- {imap_processing-0.17.0.dist-info → imap_processing-0.19.0.dist-info}/RECORD +126 -126
- imap_processing/idex/idex_l2c.py +0 -250
- imap_processing/spice/kernels.py +0 -187
- imap_processing/ultra/lookup_tables/Angular_Profiles_FM45_LeftSlit.csv +0 -526
- imap_processing/ultra/lookup_tables/Angular_Profiles_FM45_RightSlit.csv +0 -526
- imap_processing/ultra/lookup_tables/Angular_Profiles_FM90_LeftSlit.csv +0 -526
- imap_processing/ultra/lookup_tables/Angular_Profiles_FM90_RightSlit.csv +0 -524
- imap_processing/ultra/lookup_tables/EgyNorm.mem.csv +0 -32769
- imap_processing/ultra/lookup_tables/FM45_Startup1_ULTRA_IMGPARAMS_20240719.csv +0 -2
- imap_processing/ultra/lookup_tables/FM90_Startup1_ULTRA_IMGPARAMS_20240719.csv +0 -2
- imap_processing/ultra/lookup_tables/dps_grid45_compressed.cdf +0 -0
- imap_processing/ultra/lookup_tables/ultra45_back-pos-luts.csv +0 -4097
- imap_processing/ultra/lookup_tables/ultra45_tdc_norm.csv +0 -2050
- imap_processing/ultra/lookup_tables/ultra90_back-pos-luts.csv +0 -4097
- imap_processing/ultra/lookup_tables/ultra90_tdc_norm.csv +0 -2050
- imap_processing/ultra/lookup_tables/yadjust.csv +0 -257
- {imap_processing-0.17.0.dist-info → imap_processing-0.19.0.dist-info}/LICENSE +0 -0
- {imap_processing-0.17.0.dist-info → imap_processing-0.19.0.dist-info}/WHEEL +0 -0
- {imap_processing-0.17.0.dist-info → imap_processing-0.19.0.dist-info}/entry_points.txt +0 -0
imap_processing/cli.py
CHANGED
|
@@ -36,7 +36,10 @@ from imap_data_access.processing_input import (
|
|
|
36
36
|
|
|
37
37
|
import imap_processing
|
|
38
38
|
from imap_processing._version import __version__, __version_tuple__ # noqa: F401
|
|
39
|
-
from imap_processing.ancillary.ancillary_dataset_combiner import
|
|
39
|
+
from imap_processing.ancillary.ancillary_dataset_combiner import (
|
|
40
|
+
GlowsAncillaryCombiner,
|
|
41
|
+
MagAncillaryCombiner,
|
|
42
|
+
)
|
|
40
43
|
from imap_processing.cdf.utils import load_cdf, write_cdf
|
|
41
44
|
|
|
42
45
|
# TODO: change how we import things and also folder
|
|
@@ -59,7 +62,6 @@ from imap_processing.idex.idex_l1a import PacketParser
|
|
|
59
62
|
from imap_processing.idex.idex_l1b import idex_l1b
|
|
60
63
|
from imap_processing.idex.idex_l2a import idex_l2a
|
|
61
64
|
from imap_processing.idex.idex_l2b import idex_l2b
|
|
62
|
-
from imap_processing.idex.idex_l2c import idex_l2c
|
|
63
65
|
from imap_processing.lo.l1a import lo_l1a
|
|
64
66
|
from imap_processing.lo.l1b import lo_l1b
|
|
65
67
|
from imap_processing.lo.l1c import lo_l1c
|
|
@@ -68,6 +70,7 @@ from imap_processing.mag.constants import DataMode
|
|
|
68
70
|
from imap_processing.mag.l1a.mag_l1a import mag_l1a
|
|
69
71
|
from imap_processing.mag.l1b.mag_l1b import mag_l1b
|
|
70
72
|
from imap_processing.mag.l1c.mag_l1c import mag_l1c
|
|
73
|
+
from imap_processing.mag.l1d.mag_l1d import mag_l1d
|
|
71
74
|
from imap_processing.mag.l2.mag_l2 import mag_l2
|
|
72
75
|
from imap_processing.spacecraft import quaternions
|
|
73
76
|
from imap_processing.spice import pointing_frame, repoint, spin
|
|
@@ -378,7 +381,7 @@ class ProcessInstrument(ABC):
|
|
|
378
381
|
data_level: str,
|
|
379
382
|
data_descriptor: str,
|
|
380
383
|
dependency_str: str,
|
|
381
|
-
start_date: str
|
|
384
|
+
start_date: str,
|
|
382
385
|
repointing: str | None,
|
|
383
386
|
version: str,
|
|
384
387
|
upload_to_sdc: bool,
|
|
@@ -516,7 +519,7 @@ class ProcessInstrument(ABC):
|
|
|
516
519
|
self,
|
|
517
520
|
processed_data: list[xr.Dataset | Path],
|
|
518
521
|
dependencies: ProcessingInputCollection,
|
|
519
|
-
) ->
|
|
522
|
+
) -> list[Path]:
|
|
520
523
|
"""
|
|
521
524
|
Complete post-processing.
|
|
522
525
|
|
|
@@ -544,10 +547,17 @@ class ProcessInstrument(ABC):
|
|
|
544
547
|
method.
|
|
545
548
|
dependencies : ProcessingInputCollection
|
|
546
549
|
Object containing dependencies to process.
|
|
550
|
+
|
|
551
|
+
Returns
|
|
552
|
+
-------
|
|
553
|
+
list[Path]
|
|
554
|
+
List of paths to CDF files produced.
|
|
547
555
|
"""
|
|
556
|
+
products: list[Path] = []
|
|
557
|
+
|
|
548
558
|
if len(processed_data) == 0:
|
|
549
559
|
logger.info("No products to write to CDF file.")
|
|
550
|
-
return
|
|
560
|
+
return products
|
|
551
561
|
|
|
552
562
|
logger.info("Writing products to local storage")
|
|
553
563
|
|
|
@@ -567,7 +577,6 @@ class ProcessInstrument(ABC):
|
|
|
567
577
|
# start_date.
|
|
568
578
|
# If it is start_date, skip repointing in the output filename.
|
|
569
579
|
|
|
570
|
-
products = []
|
|
571
580
|
for ds in processed_data:
|
|
572
581
|
if isinstance(ds, xr.Dataset):
|
|
573
582
|
ds.attrs["Data_version"] = self.version[1:] # Strip 'v' from version
|
|
@@ -581,6 +590,7 @@ class ProcessInstrument(ABC):
|
|
|
581
590
|
products.append(ds)
|
|
582
591
|
|
|
583
592
|
self.upload_products(products)
|
|
593
|
+
return products
|
|
584
594
|
|
|
585
595
|
@final
|
|
586
596
|
def cleanup(self) -> None:
|
|
@@ -678,11 +688,58 @@ class Glows(ProcessInstrument):
|
|
|
678
688
|
science_files = dependencies.get_file_paths(source="glows")
|
|
679
689
|
if len(science_files) != 1:
|
|
680
690
|
raise ValueError(
|
|
681
|
-
f"GLOWS
|
|
691
|
+
f"GLOWS L1B requires exactly one input science file, received: "
|
|
682
692
|
f"{science_files}."
|
|
683
693
|
)
|
|
684
694
|
input_dataset = load_cdf(science_files[0])
|
|
685
|
-
|
|
695
|
+
# TODO: Replace this by reading from AWS/ProcessingInputs
|
|
696
|
+
|
|
697
|
+
glows_ancillary_dir = Path(__file__).parent / "glows" / "ancillary"
|
|
698
|
+
|
|
699
|
+
# Create file lists for each ancillary type
|
|
700
|
+
excluded_regions_files = [
|
|
701
|
+
glows_ancillary_dir
|
|
702
|
+
/ "imap_glows_map-of-excluded-regions_20250923_v002.dat"
|
|
703
|
+
]
|
|
704
|
+
uv_sources_files = [
|
|
705
|
+
glows_ancillary_dir / "imap_glows_map-of-uv-sources_20250923_v002.dat"
|
|
706
|
+
]
|
|
707
|
+
suspected_transients_files = [
|
|
708
|
+
glows_ancillary_dir
|
|
709
|
+
/ "imap_glows_suspected-transients_20250923_v002.dat"
|
|
710
|
+
]
|
|
711
|
+
exclusions_by_instr_team_files = [
|
|
712
|
+
glows_ancillary_dir
|
|
713
|
+
/ "imap_glows_exclusions-by-instr-team_20250923_v002.dat"
|
|
714
|
+
]
|
|
715
|
+
|
|
716
|
+
# Use end date buffer for ancillary data
|
|
717
|
+
current_day = np.datetime64(
|
|
718
|
+
f"{self.start_date[:4]}-{self.start_date[4:6]}-{self.start_date[6:]}"
|
|
719
|
+
)
|
|
720
|
+
day_buffer = current_day + np.timedelta64(3, "D")
|
|
721
|
+
|
|
722
|
+
# Create combiners for each ancillary dataset
|
|
723
|
+
excluded_regions_combiner = GlowsAncillaryCombiner(
|
|
724
|
+
excluded_regions_files, day_buffer
|
|
725
|
+
)
|
|
726
|
+
uv_sources_combiner = GlowsAncillaryCombiner(uv_sources_files, day_buffer)
|
|
727
|
+
suspected_transients_combiner = GlowsAncillaryCombiner(
|
|
728
|
+
suspected_transients_files, day_buffer
|
|
729
|
+
)
|
|
730
|
+
exclusions_by_instr_team_combiner = GlowsAncillaryCombiner(
|
|
731
|
+
exclusions_by_instr_team_files, day_buffer
|
|
732
|
+
)
|
|
733
|
+
|
|
734
|
+
datasets = [
|
|
735
|
+
glows_l1b(
|
|
736
|
+
input_dataset,
|
|
737
|
+
excluded_regions_combiner.combined_dataset,
|
|
738
|
+
uv_sources_combiner.combined_dataset,
|
|
739
|
+
suspected_transients_combiner.combined_dataset,
|
|
740
|
+
exclusions_by_instr_team_combiner.combined_dataset,
|
|
741
|
+
)
|
|
742
|
+
]
|
|
686
743
|
|
|
687
744
|
if self.data_level == "l2":
|
|
688
745
|
science_files = dependencies.get_file_paths(source="glows")
|
|
@@ -730,10 +787,18 @@ class Hi(ProcessInstrument):
|
|
|
730
787
|
elif self.data_level == "l1b":
|
|
731
788
|
l0_files = dependencies.get_file_paths(source="hi", descriptor="raw")
|
|
732
789
|
if l0_files:
|
|
733
|
-
datasets = hi_l1b.
|
|
790
|
+
datasets = hi_l1b.housekeeping(l0_files[0])
|
|
734
791
|
else:
|
|
735
|
-
|
|
736
|
-
|
|
792
|
+
l1a_de_file = dependencies.get_file_paths(
|
|
793
|
+
source="hi", data_type="l1a", descriptor="de"
|
|
794
|
+
)[0]
|
|
795
|
+
l1b_hk_file = dependencies.get_file_paths(
|
|
796
|
+
source="hi", data_type="l1b", descriptor="hk"
|
|
797
|
+
)[0]
|
|
798
|
+
esa_energies_csv = dependencies.get_file_paths(data_type="ancillary")[0]
|
|
799
|
+
datasets = hi_l1b.annotate_direct_events(
|
|
800
|
+
load_cdf(l1a_de_file), load_cdf(l1b_hk_file), esa_energies_csv
|
|
801
|
+
)
|
|
737
802
|
elif self.data_level == "l1c":
|
|
738
803
|
science_paths = dependencies.get_file_paths(source="hi", data_type="l1b")
|
|
739
804
|
if len(science_paths) != 1:
|
|
@@ -788,37 +853,41 @@ class Hit(ProcessInstrument):
|
|
|
788
853
|
|
|
789
854
|
dependency_list = dependencies.processing_input
|
|
790
855
|
if self.data_level == "l1a":
|
|
791
|
-
#
|
|
792
|
-
if len(dependency_list) >
|
|
856
|
+
# Two inputs - L0 and SPICE
|
|
857
|
+
if len(dependency_list) > 2:
|
|
793
858
|
raise ValueError(
|
|
794
859
|
f"Unexpected dependencies found for HIT L1A:"
|
|
795
|
-
f"{dependency_list}. Expected only
|
|
860
|
+
f"{dependency_list}. Expected only 2 dependencies, "
|
|
861
|
+
f"L0 and time kernels."
|
|
796
862
|
)
|
|
797
863
|
# process data to L1A products
|
|
798
864
|
science_files = dependencies.get_file_paths(source="hit", descriptor="raw")
|
|
799
|
-
datasets = hit_l1a(science_files[0])
|
|
865
|
+
datasets = hit_l1a(science_files[0], self.start_date)
|
|
800
866
|
|
|
801
867
|
elif self.data_level == "l1b":
|
|
802
|
-
data_dict = {}
|
|
803
|
-
# TODO: Sean removed the file number error handling to work with the
|
|
804
|
-
# new SPICE dependencies for SIT-4. Need to review and make changes
|
|
805
|
-
# if needed.
|
|
806
868
|
l0_files = dependencies.get_file_paths(source="hit", descriptor="raw")
|
|
807
869
|
l1a_files = dependencies.get_file_paths(source="hit", data_type="l1a")
|
|
808
|
-
if len(l0_files)
|
|
809
|
-
#
|
|
810
|
-
|
|
870
|
+
if len(l0_files) == 1:
|
|
871
|
+
# Path to CCSDS file to process housekeeping
|
|
872
|
+
dependency = l0_files[0]
|
|
811
873
|
else:
|
|
874
|
+
# 1 science file
|
|
875
|
+
if len(l1a_files) > 1:
|
|
876
|
+
raise ValueError(
|
|
877
|
+
f"Unexpected dependencies found for HIT L1B:"
|
|
878
|
+
f"{l1a_files}. Expected only one dependency."
|
|
879
|
+
)
|
|
812
880
|
# Add L1A dataset to process science data
|
|
813
|
-
|
|
814
|
-
data_dict[l1a_dataset.attrs["Logical_source"]] = l1a_dataset
|
|
881
|
+
dependency = load_cdf(l1a_files[0])
|
|
815
882
|
# process data to L1B products
|
|
816
|
-
datasets = hit_l1b(
|
|
883
|
+
datasets = [hit_l1b(dependency, self.descriptor)]
|
|
884
|
+
|
|
817
885
|
elif self.data_level == "l2":
|
|
886
|
+
# 1 science files and 4 ancillary files
|
|
818
887
|
if len(dependency_list) != 5:
|
|
819
888
|
raise ValueError(
|
|
820
889
|
f"Unexpected dependencies found for HIT L2:"
|
|
821
|
-
f"{dependency_list}. Expected only
|
|
890
|
+
f"{dependency_list}. Expected only five dependencies."
|
|
822
891
|
)
|
|
823
892
|
# Add L1B dataset to process science data
|
|
824
893
|
science_files = dependencies.get_file_paths(
|
|
@@ -838,7 +907,7 @@ class Hit(ProcessInstrument):
|
|
|
838
907
|
)
|
|
839
908
|
l1b_dataset = load_cdf(science_files[0])
|
|
840
909
|
# process data to L2 products
|
|
841
|
-
datasets = hit_l2(l1b_dataset, ancillary_files)
|
|
910
|
+
datasets = [hit_l2(l1b_dataset, ancillary_files)]
|
|
842
911
|
|
|
843
912
|
return datasets
|
|
844
913
|
|
|
@@ -887,14 +956,18 @@ class Idex(ProcessInstrument):
|
|
|
887
956
|
dependency = load_cdf(science_files[0])
|
|
888
957
|
datasets = [idex_l1b(dependency)]
|
|
889
958
|
elif self.data_level == "l2a":
|
|
890
|
-
if len(dependency_list) !=
|
|
959
|
+
if len(dependency_list) != 3:
|
|
891
960
|
raise ValueError(
|
|
892
961
|
f"Unexpected dependencies found for IDEX L2A:"
|
|
893
|
-
f"{dependency_list}. Expected
|
|
962
|
+
f"{dependency_list}. Expected three dependencies."
|
|
894
963
|
)
|
|
895
964
|
science_files = dependencies.get_file_paths(source="idex")
|
|
896
965
|
dependency = load_cdf(science_files[0])
|
|
897
|
-
|
|
966
|
+
anc_paths = dependencies.get_file_paths(data_type="ancillary")
|
|
967
|
+
ancillary_files = {}
|
|
968
|
+
for path in anc_paths:
|
|
969
|
+
ancillary_files[path.stem.split("_")[2]] = path
|
|
970
|
+
datasets = [idex_l2a(dependency, ancillary_files)]
|
|
898
971
|
elif self.data_level == "l2b":
|
|
899
972
|
if len(dependency_list) < 3 or len(dependency_list) > 4:
|
|
900
973
|
raise ValueError(
|
|
@@ -908,16 +981,7 @@ class Idex(ProcessInstrument):
|
|
|
908
981
|
hk_files = dependencies.get_file_paths(source="idex", descriptor="evt")
|
|
909
982
|
# Remove duplicate housekeeping files
|
|
910
983
|
hk_dependencies = [load_cdf(dep) for dep in list(set(hk_files))]
|
|
911
|
-
datasets =
|
|
912
|
-
elif self.data_level == "l2c":
|
|
913
|
-
if len(dependency_list) != 1:
|
|
914
|
-
raise ValueError(
|
|
915
|
-
f"Unexpected dependencies found for IDEX L2C:"
|
|
916
|
-
f"{dependency_list}. Expected only one dependency."
|
|
917
|
-
)
|
|
918
|
-
sci_files = dependencies.get_file_paths(source="idex", descriptor="sci-1mo")
|
|
919
|
-
dependency = load_cdf(sci_files[0])
|
|
920
|
-
datasets = idex_l2c(dependency)
|
|
984
|
+
datasets = idex_l2b(sci_dependencies, hk_dependencies)
|
|
921
985
|
return datasets
|
|
922
986
|
|
|
923
987
|
|
|
@@ -977,15 +1041,13 @@ class Lo(ProcessInstrument):
|
|
|
977
1041
|
data_dict = {}
|
|
978
1042
|
# TODO: Add ancillary descriptors when maps using them are
|
|
979
1043
|
# implemented.
|
|
980
|
-
anc_dependencies =
|
|
981
|
-
source="lo",
|
|
982
|
-
)
|
|
1044
|
+
anc_dependencies = []
|
|
983
1045
|
science_files = dependencies.get_file_paths(source="lo", descriptor="pset")
|
|
984
1046
|
psets = []
|
|
985
1047
|
for file in science_files:
|
|
986
1048
|
psets.append(load_cdf(file))
|
|
987
1049
|
data_dict[psets[0].attrs["Logical_source"]] = psets
|
|
988
|
-
datasets = lo_l2.lo_l2(data_dict, anc_dependencies)
|
|
1050
|
+
datasets = lo_l2.lo_l2(data_dict, anc_dependencies, self.descriptor)
|
|
989
1051
|
return datasets
|
|
990
1052
|
|
|
991
1053
|
|
|
@@ -1073,6 +1135,21 @@ class Mag(ProcessInstrument):
|
|
|
1073
1135
|
f"Invalid dependencies found for MAG L1C:"
|
|
1074
1136
|
f"{dependencies}. Expected one or two dependencies."
|
|
1075
1137
|
)
|
|
1138
|
+
if self.data_level == "l1d":
|
|
1139
|
+
science_files = dependencies.get_file_paths(source="mag", data_type="l1c")
|
|
1140
|
+
science_files.extend(
|
|
1141
|
+
dependencies.get_file_paths(source="mag", data_type="l1b")
|
|
1142
|
+
)
|
|
1143
|
+
input_data = [load_cdf(dep) for dep in science_files]
|
|
1144
|
+
calibration = dependencies.get_processing_inputs(
|
|
1145
|
+
descriptor="l1d-calibration"
|
|
1146
|
+
)
|
|
1147
|
+
combined_calibration = MagAncillaryCombiner(calibration[0], day_buffer)
|
|
1148
|
+
datasets = mag_l1d(
|
|
1149
|
+
input_data,
|
|
1150
|
+
combined_calibration.combined_dataset,
|
|
1151
|
+
current_day,
|
|
1152
|
+
)
|
|
1076
1153
|
|
|
1077
1154
|
if self.data_level == "l2":
|
|
1078
1155
|
science_files = dependencies.get_file_paths(source="mag", data_type="l1b")
|