imap-processing 0.12.0__py3-none-any.whl → 0.13.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.

Files changed (272) hide show
  1. imap_processing/__init__.py +1 -0
  2. imap_processing/_version.py +2 -2
  3. imap_processing/ccsds/ccsds_data.py +1 -2
  4. imap_processing/ccsds/excel_to_xtce.py +1 -2
  5. imap_processing/cdf/config/imap_codice_global_cdf_attrs.yaml +18 -12
  6. imap_processing/cdf/config/imap_codice_l1a_variable_attrs.yaml +569 -0
  7. imap_processing/cdf/config/imap_codice_l1b_variable_attrs.yaml +1846 -128
  8. imap_processing/cdf/config/imap_hit_global_cdf_attrs.yaml +5 -5
  9. imap_processing/cdf/config/imap_idex_global_cdf_attrs.yaml +20 -1
  10. imap_processing/cdf/config/imap_idex_l1a_variable_attrs.yaml +6 -4
  11. imap_processing/cdf/config/imap_idex_l1b_variable_attrs.yaml +3 -3
  12. imap_processing/cdf/config/imap_mag_global_cdf_attrs.yaml +15 -0
  13. imap_processing/cdf/config/imap_swapi_variable_attrs.yaml +22 -0
  14. imap_processing/cdf/config/imap_swe_l1b_variable_attrs.yaml +16 -0
  15. imap_processing/cdf/config/imap_ultra_global_cdf_attrs.yaml +178 -5
  16. imap_processing/cdf/config/imap_ultra_l1a_variable_attrs.yaml +5045 -41
  17. imap_processing/cdf/config/imap_ultra_l1b_variable_attrs.yaml +33 -19
  18. imap_processing/cdf/config/imap_ultra_l1c_variable_attrs.yaml +8 -48
  19. imap_processing/cdf/utils.py +41 -33
  20. imap_processing/cli.py +463 -234
  21. imap_processing/codice/codice_l1a.py +260 -47
  22. imap_processing/codice/codice_l1b.py +51 -152
  23. imap_processing/codice/constants.py +38 -1
  24. imap_processing/ena_maps/ena_maps.py +658 -65
  25. imap_processing/ena_maps/utils/coordinates.py +1 -1
  26. imap_processing/ena_maps/utils/spatial_utils.py +10 -5
  27. imap_processing/glows/l1a/glows_l1a.py +28 -99
  28. imap_processing/glows/l1a/glows_l1a_data.py +2 -2
  29. imap_processing/glows/l1b/glows_l1b.py +1 -4
  30. imap_processing/glows/l1b/glows_l1b_data.py +1 -3
  31. imap_processing/glows/l2/glows_l2.py +2 -5
  32. imap_processing/hi/l1a/hi_l1a.py +31 -12
  33. imap_processing/hi/l1b/hi_l1b.py +80 -43
  34. imap_processing/hi/l1c/hi_l1c.py +12 -16
  35. imap_processing/hit/ancillary/imap_hit_l1b-to-l2-sector-dt0-factors_20250219_v002.csv +81 -0
  36. imap_processing/hit/hit_utils.py +93 -35
  37. imap_processing/hit/l0/decom_hit.py +3 -1
  38. imap_processing/hit/l1a/hit_l1a.py +30 -25
  39. imap_processing/hit/l1b/constants.py +6 -2
  40. imap_processing/hit/l1b/hit_l1b.py +279 -318
  41. imap_processing/hit/l2/constants.py +37 -0
  42. imap_processing/hit/l2/hit_l2.py +373 -264
  43. imap_processing/ialirt/l0/parse_mag.py +138 -10
  44. imap_processing/ialirt/l0/process_swapi.py +69 -0
  45. imap_processing/ialirt/l0/process_swe.py +318 -22
  46. imap_processing/ialirt/packet_definitions/ialirt.xml +216 -212
  47. imap_processing/ialirt/packet_definitions/ialirt_codicehi.xml +1 -1
  48. imap_processing/ialirt/packet_definitions/ialirt_codicelo.xml +1 -1
  49. imap_processing/ialirt/packet_definitions/ialirt_swapi.xml +14 -14
  50. imap_processing/ialirt/utils/grouping.py +1 -1
  51. imap_processing/idex/idex_constants.py +9 -1
  52. imap_processing/idex/idex_l0.py +22 -8
  53. imap_processing/idex/idex_l1a.py +75 -44
  54. imap_processing/idex/idex_l1b.py +9 -8
  55. imap_processing/idex/idex_l2a.py +79 -45
  56. imap_processing/idex/idex_l2b.py +120 -0
  57. imap_processing/idex/idex_variable_unpacking_and_eu_conversion.csv +33 -39
  58. imap_processing/idex/packet_definitions/idex_housekeeping_packet_definition.xml +9130 -0
  59. imap_processing/lo/l0/lo_science.py +1 -2
  60. imap_processing/lo/l1a/lo_l1a.py +1 -4
  61. imap_processing/lo/l1b/lo_l1b.py +527 -6
  62. imap_processing/lo/l1b/tof_conversions.py +11 -0
  63. imap_processing/lo/l1c/lo_l1c.py +1 -4
  64. imap_processing/mag/constants.py +43 -0
  65. imap_processing/mag/imap_mag_sdc_configuration_v001.py +8 -0
  66. imap_processing/mag/l1a/mag_l1a.py +2 -9
  67. imap_processing/mag/l1a/mag_l1a_data.py +10 -10
  68. imap_processing/mag/l1b/mag_l1b.py +84 -17
  69. imap_processing/mag/l1c/interpolation_methods.py +180 -3
  70. imap_processing/mag/l1c/mag_l1c.py +236 -70
  71. imap_processing/mag/l2/mag_l2.py +140 -0
  72. imap_processing/mag/l2/mag_l2_data.py +288 -0
  73. imap_processing/spacecraft/quaternions.py +1 -3
  74. imap_processing/spice/geometry.py +3 -3
  75. imap_processing/spice/kernels.py +0 -276
  76. imap_processing/spice/pointing_frame.py +257 -0
  77. imap_processing/spice/repoint.py +48 -19
  78. imap_processing/spice/spin.py +38 -33
  79. imap_processing/spice/time.py +24 -0
  80. imap_processing/swapi/l1/swapi_l1.py +16 -12
  81. imap_processing/swapi/l2/swapi_l2.py +116 -4
  82. imap_processing/swapi/swapi_utils.py +32 -0
  83. imap_processing/swe/l1a/swe_l1a.py +2 -9
  84. imap_processing/swe/l1a/swe_science.py +8 -11
  85. imap_processing/swe/l1b/swe_l1b.py +898 -23
  86. imap_processing/swe/l2/swe_l2.py +21 -77
  87. imap_processing/swe/utils/swe_constants.py +1 -0
  88. imap_processing/tests/ccsds/test_excel_to_xtce.py +1 -1
  89. imap_processing/tests/cdf/test_utils.py +14 -16
  90. imap_processing/tests/codice/conftest.py +44 -33
  91. imap_processing/tests/codice/data/validation/imap_codice_l1a_hi-pha_20241110193700_v0.0.0.cdf +0 -0
  92. imap_processing/tests/codice/data/validation/imap_codice_l1a_lo-pha_20241110193700_v0.0.0.cdf +0 -0
  93. imap_processing/tests/codice/test_codice_l1a.py +20 -11
  94. imap_processing/tests/codice/test_codice_l1b.py +6 -7
  95. imap_processing/tests/conftest.py +78 -22
  96. imap_processing/tests/ena_maps/test_ena_maps.py +462 -33
  97. imap_processing/tests/ena_maps/test_spatial_utils.py +1 -1
  98. imap_processing/tests/glows/conftest.py +10 -14
  99. imap_processing/tests/glows/test_glows_decom.py +4 -4
  100. imap_processing/tests/glows/test_glows_l1a_cdf.py +6 -27
  101. imap_processing/tests/glows/test_glows_l1a_data.py +6 -8
  102. imap_processing/tests/glows/test_glows_l1b.py +11 -11
  103. imap_processing/tests/glows/test_glows_l1b_data.py +5 -5
  104. imap_processing/tests/glows/test_glows_l2.py +2 -8
  105. imap_processing/tests/hi/conftest.py +1 -1
  106. imap_processing/tests/hi/test_hi_l1b.py +10 -12
  107. imap_processing/tests/hi/test_hi_l1c.py +27 -24
  108. imap_processing/tests/hi/test_l1a.py +7 -9
  109. imap_processing/tests/hi/test_science_direct_event.py +2 -2
  110. imap_processing/tests/hit/helpers/l1_validation.py +44 -43
  111. imap_processing/tests/hit/test_decom_hit.py +1 -1
  112. imap_processing/tests/hit/test_hit_l1a.py +9 -9
  113. imap_processing/tests/hit/test_hit_l1b.py +172 -217
  114. imap_processing/tests/hit/test_hit_l2.py +380 -118
  115. imap_processing/tests/hit/test_hit_utils.py +122 -55
  116. imap_processing/tests/hit/validation_data/hit_l1b_standard_sample2_nsrl_v4_3decimals.csv +62 -62
  117. imap_processing/tests/hit/validation_data/sci_sample_raw.csv +1 -1
  118. imap_processing/tests/ialirt/unit/test_decom_ialirt.py +16 -81
  119. imap_processing/tests/ialirt/unit/test_grouping.py +2 -2
  120. imap_processing/tests/ialirt/unit/test_parse_mag.py +71 -16
  121. imap_processing/tests/ialirt/unit/test_process_codicehi.py +3 -3
  122. imap_processing/tests/ialirt/unit/test_process_codicelo.py +3 -10
  123. imap_processing/tests/ialirt/unit/test_process_ephemeris.py +4 -4
  124. imap_processing/tests/ialirt/unit/test_process_hit.py +3 -3
  125. imap_processing/tests/ialirt/unit/test_process_swapi.py +24 -16
  126. imap_processing/tests/ialirt/unit/test_process_swe.py +115 -7
  127. imap_processing/tests/idex/conftest.py +72 -7
  128. imap_processing/tests/idex/test_data/imap_idex_l0_raw_20241206_v001.pkts +0 -0
  129. imap_processing/tests/idex/test_data/imap_idex_l0_raw_20250108_v001.pkts +0 -0
  130. imap_processing/tests/idex/test_idex_l0.py +33 -11
  131. imap_processing/tests/idex/test_idex_l1a.py +50 -23
  132. imap_processing/tests/idex/test_idex_l1b.py +104 -25
  133. imap_processing/tests/idex/test_idex_l2a.py +48 -32
  134. imap_processing/tests/idex/test_idex_l2b.py +93 -0
  135. imap_processing/tests/lo/test_lo_l1a.py +3 -3
  136. imap_processing/tests/lo/test_lo_l1b.py +371 -6
  137. imap_processing/tests/lo/test_lo_l1c.py +1 -1
  138. imap_processing/tests/lo/test_lo_science.py +6 -7
  139. imap_processing/tests/lo/test_star_sensor.py +1 -1
  140. imap_processing/tests/mag/conftest.py +58 -9
  141. imap_processing/tests/mag/test_mag_decom.py +4 -3
  142. imap_processing/tests/mag/test_mag_l1a.py +13 -7
  143. imap_processing/tests/mag/test_mag_l1b.py +9 -9
  144. imap_processing/tests/mag/test_mag_l1c.py +151 -47
  145. imap_processing/tests/mag/test_mag_l2.py +130 -0
  146. imap_processing/tests/mag/test_mag_validation.py +144 -7
  147. imap_processing/tests/mag/validation/L1c/T013/mag-l1b-l1c-t013-magi-normal-in.csv +1217 -0
  148. imap_processing/tests/mag/validation/L1c/T013/mag-l1b-l1c-t013-magi-normal-out.csv +1857 -0
  149. imap_processing/tests/mag/validation/L1c/T013/mag-l1b-l1c-t013-mago-normal-in.csv +1217 -0
  150. imap_processing/tests/mag/validation/L1c/T013/mag-l1b-l1c-t013-mago-normal-out.csv +1857 -0
  151. imap_processing/tests/mag/validation/L1c/T014/mag-l1b-l1c-t014-magi-normal-in.csv +1217 -0
  152. imap_processing/tests/mag/validation/L1c/T014/mag-l1b-l1c-t014-magi-normal-out.csv +1793 -0
  153. imap_processing/tests/mag/validation/L1c/T014/mag-l1b-l1c-t014-mago-normal-in.csv +1217 -0
  154. imap_processing/tests/mag/validation/L1c/T014/mag-l1b-l1c-t014-mago-normal-out.csv +1793 -0
  155. imap_processing/tests/mag/validation/L1c/T015/mag-l1b-l1c-t015-magi-burst-in.csv +2561 -0
  156. imap_processing/tests/mag/validation/L1c/T015/mag-l1b-l1c-t015-magi-normal-in.csv +961 -0
  157. imap_processing/tests/mag/validation/L1c/T015/mag-l1b-l1c-t015-magi-normal-out.csv +1539 -0
  158. imap_processing/tests/mag/validation/L1c/T015/mag-l1b-l1c-t015-mago-normal-in.csv +1921 -0
  159. imap_processing/tests/mag/validation/L1c/T015/mag-l1b-l1c-t015-mago-normal-out.csv +2499 -0
  160. imap_processing/tests/mag/validation/L1c/T016/mag-l1b-l1c-t016-magi-normal-in.csv +865 -0
  161. imap_processing/tests/mag/validation/L1c/T016/mag-l1b-l1c-t016-magi-normal-out.csv +1196 -0
  162. imap_processing/tests/mag/validation/L1c/T016/mag-l1b-l1c-t016-mago-normal-in.csv +1729 -0
  163. imap_processing/tests/mag/validation/L1c/T016/mag-l1b-l1c-t016-mago-normal-out.csv +3053 -0
  164. imap_processing/tests/mag/validation/L2/imap_mag_l1b_norm-mago_20251017_v002.cdf +0 -0
  165. imap_processing/tests/mag/validation/calibration/imap_mag_l2-calibration-matrices_20251017_v004.cdf +0 -0
  166. imap_processing/tests/mag/validation/calibration/imap_mag_l2-offsets-norm_20251017_20251017_v001.cdf +0 -0
  167. imap_processing/tests/spacecraft/test_quaternions.py +1 -1
  168. imap_processing/tests/spice/test_data/fake_repoint_data.csv +4 -4
  169. imap_processing/tests/spice/test_data/fake_spin_data.csv +11 -11
  170. imap_processing/tests/spice/test_geometry.py +3 -3
  171. imap_processing/tests/spice/test_kernels.py +1 -200
  172. imap_processing/tests/spice/test_pointing_frame.py +185 -0
  173. imap_processing/tests/spice/test_repoint.py +20 -10
  174. imap_processing/tests/spice/test_spin.py +50 -9
  175. imap_processing/tests/spice/test_time.py +14 -0
  176. imap_processing/tests/swapi/lut/imap_swapi_esa-unit-conversion_20250211_v000.csv +73 -0
  177. imap_processing/tests/swapi/lut/imap_swapi_lut-notes_20250211_v000.csv +1025 -0
  178. imap_processing/tests/swapi/test_swapi_l1.py +7 -9
  179. imap_processing/tests/swapi/test_swapi_l2.py +180 -8
  180. imap_processing/tests/swe/lut/checker-board-indices.csv +24 -0
  181. imap_processing/tests/swe/lut/imap_swe_esa-lut_20250301_v000.csv +385 -0
  182. imap_processing/tests/swe/lut/imap_swe_l1b-in-flight-cal_20240510_20260716_v000.csv +3 -0
  183. imap_processing/tests/swe/test_swe_l1a.py +6 -6
  184. imap_processing/tests/swe/test_swe_l1a_science.py +3 -3
  185. imap_processing/tests/swe/test_swe_l1b.py +162 -24
  186. imap_processing/tests/swe/test_swe_l2.py +82 -102
  187. imap_processing/tests/test_cli.py +171 -88
  188. imap_processing/tests/test_utils.py +2 -1
  189. imap_processing/tests/ultra/data/mock_data.py +49 -21
  190. imap_processing/tests/ultra/unit/conftest.py +53 -70
  191. imap_processing/tests/ultra/unit/test_badtimes.py +2 -4
  192. imap_processing/tests/ultra/unit/test_cullingmask.py +4 -6
  193. imap_processing/tests/ultra/unit/test_de.py +3 -10
  194. imap_processing/tests/ultra/unit/test_decom_apid_880.py +27 -76
  195. imap_processing/tests/ultra/unit/test_decom_apid_881.py +15 -16
  196. imap_processing/tests/ultra/unit/test_decom_apid_883.py +12 -10
  197. imap_processing/tests/ultra/unit/test_decom_apid_896.py +202 -55
  198. imap_processing/tests/ultra/unit/test_lookup_utils.py +23 -1
  199. imap_processing/tests/ultra/unit/test_spacecraft_pset.py +3 -4
  200. imap_processing/tests/ultra/unit/test_ultra_l1a.py +84 -307
  201. imap_processing/tests/ultra/unit/test_ultra_l1b.py +30 -12
  202. imap_processing/tests/ultra/unit/test_ultra_l1b_annotated.py +2 -2
  203. imap_processing/tests/ultra/unit/test_ultra_l1b_culling.py +4 -1
  204. imap_processing/tests/ultra/unit/test_ultra_l1b_extended.py +163 -29
  205. imap_processing/tests/ultra/unit/test_ultra_l1c.py +5 -5
  206. imap_processing/tests/ultra/unit/test_ultra_l1c_pset_bins.py +32 -43
  207. imap_processing/tests/ultra/unit/test_ultra_l2.py +230 -0
  208. imap_processing/ultra/constants.py +1 -1
  209. imap_processing/ultra/l0/decom_tools.py +21 -34
  210. imap_processing/ultra/l0/decom_ultra.py +168 -204
  211. imap_processing/ultra/l0/ultra_utils.py +152 -136
  212. imap_processing/ultra/l1a/ultra_l1a.py +55 -243
  213. imap_processing/ultra/l1b/badtimes.py +1 -4
  214. imap_processing/ultra/l1b/cullingmask.py +2 -6
  215. imap_processing/ultra/l1b/de.py +62 -47
  216. imap_processing/ultra/l1b/extendedspin.py +8 -4
  217. imap_processing/ultra/l1b/lookup_utils.py +72 -9
  218. imap_processing/ultra/l1b/ultra_l1b.py +3 -8
  219. imap_processing/ultra/l1b/ultra_l1b_culling.py +4 -4
  220. imap_processing/ultra/l1b/ultra_l1b_extended.py +236 -78
  221. imap_processing/ultra/l1c/histogram.py +2 -6
  222. imap_processing/ultra/l1c/spacecraft_pset.py +2 -4
  223. imap_processing/ultra/l1c/ultra_l1c.py +1 -5
  224. imap_processing/ultra/l1c/ultra_l1c_pset_bins.py +107 -60
  225. imap_processing/ultra/l2/ultra_l2.py +299 -0
  226. imap_processing/ultra/lookup_tables/Angular_Profiles_FM45_LeftSlit.csv +526 -0
  227. imap_processing/ultra/lookup_tables/Angular_Profiles_FM45_RightSlit.csv +526 -0
  228. imap_processing/ultra/lookup_tables/Angular_Profiles_FM90_LeftSlit.csv +526 -0
  229. imap_processing/ultra/lookup_tables/Angular_Profiles_FM90_RightSlit.csv +526 -0
  230. imap_processing/ultra/lookup_tables/FM45_Startup1_ULTRA_IMGPARAMS_20240719.csv +2 -2
  231. imap_processing/ultra/lookup_tables/FM90_Startup1_ULTRA_IMGPARAMS_20240719.csv +2 -0
  232. imap_processing/ultra/packet_definitions/README.md +38 -0
  233. imap_processing/ultra/packet_definitions/ULTRA_SCI_COMBINED.xml +15302 -482
  234. imap_processing/ultra/utils/ultra_l1_utils.py +13 -12
  235. imap_processing/utils.py +1 -1
  236. {imap_processing-0.12.0.dist-info → imap_processing-0.13.0.dist-info}/METADATA +3 -2
  237. {imap_processing-0.12.0.dist-info → imap_processing-0.13.0.dist-info}/RECORD +264 -225
  238. imap_processing/hi/l1b/hi_eng_unit_convert_table.csv +0 -154
  239. imap_processing/mag/imap_mag_sdc-configuration_v001.yaml +0 -6
  240. imap_processing/mag/l1b/__init__.py +0 -0
  241. imap_processing/swe/l1b/swe_esa_lookup_table.csv +0 -1441
  242. imap_processing/swe/l1b/swe_l1b_science.py +0 -699
  243. imap_processing/tests/swe/test_swe_l1b_science.py +0 -103
  244. imap_processing/ultra/lookup_tables/dps_sensitivity45.cdf +0 -0
  245. imap_processing/ultra/lookup_tables/ultra_90_dps_exposure_compressed.cdf +0 -0
  246. /imap_processing/idex/packet_definitions/{idex_packet_definition.xml → idex_science_packet_definition.xml} +0 -0
  247. /imap_processing/tests/ialirt/{test_data → data}/l0/20240827095047_SWE_IALIRT_packet.bin +0 -0
  248. /imap_processing/tests/ialirt/{test_data → data}/l0/461971383-404.bin +0 -0
  249. /imap_processing/tests/ialirt/{test_data → data}/l0/461971384-405.bin +0 -0
  250. /imap_processing/tests/ialirt/{test_data → data}/l0/461971385-406.bin +0 -0
  251. /imap_processing/tests/ialirt/{test_data → data}/l0/461971386-407.bin +0 -0
  252. /imap_processing/tests/ialirt/{test_data → data}/l0/461971387-408.bin +0 -0
  253. /imap_processing/tests/ialirt/{test_data → data}/l0/461971388-409.bin +0 -0
  254. /imap_processing/tests/ialirt/{test_data → data}/l0/461971389-410.bin +0 -0
  255. /imap_processing/tests/ialirt/{test_data → data}/l0/461971390-411.bin +0 -0
  256. /imap_processing/tests/ialirt/{test_data → data}/l0/461971391-412.bin +0 -0
  257. /imap_processing/tests/ialirt/{test_data → data}/l0/BinLog CCSDS_FRAG_TLM_20240826_152323Z_IALIRT_data_for_SDC.bin +0 -0
  258. /imap_processing/tests/ialirt/{test_data → data}/l0/IALiRT Raw Packet Telemetry.txt +0 -0
  259. /imap_processing/tests/ialirt/{test_data → data}/l0/apid01152.tlm +0 -0
  260. /imap_processing/tests/ialirt/{test_data → data}/l0/eu_SWP_IAL_20240826_152033.csv +0 -0
  261. /imap_processing/tests/ialirt/{test_data → data}/l0/hi_fsw_view_1_ccsds.bin +0 -0
  262. /imap_processing/tests/ialirt/{test_data → data}/l0/hit_ialirt_sample.ccsds +0 -0
  263. /imap_processing/tests/ialirt/{test_data → data}/l0/hit_ialirt_sample.csv +0 -0
  264. /imap_processing/tests/ialirt/{test_data → data}/l0/idle_export_eu.SWE_IALIRT_20240827_093852.csv +0 -0
  265. /imap_processing/tests/ialirt/{test_data → data}/l0/imap_codice_l1a_hi-ialirt_20240523200000_v0.0.0.cdf +0 -0
  266. /imap_processing/tests/ialirt/{test_data → data}/l0/imap_codice_l1a_lo-ialirt_20241110193700_v0.0.0.cdf +0 -0
  267. /imap_processing/tests/ialirt/{test_data → data}/l0/sample_decoded_i-alirt_data.csv +0 -0
  268. /imap_processing/tests/mag/validation/{imap_calibration_mag_20240229_v01.cdf → calibration/imap_mag_l1b-calibration_20240229_v001.cdf} +0 -0
  269. /imap_processing/{swe/l1b/engineering_unit_convert_table.csv → tests/swe/lut/imap_swe_eu-conversion_20240510_v000.csv} +0 -0
  270. {imap_processing-0.12.0.dist-info → imap_processing-0.13.0.dist-info}/LICENSE +0 -0
  271. {imap_processing-0.12.0.dist-info → imap_processing-0.13.0.dist-info}/WHEEL +0 -0
  272. {imap_processing-0.12.0.dist-info → imap_processing-0.13.0.dist-info}/entry_points.txt +0 -0
@@ -1,10 +1,7 @@
1
1
  """Contains data classes to support Ultra L0 processing."""
2
2
 
3
- from dataclasses import fields
4
3
  from typing import NamedTuple, Union
5
4
 
6
- import numpy as np
7
-
8
5
 
9
6
  class PacketProperties(NamedTuple):
10
7
  """Class that represents properties of the ULTRA packet type."""
@@ -46,8 +43,8 @@ ULTRA_RATES = PacketProperties(
46
43
  ULTRA_TOF = PacketProperties(
47
44
  apid=[883, 947],
48
45
  logical_source=[
49
- "imap_ultra_l1a_45sensor-histogram",
50
- "imap_ultra_l1a_90sensor-histogram",
46
+ "imap_ultra_l1a_45sensor-histogram-ena-phxtof-hi-ang",
47
+ "imap_ultra_l1a_90sensor-histogram-ena-phxtof-hi-ang",
51
48
  ],
52
49
  addition_to_logical_desc="Time of Flight Images",
53
50
  width=4,
@@ -64,229 +61,266 @@ ULTRA_EVENTS = PacketProperties(
64
61
  len_array=None,
65
62
  mantissa_bit_length=None,
66
63
  )
64
+ ULTRA_HK = PacketProperties(
65
+ apid=[
66
+ 866,
67
+ 867,
68
+ 868,
69
+ 869,
70
+ 870,
71
+ 871,
72
+ 873,
73
+ 874,
74
+ 875,
75
+ 876,
76
+ 877,
77
+ 930,
78
+ 931,
79
+ 932,
80
+ 933,
81
+ 934,
82
+ 935,
83
+ 937,
84
+ 938,
85
+ 939,
86
+ 940,
87
+ 941,
88
+ ],
89
+ logical_source=[
90
+ "imap_ultra_l1a_45sensor-alarm",
91
+ "imap_ultra_l1a_45sensor-memchecksum",
92
+ "imap_ultra_l1a_45sensor-memdump",
93
+ "imap_ultra_l1a_45sensor-status",
94
+ "imap_ultra_l1a_45sensor-bootstatus",
95
+ "imap_ultra_l1a_45sensor-macrodump",
96
+ "imap_ultra_l1a_45sensor-monitorlimits",
97
+ "imap_ultra_l1a_45sensor-params",
98
+ "imap_ultra_l1a_45sensor-cmdtext",
99
+ "imap_ultra_l1a_45sensor-scauto",
100
+ "imap_ultra_l1a_45sensor-imgparams",
101
+ "imap_ultra_l1a_90sensor-alarm",
102
+ "imap_ultra_l1a_90sensor-memchecksum",
103
+ "imap_ultra_l1a_90sensor-memdump",
104
+ "imap_ultra_l1a_90sensor-status",
105
+ "imap_ultra_l1a_90sensor-bootstatus",
106
+ "imap_ultra_l1a_90sensor-macrodump",
107
+ "imap_ultra_l1a_90sensor-monitorlimits",
108
+ "imap_ultra_l1a_90sensor-params",
109
+ "imap_ultra_l1a_90sensor-cmdtext",
110
+ "imap_ultra_l1a_90sensor-scauto",
111
+ "imap_ultra_l1a_90sensor-imgparams",
112
+ ],
113
+ addition_to_logical_desc="Housekeeping",
114
+ width=None,
115
+ block=None,
116
+ len_array=None,
117
+ mantissa_bit_length=None,
118
+ )
67
119
 
68
120
 
69
- # Module-level constant for event field ranges
70
121
  # Module-level constant for event field ranges
71
122
  EVENT_FIELD_RANGES = {
72
123
  # Coincidence Type
73
- "COIN_TYPE": (0, 2),
124
+ "coin_type": (0, 2),
74
125
  # Start Type
75
- "START_TYPE": (2, 4),
126
+ "start_type": (2, 4),
76
127
  # Stop Type
77
- "STOP_TYPE": (4, 8),
128
+ "stop_type": (4, 8),
78
129
  # Start Position Time to Digital Converter
79
- "START_POS_TDC": (8, 19),
130
+ "start_pos_tdc": (8, 19),
80
131
  # Stop North Time to Digital Converter
81
- "STOP_NORTH_TDC": (19, 30),
132
+ "stop_north_tdc": (19, 30),
82
133
  # Stop East Time to Digital Converter
83
- "STOP_EAST_TDC": (30, 41),
134
+ "stop_east_tdc": (30, 41),
84
135
  # Stop South Time to Digital Converter
85
- "STOP_SOUTH_TDC": (41, 52),
136
+ "stop_south_tdc": (41, 52),
86
137
  # Stop West Time to Digital Converter
87
- "STOP_WEST_TDC": (52, 63),
138
+ "stop_west_tdc": (52, 63),
88
139
  # Coincidence North Time to Digital Converter
89
- "COIN_NORTH_TDC": (63, 74),
140
+ "coin_north_tdc": (63, 74),
90
141
  # Coincidence South Time to Digital Converter
91
- "COIN_SOUTH_TDC": (74, 85),
142
+ "coin_south_tdc": (74, 85),
92
143
  # Coincidence Discrete Time to Digital Converter
93
- "COIN_DISCRETE_TDC": (85, 96),
144
+ "coin_discrete_tdc": (85, 96),
94
145
  # Energy/Pulse Height
95
- "ENERGY_PH": (96, 108),
146
+ "energy_ph": (96, 108),
96
147
  # Pulse Width
97
- "PULSE_WIDTH": (108, 119),
148
+ "pulse_width": (108, 119),
98
149
  # Event Flag Count
99
- "EVENT_FLAG_CNT": (119, 120),
150
+ "event_flag_cnt": (119, 120),
100
151
  # Event Flag PHCmpSL
101
- "EVENT_FLAG_PHCMPSL": (120, 121),
152
+ "event_flag_phcmpsl": (120, 121),
102
153
  # Event Flag PHCmpSR
103
- "EVENT_FLAG_PHCMPSR": (121, 122),
154
+ "event_flag_phcmpsr": (121, 122),
104
155
  # Event Flag PHCmpCD
105
- "EVENT_FLAG_PHCMPCD": (122, 123),
156
+ "event_flag_phcmpcd": (122, 123),
106
157
  # Solid State Detector Flags
107
- "SSD_FLAG_7": (123, 124),
108
- "SSD_FLAG_6": (124, 125),
109
- "SSD_FLAG_5": (125, 126),
110
- "SSD_FLAG_4": (126, 127),
111
- "SSD_FLAG_3": (127, 128),
112
- "SSD_FLAG_2": (128, 129),
113
- "SSD_FLAG_1": (129, 130),
114
- "SSD_FLAG_0": (130, 131),
158
+ "ssd_flag_7": (123, 124),
159
+ "ssd_flag_6": (124, 125),
160
+ "ssd_flag_5": (125, 126),
161
+ "ssd_flag_4": (126, 127),
162
+ "ssd_flag_3": (127, 128),
163
+ "ssd_flag_2": (128, 129),
164
+ "ssd_flag_1": (129, 130),
165
+ "ssd_flag_0": (130, 131),
115
166
  # Constant Fraction Discriminator Flag Coincidence Top North
116
- "CFD_FLAG_COINTN": (131, 132),
167
+ "cfd_flag_cointn": (131, 132),
117
168
  # Constant Fraction Discriminator Flag Coincidence Bottom North
118
- "CFD_FLAG_COINBN": (132, 133),
169
+ "cfd_flag_coinbn": (132, 133),
119
170
  # Constant Fraction Discriminator Flag Coincidence Top South
120
- "CFD_FLAG_COINTS": (133, 134),
171
+ "cfd_flag_coints": (133, 134),
121
172
  # Constant Fraction Discriminator Flag Coincidence Bottom South
122
- "CFD_FLAG_COINBS": (134, 135),
173
+ "cfd_flag_coinbs": (134, 135),
123
174
  # Constant Fraction Discriminator Flag Coincidence Discrete
124
- "CFD_FLAG_COIND": (135, 136),
175
+ "cfd_flag_coind": (135, 136),
125
176
  # Constant Fraction Discriminator Flag Start Right Full
126
- "CFD_FLAG_STARTRF": (136, 137),
177
+ "cfd_flag_startrf": (136, 137),
127
178
  # Constant Fraction Discriminator Flag Start Left Full
128
- "CFD_FLAG_STARTLF": (137, 138),
179
+ "cfd_flag_startlf": (137, 138),
129
180
  # Constant Fraction Discriminator Flag Start Position Right
130
- "CFD_FLAG_STARTRP": (138, 139),
181
+ "cfd_flag_startrp": (138, 139),
131
182
  # Constant Fraction Discriminator Flag Start Position Left
132
- "CFD_FLAG_STARTLP": (139, 140),
183
+ "cfd_flag_startlp": (139, 140),
133
184
  # Constant Fraction Discriminator Flag Stop Top North
134
- "CFD_FLAG_STOPTN": (140, 141),
185
+ "cfd_flag_stoptn": (140, 141),
135
186
  # Constant Fraction Discriminator Flag Stop Bottom North
136
- "CFD_FLAG_STOPBN": (141, 142),
187
+ "cfd_flag_stopbn": (141, 142),
137
188
  # Constant Fraction Discriminator Flag Stop Top East
138
- "CFD_FLAG_STOPTE": (142, 143),
189
+ "cfd_flag_stopte": (142, 143),
139
190
  # Constant Fraction Discriminator Flag Stop Bottom East
140
- "CFD_FLAG_STOPBE": (143, 144),
191
+ "cfd_flag_stopbe": (143, 144),
141
192
  # Constant Fraction Discriminator Flag Stop Top South
142
- "CFD_FLAG_STOPTS": (144, 145),
193
+ "cfd_flag_stopts": (144, 145),
143
194
  # Constant Fraction Discriminator Flag Stop Bottom South
144
- "CFD_FLAG_STOPBS": (145, 146),
195
+ "cfd_flag_stopbs": (145, 146),
145
196
  # Constant Fraction Discriminator Flag Stop Top West
146
- "CFD_FLAG_STOPTW": (146, 147),
197
+ "cfd_flag_stoptw": (146, 147),
147
198
  # Constant Fraction Discriminator Flag Stop Bottom West
148
- "CFD_FLAG_STOPBW": (147, 148),
199
+ "cfd_flag_stopbw": (147, 148),
149
200
  # Bin
150
- "BIN": (148, 156),
201
+ "bin": (148, 156),
151
202
  # Phase Angle
152
- "PHASE_ANGLE": (156, 166),
203
+ "phase_angle": (156, 166),
153
204
  }
154
205
 
155
206
 
156
207
  RATES_KEYS = [
157
208
  # Start Right Full Constant Fraction Discriminator (CFD) Pulses
158
- "START_RF",
209
+ "start_rf",
159
210
  # Start Left Full Constant Fraction Discriminator (CFD) Pulses
160
- "START_LF",
211
+ "start_lf",
161
212
  # Start Position Right Full Constant Fraction Discriminator (CFD) Pulses
162
- "START_RP",
213
+ "start_rp",
163
214
  # Start Position Left Constant Fraction Discriminator (CFD) Pulses
164
- "START_LP",
215
+ "start_lp",
165
216
  # Stop Top North Constant Fraction Discriminator (CFD) Pulses
166
- "STOP_TN",
217
+ "stop_tn",
167
218
  # Stop Bottom North Constant Fraction Discriminator (CFD) Pulses
168
- "STOP_BN",
219
+ "stop_bn",
169
220
  # Stop Top East Constant Fraction Discriminator (CFD) Pulses
170
- "STOP_TE",
221
+ "stop_te",
171
222
  # Stop Bottom East Constant Fraction Discriminator (CFD) Pulses
172
- "STOP_BE",
223
+ "stop_be",
173
224
  # Stop Top South Constant Fraction Discriminator (CFD) Pulses
174
- "STOP_TS",
225
+ "stop_ts",
175
226
  # Stop Bottom South Constant Fraction Discriminator (CFD) Pulses
176
- "STOP_BS",
227
+ "stop_bs",
177
228
  # Stop Top West Constant Fraction Discriminator (CFD) Pulses
178
- "STOP_TW",
229
+ "stop_tw",
179
230
  # Stop Bottom West Constant Fraction Discriminator (CFD) Pulses
180
- "STOP_BW",
231
+ "stop_bw",
181
232
  # Coincidence Top North Constant Fraction Discriminator (CFD) Pulses
182
- "COIN_TN",
233
+ "coin_tn",
183
234
  # Coincidence Bottom North Constant Fraction Discriminator (CFD) Pulses
184
- "COIN_BN",
235
+ "coin_bn",
185
236
  # Coincidence Top South Constant Fraction Discriminator (CFD) Pulses
186
- "COIN_TS",
237
+ "coin_ts",
187
238
  # Coincidence Bottom South Constant Fraction Discriminator (CFD) Pulses
188
- "COIN_BS",
239
+ "coin_bs",
189
240
  # Coincidence Discrete Constant Fraction Discriminator (CFD) Pulses
190
- "COIN_D",
241
+ "coin_d",
191
242
  # Solid State Detector (SSD) Energy Pulses
192
- "SSD0",
193
- "SSD1",
194
- "SSD2",
195
- "SSD3",
196
- "SSD4",
197
- "SSD5",
198
- "SSD6",
199
- "SSD7",
243
+ "ssd0",
244
+ "ssd1",
245
+ "ssd2",
246
+ "ssd3",
247
+ "ssd4",
248
+ "ssd5",
249
+ "ssd6",
250
+ "ssd7",
200
251
  # Start Position Time to Digital Converter (TDC) Chip VE Pulses
201
- "START_POS",
252
+ "start_pos",
202
253
  # Stop North TDC-chip VE Pulses
203
- "STOP_N",
254
+ "stop_n",
204
255
  # Stop East TDC-chip VE Pulses
205
- "STOP_E",
256
+ "stop_e",
206
257
  # Stop South TDC-chip VE Pulses
207
- "STOP_S",
258
+ "stop_s",
208
259
  # Stop West TDC-chip VE Pulses
209
- "STOP_W",
260
+ "stop_w",
210
261
  # Coincidence North TDC-chip VE Pulses
211
- "COIN_N_TDC",
262
+ "coin_n_tdc",
212
263
  # Coincidence Discrete TDC-chip VE Pulses
213
- "COIN_D_TDC",
264
+ "coin_d_tdc",
214
265
  # Coincidence South TDC-chip VE Pulses
215
- "COIN_S_TDC",
266
+ "coin_s_tdc",
216
267
  # Stop Top North Valid Pulse Height Flag
217
- "STOP_TOP_N",
268
+ "stop_top_n",
218
269
  # Stop Bottom North Valid Pulse Height Flag
219
- "STOP_BOT_N",
270
+ "stop_bot_n",
220
271
  # Start-Right/Stop Single Coincidence.
221
272
  # Stop can be either Top or Bottom.
222
273
  # Coincidence is allowed, but not required.
223
274
  # No SSD.
224
- "START_RIGHT_STOP_COIN_SINGLE",
275
+ "start_right_stop_coin_single",
225
276
  # Start-Left/Stop Single Coincidence.
226
277
  # Stop can be either Top or Bottom.
227
278
  # Coincidence is allowed, but not required.
228
279
  # No SSD.
229
- "START_LEFT_STOP_COIN_SINGLE",
280
+ "start_left_stop_coin_single",
230
281
  # Start-Right/Stop/Coin Coincidence.
231
282
  # Double Coincidence.
232
283
  # Stop/Coin can be either Top or Bottom. No SSD.
233
- "START_RIGHT_STOP_COIN_DOUBLE",
284
+ "start_right_stop_coin_double",
234
285
  # Start-Left/Stop/Coin Coincidence.
235
286
  # Double Coincidence.
236
287
  # Stop/Coin can be either Top or Bottom. No SSD.
237
- "START_LEFT_STOP_COIN_DOUBLE",
288
+ "start_left_stop_coin_double",
238
289
  # Start/Stop/Coin Coincidence +
239
290
  # Position Match.
240
291
  # Double Coincidence + Fine Position Match
241
292
  # between Stop and Coin measurements.
242
293
  # No SSD.
243
- "START_STOP_COIN_POS",
294
+ "start_stop_coin_pos",
244
295
  # Start-Right/SSD/Coin-D Coincidence.
245
296
  # Energy Coincidence.
246
- "START_RIGHT_SSD_COIN_D",
297
+ "start_right_ssd_coin_d",
247
298
  # Start-Left/SSD/Coin-D Coincidence.
248
299
  # Energy Coincidence.
249
- "START_LEFT_SSD_COIN_D",
300
+ "start_left_ssd_coin_d",
250
301
  # Event Analysis Activity Time.
251
- "EVENT_ACTIVE_TIME",
302
+ "event_active_time",
252
303
  # Events that would have been written to the FIFO.
253
304
  # (attempted to write).
254
- "FIFO_VALID_EVENTS",
305
+ "fifo_valid_events",
255
306
  # Events generated by the pulser.
256
- "PULSER_EVENTS",
307
+ "pulser_events",
257
308
  # Coincidence (windowed) between the Stop/Coin top.
258
- "WINDOW_STOP_COIN",
309
+ "window_stop_coin",
259
310
  # Coincidence between Start Left and Window-Stop/Coin.
260
- "START_LEFT_WINDOW_STOP_COIN",
311
+ "start_left_window_stop_coin",
261
312
  # Coincidence between Start Right and Window-Stop/Coin.
262
- "START_RIGHT_WINDOW_STOP_COIN",
313
+ "start_right_window_stop_coin",
263
314
  # TODO: Below will be added later. It is not in the current data.
264
315
  # Processed events generated by the pulser.
265
- # "PROCESSED_PULSER_EVENTS",
316
+ # "processed_pulser_events",
266
317
  # Processed events.
267
- # "PROCESSED_EVENTS",
318
+ # "processed_events",
268
319
  # Discarded events.
269
- # "DISCARDED_EVENTS"
320
+ # "discarded_events"
270
321
  ]
271
322
 
272
323
 
273
- def append_fillval(decom_data: dict, packet): # type: ignore[no-untyped-def]
274
- # ToDo, need packet param type
275
- """
276
- Append fill values to all fields.
277
-
278
- Parameters
279
- ----------
280
- decom_data : dict
281
- Parsed data.
282
- packet : space_packet_parser.packets.CCSDSPacket
283
- Packet.
284
- """
285
- for key in decom_data:
286
- if (key not in packet.header.keys()) and (key not in packet.user_data.keys()):
287
- decom_data[key].append(np.iinfo(np.int64).min)
288
-
289
-
290
324
  def parse_event(event_binary: str) -> dict:
291
325
  """
292
326
  Parse a binary string representing a single event.
@@ -306,21 +340,3 @@ def parse_event(event_binary: str) -> dict:
306
340
  field_value = int(event_binary[start:end], 2)
307
341
  fields_dict[field] = field_value
308
342
  return fields_dict
309
-
310
-
311
- def append_ccsds_fields(decom_data: dict, ccsds_data_object: object) -> None:
312
- """
313
- Append CCSDS fields to event_data.
314
-
315
- Parameters
316
- ----------
317
- decom_data : dict
318
- Parsed data.
319
- ccsds_data_object : DataclassInstance
320
- CCSDS data object.
321
- """
322
- for field in fields(ccsds_data_object.__class__): # type: ignore[arg-type]
323
- ccsds_key = field.name
324
- if ccsds_key not in decom_data:
325
- decom_data[ccsds_key] = []
326
- decom_data[ccsds_key].append(getattr(ccsds_data_object, ccsds_key))