imap-processing 0.18.0__py3-none-any.whl → 0.19.2__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.

Files changed (122) hide show
  1. imap_processing/_version.py +2 -2
  2. imap_processing/ancillary/ancillary_dataset_combiner.py +161 -1
  3. imap_processing/cdf/config/imap_codice_global_cdf_attrs.yaml +6 -0
  4. imap_processing/cdf/config/imap_codice_l1a_variable_attrs.yaml +221 -1057
  5. imap_processing/cdf/config/imap_codice_l1b_variable_attrs.yaml +307 -283
  6. imap_processing/cdf/config/imap_codice_l2_variable_attrs.yaml +1044 -203
  7. imap_processing/cdf/config/imap_constant_attrs.yaml +4 -2
  8. imap_processing/cdf/config/imap_enamaps_l2-common_variable_attrs.yaml +11 -0
  9. imap_processing/cdf/config/imap_glows_l1b_variable_attrs.yaml +15 -1
  10. imap_processing/cdf/config/imap_hi_global_cdf_attrs.yaml +5 -0
  11. imap_processing/cdf/config/imap_hit_global_cdf_attrs.yaml +10 -4
  12. imap_processing/cdf/config/imap_idex_l2a_variable_attrs.yaml +33 -4
  13. imap_processing/cdf/config/imap_idex_l2b_variable_attrs.yaml +8 -91
  14. imap_processing/cdf/config/imap_idex_l2c_variable_attrs.yaml +106 -16
  15. imap_processing/cdf/config/imap_lo_global_cdf_attrs.yaml +5 -4
  16. imap_processing/cdf/config/imap_lo_l1a_variable_attrs.yaml +4 -15
  17. imap_processing/cdf/config/imap_lo_l1c_variable_attrs.yaml +189 -98
  18. imap_processing/cdf/config/imap_mag_global_cdf_attrs.yaml +85 -2
  19. imap_processing/cdf/config/imap_mag_l1c_variable_attrs.yaml +24 -1
  20. imap_processing/cdf/config/imap_ultra_global_cdf_attrs.yaml +20 -8
  21. imap_processing/cdf/config/imap_ultra_l1b_variable_attrs.yaml +45 -35
  22. imap_processing/cdf/config/imap_ultra_l1c_variable_attrs.yaml +110 -7
  23. imap_processing/cli.py +138 -93
  24. imap_processing/codice/codice_l0.py +2 -1
  25. imap_processing/codice/codice_l1a.py +167 -69
  26. imap_processing/codice/codice_l1b.py +42 -32
  27. imap_processing/codice/codice_l2.py +215 -9
  28. imap_processing/codice/constants.py +790 -603
  29. imap_processing/codice/data/lo_stepping_values.csv +1 -1
  30. imap_processing/decom.py +1 -4
  31. imap_processing/ena_maps/ena_maps.py +71 -43
  32. imap_processing/ena_maps/utils/corrections.py +291 -0
  33. imap_processing/ena_maps/utils/map_utils.py +20 -4
  34. imap_processing/ena_maps/utils/naming.py +8 -2
  35. imap_processing/glows/ancillary/imap_glows_exclusions-by-instr-team_20250923_v002.dat +10 -0
  36. imap_processing/glows/ancillary/imap_glows_map-of-excluded-regions_20250923_v002.dat +393 -0
  37. imap_processing/glows/ancillary/imap_glows_map-of-uv-sources_20250923_v002.dat +593 -0
  38. imap_processing/glows/ancillary/imap_glows_pipeline-settings_20250923_v002.json +54 -0
  39. imap_processing/glows/ancillary/imap_glows_suspected-transients_20250923_v002.dat +10 -0
  40. imap_processing/glows/l1b/glows_l1b.py +123 -18
  41. imap_processing/glows/l1b/glows_l1b_data.py +358 -47
  42. imap_processing/glows/l2/glows_l2.py +11 -0
  43. imap_processing/hi/hi_l1a.py +124 -3
  44. imap_processing/hi/hi_l1b.py +154 -71
  45. imap_processing/hi/hi_l1c.py +4 -109
  46. imap_processing/hi/hi_l2.py +104 -60
  47. imap_processing/hi/utils.py +262 -8
  48. imap_processing/hit/l0/constants.py +3 -0
  49. imap_processing/hit/l0/decom_hit.py +3 -6
  50. imap_processing/hit/l1a/hit_l1a.py +311 -21
  51. imap_processing/hit/l1b/hit_l1b.py +54 -126
  52. imap_processing/hit/l2/hit_l2.py +6 -6
  53. imap_processing/ialirt/calculate_ingest.py +219 -0
  54. imap_processing/ialirt/constants.py +12 -2
  55. imap_processing/ialirt/generate_coverage.py +15 -2
  56. imap_processing/ialirt/l0/ialirt_spice.py +6 -2
  57. imap_processing/ialirt/l0/parse_mag.py +293 -42
  58. imap_processing/ialirt/l0/process_hit.py +5 -3
  59. imap_processing/ialirt/l0/process_swapi.py +41 -25
  60. imap_processing/ialirt/process_ephemeris.py +70 -14
  61. imap_processing/ialirt/utils/create_xarray.py +1 -1
  62. imap_processing/idex/idex_l0.py +2 -2
  63. imap_processing/idex/idex_l1a.py +2 -3
  64. imap_processing/idex/idex_l1b.py +2 -3
  65. imap_processing/idex/idex_l2a.py +130 -4
  66. imap_processing/idex/idex_l2b.py +158 -143
  67. imap_processing/idex/idex_utils.py +1 -3
  68. imap_processing/lo/ancillary_data/imap_lo_hydrogen-geometric-factor_v001.csv +75 -0
  69. imap_processing/lo/ancillary_data/imap_lo_oxygen-geometric-factor_v001.csv +75 -0
  70. imap_processing/lo/l0/lo_science.py +25 -24
  71. imap_processing/lo/l1b/lo_l1b.py +93 -19
  72. imap_processing/lo/l1c/lo_l1c.py +273 -93
  73. imap_processing/lo/l2/lo_l2.py +949 -135
  74. imap_processing/lo/lo_ancillary.py +55 -0
  75. imap_processing/mag/l1a/mag_l1a.py +1 -0
  76. imap_processing/mag/l1a/mag_l1a_data.py +26 -0
  77. imap_processing/mag/l1b/mag_l1b.py +3 -2
  78. imap_processing/mag/l1c/interpolation_methods.py +14 -15
  79. imap_processing/mag/l1c/mag_l1c.py +23 -6
  80. imap_processing/mag/l1d/mag_l1d.py +57 -14
  81. imap_processing/mag/l1d/mag_l1d_data.py +202 -32
  82. imap_processing/mag/l2/mag_l2.py +2 -0
  83. imap_processing/mag/l2/mag_l2_data.py +14 -5
  84. imap_processing/quality_flags.py +23 -1
  85. imap_processing/spice/geometry.py +89 -39
  86. imap_processing/spice/pointing_frame.py +4 -8
  87. imap_processing/spice/repoint.py +78 -2
  88. imap_processing/spice/spin.py +28 -8
  89. imap_processing/spice/time.py +12 -22
  90. imap_processing/swapi/l1/swapi_l1.py +10 -4
  91. imap_processing/swapi/l2/swapi_l2.py +15 -17
  92. imap_processing/swe/l1b/swe_l1b.py +1 -2
  93. imap_processing/ultra/constants.py +30 -24
  94. imap_processing/ultra/l0/ultra_utils.py +9 -11
  95. imap_processing/ultra/l1a/ultra_l1a.py +1 -2
  96. imap_processing/ultra/l1b/badtimes.py +35 -11
  97. imap_processing/ultra/l1b/de.py +95 -31
  98. imap_processing/ultra/l1b/extendedspin.py +31 -16
  99. imap_processing/ultra/l1b/goodtimes.py +112 -0
  100. imap_processing/ultra/l1b/lookup_utils.py +281 -28
  101. imap_processing/ultra/l1b/quality_flag_filters.py +10 -1
  102. imap_processing/ultra/l1b/ultra_l1b.py +7 -7
  103. imap_processing/ultra/l1b/ultra_l1b_culling.py +169 -7
  104. imap_processing/ultra/l1b/ultra_l1b_extended.py +311 -69
  105. imap_processing/ultra/l1c/helio_pset.py +139 -37
  106. imap_processing/ultra/l1c/l1c_lookup_utils.py +289 -0
  107. imap_processing/ultra/l1c/spacecraft_pset.py +140 -29
  108. imap_processing/ultra/l1c/ultra_l1c.py +33 -24
  109. imap_processing/ultra/l1c/ultra_l1c_culling.py +92 -0
  110. imap_processing/ultra/l1c/ultra_l1c_pset_bins.py +400 -292
  111. imap_processing/ultra/l2/ultra_l2.py +54 -11
  112. imap_processing/ultra/utils/ultra_l1_utils.py +37 -7
  113. imap_processing/utils.py +3 -4
  114. {imap_processing-0.18.0.dist-info → imap_processing-0.19.2.dist-info}/METADATA +2 -2
  115. {imap_processing-0.18.0.dist-info → imap_processing-0.19.2.dist-info}/RECORD +118 -109
  116. imap_processing/idex/idex_l2c.py +0 -84
  117. imap_processing/spice/kernels.py +0 -187
  118. imap_processing/ultra/l1b/cullingmask.py +0 -87
  119. imap_processing/ultra/l1c/histogram.py +0 -36
  120. {imap_processing-0.18.0.dist-info → imap_processing-0.19.2.dist-info}/LICENSE +0 -0
  121. {imap_processing-0.18.0.dist-info → imap_processing-0.19.2.dist-info}/WHEEL +0 -0
  122. {imap_processing-0.18.0.dist-info → imap_processing-0.19.2.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,10 @@
1
+ # Description: list of transients for L1b defined by IMAP/GLOWS Instrument Team for ground-processing pipeline in the IMAP SDC
2
+ # Value 1 in mask_array means that a given bin is suspected transient
3
+ # version: 0.2
4
+ # columns: l1b_unique_block_identifier, histogram_mask_array
5
+ 2013-09-08T09:46:14 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
6
+ 2013-09-08T09:48:14 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
7
+ 2014-09-08T19:15:01 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
8
+ 2014-09-08T19:17:01 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
9
+ 2015-06-06T17:58:00 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
10
+ 2015-06-06T18:00:00 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
@@ -1,16 +1,32 @@
1
1
  """Methods for processing GLOWS L1B data."""
2
2
 
3
3
  import dataclasses
4
+ import json
5
+ from pathlib import Path
4
6
 
5
7
  import numpy as np
6
8
  import xarray as xr
7
9
 
8
10
  from imap_processing.cdf.imap_cdf_manager import ImapCdfAttributes
9
11
  from imap_processing.glows import FLAG_LENGTH
10
- from imap_processing.glows.l1b.glows_l1b_data import DirectEventL1B, HistogramL1B
11
-
12
-
13
- def glows_l1b(input_dataset: xr.Dataset) -> xr.Dataset:
12
+ from imap_processing.glows.l1b.glows_l1b_data import (
13
+ AncillaryExclusions,
14
+ AncillaryParameters,
15
+ DirectEventL1B,
16
+ HistogramL1B,
17
+ PipelineSettings,
18
+ )
19
+ from imap_processing.spice.time import et_to_datetime64, ttj2000ns_to_et
20
+
21
+
22
+ def glows_l1b(
23
+ input_dataset: xr.Dataset,
24
+ excluded_regions: xr.Dataset,
25
+ uv_sources: xr.Dataset,
26
+ suspected_transients: xr.Dataset,
27
+ exclusions_by_instr_team: xr.Dataset,
28
+ pipeline_settings_dataset: xr.Dataset,
29
+ ) -> xr.Dataset:
14
30
  """
15
31
  Will process the GLOWS L1B data and format the output datasets.
16
32
 
@@ -18,6 +34,21 @@ def glows_l1b(input_dataset: xr.Dataset) -> xr.Dataset:
18
34
  ----------
19
35
  input_dataset : xr.Dataset
20
36
  Dataset of input values.
37
+ excluded_regions : xr.Dataset
38
+ Dataset containing excluded sky regions with ecliptic coordinates. This
39
+ is the output from GlowsAncillaryCombiner.
40
+ uv_sources : xr.Dataset
41
+ Dataset containing UV sources (stars) with coordinates and masking radii. It is
42
+ the output from GlowsAncillaryCombiner.
43
+ suspected_transients : xr.Dataset
44
+ Dataset containing suspected transient signals with time-based masks. This is
45
+ the output from GlowsAncillaryCombiner.
46
+ exclusions_by_instr_team : xr.Dataset
47
+ Dataset containing manual exclusions by instrument team with time-based masks.
48
+ This is the output from GlowsAncillaryCombiner.
49
+ pipeline_settings_dataset : xr.Dataset
50
+ Dataset containing pipeline settings, including the L1B conversion table and
51
+ other ancillary parameters.
21
52
 
22
53
  Returns
23
54
  -------
@@ -28,6 +59,24 @@ def glows_l1b(input_dataset: xr.Dataset) -> xr.Dataset:
28
59
  cdf_attrs.add_instrument_global_attrs("glows")
29
60
  cdf_attrs.add_instrument_variable_attrs("glows", "l1b")
30
61
 
62
+ day = et_to_datetime64(ttj2000ns_to_et(input_dataset["epoch"].data[0]))
63
+
64
+ # Create ancillary exclusions object from passed-in datasets
65
+ ancillary_exclusions = AncillaryExclusions(
66
+ excluded_regions=excluded_regions,
67
+ uv_sources=uv_sources,
68
+ suspected_transients=suspected_transients,
69
+ exclusions_by_instr_team=exclusions_by_instr_team,
70
+ )
71
+ pipeline_settings = PipelineSettings(
72
+ pipeline_settings_dataset.sel(epoch=day, method="nearest"),
73
+ )
74
+
75
+ with open(
76
+ Path(__file__).parents[1] / "ancillary" / "l1b_conversion_table_v001.json"
77
+ ) as f:
78
+ ancillary_parameters = AncillaryParameters(json.loads(f.read()))
79
+
31
80
  logical_source = (
32
81
  input_dataset.attrs["Logical_source"][0]
33
82
  if isinstance(input_dataset.attrs["Logical_source"], list)
@@ -35,7 +84,12 @@ def glows_l1b(input_dataset: xr.Dataset) -> xr.Dataset:
35
84
  )
36
85
 
37
86
  if "hist" in logical_source:
38
- output_dataset = create_l1b_hist_output(input_dataset, cdf_attrs)
87
+ output_dataarrays = process_histogram(
88
+ input_dataset, ancillary_exclusions, ancillary_parameters, pipeline_settings
89
+ )
90
+ output_dataset = create_l1b_hist_output(
91
+ output_dataarrays, input_dataset["epoch"], input_dataset["bins"], cdf_attrs
92
+ )
39
93
 
40
94
  elif "de" in logical_source:
41
95
  output_dataset = create_l1b_de_output(input_dataset, cdf_attrs)
@@ -114,7 +168,12 @@ def process_de(l1a: xr.Dataset) -> tuple[xr.DataArray]:
114
168
  return l1b_fields
115
169
 
116
170
 
117
- def process_histogram(l1a: xr.Dataset) -> xr.Dataset:
171
+ def process_histogram(
172
+ l1a: xr.Dataset,
173
+ ancillary_exclusions: AncillaryExclusions,
174
+ ancillary_parameters: AncillaryParameters,
175
+ pipeline_settings: PipelineSettings,
176
+ ) -> xr.Dataset:
118
177
  """
119
178
  Will process the histogram data from the L1A dataset and return the L1B dataset.
120
179
 
@@ -128,6 +187,12 @@ def process_histogram(l1a: xr.Dataset) -> xr.Dataset:
128
187
  ----------
129
188
  l1a : xr.Dataset
130
189
  The L1A dataset to process.
190
+ ancillary_exclusions : AncillaryExclusions
191
+ The ancillary exclusions data for bad-angle flag processing.
192
+ ancillary_parameters : AncillaryParameters
193
+ The ancillary parameters for decoding histogram data.
194
+ pipeline_settings : PipelineSettings
195
+ The pipeline settings including flag activation.
131
196
 
132
197
  Returns
133
198
  -------
@@ -149,6 +214,8 @@ def process_histogram(l1a: xr.Dataset) -> xr.Dataset:
149
214
  "spacecraft_location_std_dev": ["ecliptic"],
150
215
  "spacecraft_velocity_average": ["ecliptic"],
151
216
  "spacecraft_velocity_std_dev": ["ecliptic"],
217
+ "spin_axis_orientation_average": ["latitudinal"],
218
+ "spin_axis_orientation_std_dev": ["latitudinal"],
152
219
  "flags": ["flag_dim"],
153
220
  }
154
221
 
@@ -165,8 +232,27 @@ def process_histogram(l1a: xr.Dataset) -> xr.Dataset:
165
232
  # The rest of the input vars are epoch only, so they have an empty list.
166
233
  input_dims[0] = ["bins"]
167
234
 
235
+ # Create a closure that captures the ancillary objects
236
+ def create_histogram_l1b(*args) -> tuple: # type: ignore[no-untyped-def]
237
+ """
238
+ Create HistogramL1B object with captured ancillary data.
239
+
240
+ Parameters
241
+ ----------
242
+ *args
243
+ Variable arguments passed from xr.apply_ufunc containing L1A data.
244
+
245
+ Returns
246
+ -------
247
+ tuple
248
+ Tuple of processed L1B data arrays from HistogramL1B.output_data().
249
+ """
250
+ return HistogramL1B( # type: ignore[call-arg]
251
+ *args, ancillary_exclusions, ancillary_parameters, pipeline_settings
252
+ ).output_data()
253
+
168
254
  l1b_fields = xr.apply_ufunc(
169
- lambda *args: HistogramL1B(*args).output_data(),
255
+ create_histogram_l1b,
170
256
  *dataarrays,
171
257
  input_core_dims=input_dims,
172
258
  output_core_dims=output_dims,
@@ -179,19 +265,30 @@ def process_histogram(l1a: xr.Dataset) -> xr.Dataset:
179
265
 
180
266
 
181
267
  def create_l1b_hist_output(
182
- input_dataset: xr.Dataset, cdf_attrs: ImapCdfAttributes
268
+ l1b_dataarrays: tuple[xr.DataArray],
269
+ epoch: xr.DataArray,
270
+ bin_coord: xr.DataArray,
271
+ cdf_attrs: ImapCdfAttributes,
183
272
  ) -> xr.Dataset:
184
273
  """
185
274
  Create the output dataset for the L1B histogram data.
186
275
 
187
- This function processes the input dataset and creates a new dataset with the
188
- appropriate attributes and data variables. It uses the `process_histogram` function
189
- to process the histogram data.
276
+ This function takes in the output from `process_histogram`, which is a tuple of
277
+ DataArrays matching the output L1B data variables, and assembles them into a
278
+ Dataset with the appropriate coordinates.
190
279
 
191
280
  Parameters
192
281
  ----------
193
- input_dataset : xr.Dataset
194
- The input L1A GLOWS Histogram dataset to process.
282
+ l1b_dataarrays : tuple[xr.DataArray]
283
+ The DataArrays for each variable in the L1B dataset. These align with the
284
+ fields in the HistogramL1B dataclass, which also describes each variable.
285
+ epoch : xr.DataArray
286
+ The epoch DataArray to use as a coordinate in the output dataset. Generally
287
+ equal to the L1A epoch.
288
+ bin_coord : xr.DataArray
289
+ An arange DataArray for the bins coordinate. Nominally expected to be equal to
290
+ `xr.DataArray(np.arange(number_of_bins_per_histogram), name="bins",
291
+ dims=["bins"])`. Pulled up from L1A.
195
292
  cdf_attrs : ImapCdfAttributes
196
293
  The CDF attributes to use for the output dataset.
197
294
 
@@ -200,7 +297,7 @@ def create_l1b_hist_output(
200
297
  output_dataset : xr.Dataset
201
298
  The output dataset with the processed histogram data and all attributes.
202
299
  """
203
- data_epoch = input_dataset["epoch"]
300
+ data_epoch = epoch
204
301
  data_epoch.attrs = cdf_attrs.get_variable_attributes("epoch", check_schema=False)
205
302
 
206
303
  flag_data = xr.DataArray(
@@ -230,8 +327,17 @@ def create_l1b_hist_output(
230
327
  attrs=cdf_attrs.get_variable_attributes("ecliptic_attrs", check_schema=False),
231
328
  )
232
329
 
330
+ latitudinal_data = xr.DataArray(
331
+ np.arange(2),
332
+ name="latitudinal",
333
+ dims=["latitudinal"],
334
+ attrs=cdf_attrs.get_variable_attributes(
335
+ "latitudinal_attrs", check_schema=False
336
+ ),
337
+ )
338
+
233
339
  bin_data = xr.DataArray(
234
- input_dataset["bins"].data,
340
+ bin_coord.data,
235
341
  name="bins",
236
342
  dims=["bins"],
237
343
  attrs=cdf_attrs.get_variable_attributes("bins_attrs", check_schema=False),
@@ -244,8 +350,6 @@ def create_l1b_hist_output(
244
350
  attrs=cdf_attrs.get_variable_attributes("bins_label", check_schema=False),
245
351
  )
246
352
 
247
- output_dataarrays = process_histogram(input_dataset)
248
-
249
353
  output_dataset = xr.Dataset(
250
354
  coords={
251
355
  "epoch": data_epoch,
@@ -254,6 +358,7 @@ def create_l1b_hist_output(
254
358
  "bad_angle_flags": bad_flag_data,
255
359
  "bad_time_flags": flag_data,
256
360
  "ecliptic": eclipic_data,
361
+ "latitudinal": latitudinal_data,
257
362
  },
258
363
  attrs=cdf_attrs.get_global_attributes("imap_glows_l1b_hist"),
259
364
  )
@@ -262,7 +367,7 @@ def create_l1b_hist_output(
262
367
  # HistogramL1B dataclass, we can use dataclasses.fields to get the field names.
263
368
 
264
369
  fields = dataclasses.fields(HistogramL1B)
265
- for index, dataarray in enumerate(output_dataarrays):
370
+ for index, dataarray in enumerate(l1b_dataarrays):
266
371
  # Dataarray is already an xr.DataArray type, so we can just assign it
267
372
  output_dataset[fields[index].name] = dataarray
268
373
  output_dataset[fields[index].name].attrs = cdf_attrs.get_variable_attributes(