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,4 +1,4 @@
1
- """Pytest plugin module for test data paths"""
1
+ """Pytest plugin module for test data paths."""
2
2
 
3
3
  from unittest import mock
4
4
 
@@ -6,19 +6,24 @@ import numpy as np
6
6
  import pytest
7
7
  import xarray as xr
8
8
 
9
- from imap_processing import decom, imap_module_directory
10
- from imap_processing.ultra.l0.decom_ultra import process_ultra_apids
9
+ from imap_processing import imap_module_directory
10
+ from imap_processing.ultra.l0.decom_ultra import (
11
+ process_ultra_events,
12
+ process_ultra_rates,
13
+ process_ultra_tof,
14
+ )
11
15
  from imap_processing.ultra.l0.ultra_utils import (
12
16
  ULTRA_AUX,
13
17
  ULTRA_EVENTS,
14
18
  ULTRA_RATES,
19
+ ULTRA_TOF,
15
20
  )
16
- from imap_processing.ultra.l1a import ultra_l1a
21
+ from imap_processing.ultra.l1a.ultra_l1a import ultra_l1a
17
22
  from imap_processing.ultra.l1b.ultra_l1b import ultra_l1b
18
- from imap_processing.utils import group_by_apid
23
+ from imap_processing.utils import packet_file_to_datasets
19
24
 
20
25
 
21
- @pytest.fixture()
26
+ @pytest.fixture
22
27
  def ccsds_path():
23
28
  """Returns the ccsds directory."""
24
29
  return (
@@ -31,7 +36,7 @@ def ccsds_path():
31
36
  )
32
37
 
33
38
 
34
- @pytest.fixture()
39
+ @pytest.fixture
35
40
  def ccsds_path_events():
36
41
  """Returns the ccsds directory."""
37
42
  return (
@@ -44,7 +49,7 @@ def ccsds_path_events():
44
49
  )
45
50
 
46
51
 
47
- @pytest.fixture()
52
+ @pytest.fixture
48
53
  def ccsds_path_theta_0():
49
54
  """Returns the ccsds directory."""
50
55
  return (
@@ -58,7 +63,7 @@ def ccsds_path_theta_0():
58
63
  )
59
64
 
60
65
 
61
- @pytest.fixture()
66
+ @pytest.fixture
62
67
  def ccsds_path_tof():
63
68
  """Returns the ccsds directory."""
64
69
  return (
@@ -71,7 +76,7 @@ def ccsds_path_tof():
71
76
  )
72
77
 
73
78
 
74
- @pytest.fixture()
79
+ @pytest.fixture
75
80
  def xtce_path():
76
81
  """Returns the xtce image rates directory."""
77
82
  return (
@@ -82,7 +87,7 @@ def xtce_path():
82
87
  )
83
88
 
84
89
 
85
- @pytest.fixture()
90
+ @pytest.fixture
86
91
  def rates_test_path():
87
92
  """Returns the xtce image rates test data directory."""
88
93
  filename = (
@@ -92,17 +97,16 @@ def rates_test_path():
92
97
  return imap_module_directory / "tests" / "ultra" / "data" / "l0" / filename
93
98
 
94
99
 
95
- @pytest.fixture()
100
+ @pytest.fixture
96
101
  def aux_test_path():
97
102
  """Returns the xtce auxiliary test data directory."""
98
103
  filename = (
99
- "ultra45_raw_sc_auxdata_Ultra45_EM_SwRI_Cal_Run7_ThetaScan_"
100
- "20220530T225054.csv"
104
+ "ultra45_raw_sc_auxdata_Ultra45_EM_SwRI_Cal_Run7_ThetaScan_20220530T225054.csv"
101
105
  )
102
106
  return imap_module_directory / "tests" / "ultra" / "data" / "l0" / filename
103
107
 
104
108
 
105
- @pytest.fixture()
109
+ @pytest.fixture
106
110
  def events_test_path():
107
111
  """Returns the xtce auxiliary test data directory."""
108
112
  filename = (
@@ -112,7 +116,7 @@ def events_test_path():
112
116
  return imap_module_directory / "tests" / "ultra" / "data" / "l0" / filename
113
117
 
114
118
 
115
- @pytest.fixture()
119
+ @pytest.fixture
116
120
  def tof_test_path():
117
121
  """Returns the xtce auxiliary test data directory."""
118
122
  filename = (
@@ -122,21 +126,31 @@ def tof_test_path():
122
126
  return imap_module_directory / "tests" / "ultra" / "data" / "l0" / filename
123
127
 
124
128
 
125
- @pytest.fixture()
129
+ @pytest.fixture
126
130
  def decom_test_data(request, xtce_path):
127
131
  """Read test data from file"""
128
132
  apid = request.param["apid"]
129
133
  filename = request.param["filename"]
130
134
  ccsds_path = imap_module_directory / "tests" / "ultra" / "data" / "l0" / filename
131
135
 
132
- packets = decom.decom_packets(ccsds_path, xtce_path)
133
- grouped_data = group_by_apid(packets)
136
+ datasets_by_apid = packet_file_to_datasets(ccsds_path, xtce_path)
137
+
138
+ strategy_dict = {
139
+ ULTRA_TOF.apid[0]: process_ultra_tof,
140
+ ULTRA_EVENTS.apid[0]: process_ultra_events,
141
+ ULTRA_RATES.apid[0]: process_ultra_rates,
142
+ ULTRA_TOF.apid[1]: process_ultra_tof,
143
+ ULTRA_EVENTS.apid[1]: process_ultra_events,
144
+ ULTRA_RATES.apid[1]: process_ultra_rates,
145
+ }
134
146
 
135
- data_packet_list = process_ultra_apids(grouped_data[apid], apid)
136
- return data_packet_list, packets
147
+ process_function = strategy_dict.get(apid, lambda *args: False)
148
+ data_packet_xarray = process_function(datasets_by_apid[apid])
137
149
 
150
+ return data_packet_xarray
138
151
 
139
- @pytest.fixture()
152
+
153
+ @pytest.fixture
140
154
  def events_fsw_comparison_theta_0():
141
155
  """FSW test data."""
142
156
  filename = (
@@ -146,60 +160,28 @@ def events_fsw_comparison_theta_0():
146
160
  return imap_module_directory / "tests" / "ultra" / "data" / "l0" / filename
147
161
 
148
162
 
149
- @pytest.fixture()
163
+ @pytest.fixture
150
164
  def de_dataset(ccsds_path_theta_0, xtce_path):
151
165
  """L1A test data"""
152
- packets = decom.decom_packets(ccsds_path_theta_0, xtce_path)
153
- grouped_data = group_by_apid(packets)
154
- decom_ultra_events = process_ultra_apids(
155
- grouped_data[ULTRA_EVENTS.apid[0]], ULTRA_EVENTS.apid[0]
156
- )
157
- decom_ultra_aux = process_ultra_apids(
158
- grouped_data[ULTRA_AUX.apid[0]], ULTRA_AUX.apid[0]
159
- )
160
- de_dataset = ultra_l1a.create_dataset(
161
- {
162
- ULTRA_EVENTS.apid[0]: decom_ultra_events,
163
- ULTRA_AUX.apid[0]: decom_ultra_aux,
164
- }
165
- )
166
-
167
- return de_dataset
166
+ test_data = ultra_l1a(ccsds_path_theta_0, apid_input=ULTRA_EVENTS.apid[0])
167
+ return test_data[0]
168
168
 
169
169
 
170
- @pytest.fixture()
171
- def rates_dataset(ccsds_path_theta_0, xtce_path):
170
+ @pytest.fixture
171
+ def rates_dataset(ccsds_path_theta_0):
172
172
  """L1A test data"""
173
- packets = decom.decom_packets(ccsds_path_theta_0, xtce_path)
174
- grouped_data = group_by_apid(packets)
175
- decom_ultra_rates = process_ultra_apids(
176
- grouped_data[ULTRA_RATES.apid[0]], ULTRA_RATES.apid[0]
177
- )
178
- l1a_rates_dataset = ultra_l1a.create_dataset(
179
- {
180
- ULTRA_RATES.apid[0]: decom_ultra_rates,
181
- }
182
- )
183
- return l1a_rates_dataset
173
+ test_data = ultra_l1a(ccsds_path_theta_0, apid_input=ULTRA_RATES.apid[0])
174
+ return test_data[0]
184
175
 
185
176
 
186
- @pytest.fixture()
187
- def aux_dataset(ccsds_path_theta_0, xtce_path):
177
+ @pytest.fixture
178
+ def aux_dataset(ccsds_path_theta_0):
188
179
  """L1A test data"""
189
- packets = decom.decom_packets(ccsds_path_theta_0, xtce_path)
190
- grouped_data = group_by_apid(packets)
191
- decom_ultra_aux = process_ultra_apids(
192
- grouped_data[ULTRA_AUX.apid[0]], ULTRA_AUX.apid[0]
193
- )
194
- l1a_aux_dataset = ultra_l1a.create_dataset(
195
- {
196
- ULTRA_AUX.apid[0]: decom_ultra_aux,
197
- }
198
- )
199
- return l1a_aux_dataset
180
+ test_data = ultra_l1a(ccsds_path_theta_0, apid_input=ULTRA_AUX.apid[0])
181
+ return test_data[0]
200
182
 
201
183
 
202
- @pytest.fixture()
184
+ @pytest.fixture
203
185
  def faux_aux_dataset():
204
186
  """Fixture to compute and return aux test data."""
205
187
 
@@ -229,7 +211,7 @@ def faux_aux_dataset():
229
211
  return test_aux_dataset
230
212
 
231
213
 
232
- @pytest.fixture()
214
+ @pytest.fixture
233
215
  @mock.patch("imap_processing.ultra.l1b.de.get_annotated_particle_velocity")
234
216
  def l1b_de_dataset(
235
217
  mock_get_annotated_particle_velocity,
@@ -259,12 +241,12 @@ def l1b_de_dataset(
259
241
 
260
242
  mock_get_annotated_particle_velocity.side_effect = side_effect_func
261
243
 
262
- output_datasets = ultra_l1b(data_dict, data_version="001")
244
+ output_datasets = ultra_l1b(data_dict)
263
245
 
264
246
  return output_datasets
265
247
 
266
248
 
267
- @pytest.fixture()
249
+ @pytest.fixture
268
250
  def l1b_extendedspin_dataset(
269
251
  l1b_de_dataset,
270
252
  rates_dataset,
@@ -277,7 +259,8 @@ def l1b_extendedspin_dataset(
277
259
  # TODO: this is a placeholder for the hk dataset.
278
260
  data_dict["imap_ultra_l1a_45sensor-hk"] = faux_aux_dataset
279
261
  data_dict["imap_ultra_l1a_45sensor-rates"] = rates_dataset
262
+ data_dict["imap_ultra_l1a_45sensor-params"] = l1b_de_dataset[0]
280
263
 
281
- output_datasets = ultra_l1b(data_dict, data_version="001")
264
+ output_datasets = ultra_l1b(data_dict)
282
265
 
283
266
  return output_datasets
@@ -32,6 +32,7 @@ def test_calculate_badtimes():
32
32
 
33
33
  ds = xr.Dataset(
34
34
  {
35
+ "epoch": np.array([0, 1, 2, 3], dtype="datetime64[ns]"),
35
36
  "quality_attitude": (("spin_number",), quality_attitude),
36
37
  "quality_ena_rates": (
37
38
  ("energy_bin_geometric_mean", "spin_number"),
@@ -45,14 +46,11 @@ def test_calculate_badtimes():
45
46
  },
46
47
  )
47
48
 
48
- culling_ds = calculate_cullingmask(
49
- ds, name="imap_ultra_l1b_45sensor-badtimes", data_version="v1"
50
- )
49
+ culling_ds = calculate_cullingmask(ds, name="imap_ultra_l1b_45sensor-badtimes")
51
50
  badtimes_ds = calculate_badtimes(
52
51
  ds,
53
52
  culling_ds["spin_number"].values,
54
53
  name="imap_ultra_l1b_45sensor-badtimes",
55
- data_version="v1",
56
54
  )
57
55
 
58
56
  assert not np.any(
@@ -25,6 +25,7 @@ def test_calculate_cullingmask_attitude():
25
25
 
26
26
  ds = xr.Dataset(
27
27
  {
28
+ "epoch": np.array([0, 1, 2, 3], dtype="datetime64[ns]"),
28
29
  "quality_attitude": (("spin_number",), quality_attitude),
29
30
  "quality_ena_rates": (
30
31
  ("energy_bin_geometric_mean", "spin_number"),
@@ -38,9 +39,7 @@ def test_calculate_cullingmask_attitude():
38
39
  },
39
40
  )
40
41
 
41
- result_ds = calculate_cullingmask(
42
- ds, name="imap_ultra_l1b_45sensor-cullingmask", data_version="v1"
43
- )
42
+ result_ds = calculate_cullingmask(ds, name="imap_ultra_l1b_45sensor-cullingmask")
44
43
 
45
44
  np.testing.assert_array_equal(result_ds["spin_number"].values, np.array([0]))
46
45
 
@@ -78,14 +77,13 @@ def test_calculate_cullingmask_rates():
78
77
  "spin_start_time": (("spin_number",), spin_start_time),
79
78
  },
80
79
  coords={
80
+ "epoch": np.array([0, 1, 2, 3], dtype="datetime64[ns]"),
81
81
  "spin_number": spin_numbers,
82
82
  "energy_bin_geometric_mean": energy_bins,
83
83
  },
84
84
  )
85
85
 
86
- result_ds = calculate_cullingmask(
87
- ds, name="imap_ultra_l1b_45sensor-cullingmask", data_version="v1"
88
- )
86
+ result_ds = calculate_cullingmask(ds, name="imap_ultra_l1b_45sensor-cullingmask")
89
87
 
90
88
  expected_spins = np.array([0, 1])
91
89
  np.testing.assert_array_equal(result_ds["spin_number"].values, expected_spins)
@@ -7,7 +7,7 @@ import pytest
7
7
  from imap_processing.ultra.constants import UltraConstants
8
8
 
9
9
 
10
- @pytest.fixture()
10
+ @pytest.fixture
11
11
  def df_filt(de_dataset, events_fsw_comparison_theta_0):
12
12
  """Fixture to import test dataset."""
13
13
  df = pd.read_csv(events_fsw_comparison_theta_0)
@@ -22,7 +22,7 @@ def test_calculate_de(l1b_de_dataset, df_filt):
22
22
 
23
23
  l1b_de_dataset = l1b_de_dataset[0]
24
24
  l1b_de_dataset = l1b_de_dataset.where(
25
- l1b_de_dataset["start_type"] != np.iinfo(np.int64).min, drop=True
25
+ l1b_de_dataset["start_type"] != 255, drop=True
26
26
  )
27
27
  # Front and back positions
28
28
  assert np.allclose(l1b_de_dataset["x_front"].data, df_filt["Xf"].astype("float"))
@@ -63,7 +63,7 @@ def test_calculate_de(l1b_de_dataset, df_filt):
63
63
  & (l1b_de_dataset["tof_corrected"] < UltraConstants.CTOF_SPECIES_MAX)
64
64
  )[0]
65
65
  ]
66
- assert np.all(species_array == "H")
66
+ assert np.all(species_array == 1)
67
67
 
68
68
  # Velocities in various frames
69
69
  test_tof = l1b_de_dataset["tof_start_stop"]
@@ -113,10 +113,3 @@ def test_calculate_de(l1b_de_dataset, df_filt):
113
113
  len(l1b_de_dataset["epoch"]),
114
114
  3,
115
115
  )
116
-
117
- # Event efficiency
118
- assert np.allclose(
119
- l1b_de_dataset["event_efficiency"],
120
- np.full(len(l1b_de_dataset["epoch"]), np.nan),
121
- equal_nan=True,
122
- )
@@ -3,96 +3,47 @@ import pandas as pd
3
3
  import pytest
4
4
 
5
5
  from imap_processing.ultra.l0.ultra_utils import ULTRA_AUX
6
- from imap_processing.utils import group_by_apid
6
+ from imap_processing.utils import packet_file_to_datasets
7
7
 
8
8
 
9
- @pytest.mark.parametrize(
10
- "decom_test_data",
11
- [
12
- pytest.param(
13
- {
14
- "apid": ULTRA_AUX.apid[0],
15
- "filename": "Ultra45_EM_SwRI_Cal_Run7_"
16
- "ThetaScan_20220530T225054.CCSDS",
17
- }
18
- )
19
- ],
20
- indirect=True,
21
- )
22
- def test_aux_enumerated(decom_test_data):
23
- """Test if enumerated values derived correctly"""
24
-
25
- _, packets = decom_test_data
26
-
27
- count = 0 # count number of packets with APID 880
28
- total_packets = 23
29
-
30
- grouped_data = group_by_apid(packets)
31
- apid_data = grouped_data[880]
9
+ @pytest.fixture
10
+ def decom_ultra_aux_data(ccsds_path, xtce_path):
11
+ """Data for decom_ultra_aux"""
32
12
 
33
- for packet in apid_data:
34
- assert packet["SPINPERIODVALID"] == "INVALID"
35
- assert packet["SPINPHASEVALID"] == "VALID"
36
- assert packet["SPINPERIODSOURCE"] == "NOMINAL"
37
- assert packet["CATBEDHEATERFLAG"] == "UNFLAGGED"
38
- count += 1
13
+ datasets_by_apid = packet_file_to_datasets(ccsds_path, xtce_path)
14
+ decom_ultra_dataset = datasets_by_apid[ULTRA_AUX.apid[0]]
15
+ return decom_ultra_dataset
39
16
 
40
- assert count == total_packets
41
17
 
42
-
43
- @pytest.mark.parametrize(
44
- "decom_test_data",
45
- [
46
- pytest.param(
47
- {
48
- "apid": ULTRA_AUX.apid[0],
49
- "filename": "Ultra45_EM_SwRI_Cal_Run7_"
50
- "ThetaScan_20220530T225054.CCSDS",
51
- }
52
- )
53
- ],
54
- indirect=True,
55
- )
56
- def test_aux_mode(decom_test_data):
18
+ def test_aux_modes(decom_ultra_aux_data):
57
19
  """Test if enumerated values derived correctly"""
58
20
 
59
- _, packets = decom_test_data
21
+ assert np.all(decom_ultra_aux_data["spinperiodvalid"] == 0)
22
+ assert np.all(decom_ultra_aux_data["spinphasevalid"] == 1)
23
+ assert np.all(decom_ultra_aux_data["spinperiodsource"] == 1)
24
+ assert np.all(decom_ultra_aux_data["catbedheaterflag"] == 0)
25
+ assert np.all(decom_ultra_aux_data["hwmode"] == 0)
26
+ assert np.all(decom_ultra_aux_data["imcenb"] == 0)
27
+ assert np.all(decom_ultra_aux_data["leftdeflectioncharge"] == 0)
28
+ assert np.all(decom_ultra_aux_data["rightdeflectioncharge"] == 0)
60
29
 
61
- for packet in packets:
62
- if packet["PKT_APID"] == 880:
63
- assert packet["HWMODE"] == "MODE0"
64
- assert packet["IMCENB"] == "MODE0"
65
- assert packet["LEFTDEFLECTIONCHARGE"] == "MODE0"
66
- assert packet["RIGHTDEFLECTIONCHARGE"] == "MODE0"
30
+ assert len(decom_ultra_aux_data["shcoarse"]) == 23
67
31
 
68
32
 
69
- @pytest.mark.parametrize(
70
- "decom_test_data",
71
- [
72
- pytest.param(
73
- {
74
- "apid": ULTRA_AUX.apid[0],
75
- "filename": "Ultra45_EM_SwRI_Cal_Run7_"
76
- "ThetaScan_20220530T225054.CCSDS",
77
- }
78
- )
79
- ],
80
- indirect=True,
81
- )
82
- def test_aux_decom(decom_test_data, aux_test_path):
33
+ def test_aux_decom(decom_ultra_aux_data, aux_test_path):
83
34
  """This function reads validation data and checks that
84
35
  decom data matches validation data for auxiliary packet"""
85
36
 
86
- decom_ultra, _ = decom_test_data
87
-
88
37
  df = pd.read_csv(aux_test_path, index_col="MET")
89
38
 
90
- np.testing.assert_array_equal(df.SpinStartSeconds, decom_ultra["TIMESPINSTART"])
91
39
  np.testing.assert_array_equal(
92
- df.SpinStartSubseconds, decom_ultra["TIMESPINSTARTSUB"]
40
+ df.SpinStartSeconds, decom_ultra_aux_data["timespinstart"]
41
+ )
42
+ np.testing.assert_array_equal(
43
+ df.SpinStartSubseconds, decom_ultra_aux_data["timespinstartsub"]
93
44
  )
94
- np.testing.assert_array_equal(df.SpinDuration, decom_ultra["DURATION"])
95
- np.testing.assert_array_equal(df.SpinNumber, decom_ultra["SPINNUMBER"])
96
- np.testing.assert_array_equal(df.SpinDataTime, decom_ultra["TIMESPINDATA"])
97
- np.testing.assert_array_equal(df.SpinPeriod, decom_ultra["SPINPERIOD"])
98
- np.testing.assert_array_equal(df.SpinPhase, decom_ultra["SPINPHASE"])
45
+ np.testing.assert_array_equal(df.SpinDuration, decom_ultra_aux_data["duration"])
46
+ np.testing.assert_array_equal(df.SpinNumber, decom_ultra_aux_data["spinnumber"])
47
+ np.testing.assert_array_equal(df.SpinDataTime, decom_ultra_aux_data["timespindata"])
48
+ np.testing.assert_array_equal(df.SpinPeriod, decom_ultra_aux_data["spinperiod"])
49
+ np.testing.assert_array_equal(df.SpinPhase, decom_ultra_aux_data["spinphase"])
@@ -14,8 +14,7 @@ from imap_processing.ultra.l0.ultra_utils import RATES_KEYS, ULTRA_RATES
14
14
  pytest.param(
15
15
  {
16
16
  "apid": ULTRA_RATES.apid[0],
17
- "filename": "Ultra45_EM_SwRI_Cal_Run7_"
18
- "ThetaScan_20220530T225054.CCSDS",
17
+ "filename": "Ultra45_EM_SwRI_Cal_Run7_ThetaScan_20220530T225054.CCSDS",
19
18
  }
20
19
  )
21
20
  ],
@@ -24,27 +23,27 @@ from imap_processing.ultra.l0.ultra_utils import RATES_KEYS, ULTRA_RATES
24
23
  def test_image_rate_decom(decom_test_data, rates_test_path):
25
24
  """This function reads validation data and checks that decom data
26
25
  matches validation data for image rate packet"""
27
- decom_ultra, _ = decom_test_data
26
+ decom_ultra = decom_test_data
28
27
 
29
28
  df = pd.read_csv(rates_test_path, index_col="MET")
30
29
  total_packets = 23
31
30
 
32
- np.testing.assert_array_equal(df.SID, decom_ultra["SID"])
33
- np.testing.assert_array_equal(df.Spin, decom_ultra["SPIN"])
34
- np.testing.assert_array_equal(df.AbortFlag, decom_ultra["ABORTFLAG"])
35
- np.testing.assert_array_equal(df.StartDelay, decom_ultra["STARTDELAY"])
31
+ np.testing.assert_array_equal(df.SID, decom_ultra["sid"])
32
+ np.testing.assert_array_equal(df.Spin, decom_ultra["spin"])
33
+ np.testing.assert_array_equal(df.AbortFlag, decom_ultra["abortflag"])
34
+ np.testing.assert_array_equal(df.StartDelay, decom_ultra["startdelay"])
36
35
 
37
36
  # Spot-check first packet
38
- t0 = decom_ultra["SHCOARSE"][0]
39
- expected_arr0 = json.loads(df.loc[t0].Counts)
37
+ t0 = decom_ultra["shcoarse"][0]
38
+ expected_arr0 = json.loads(df.loc[int(t0)].Counts)
40
39
  arr = []
41
40
  for name in RATES_KEYS:
42
41
  arr.append(decom_ultra[name][0])
43
42
  assert expected_arr0 == arr
44
43
 
45
44
  # Spot-check last packet
46
- tn = decom_ultra["SHCOARSE"][total_packets - 1]
47
- expected_arrn = json.loads(df.loc[tn].Counts)
45
+ tn = decom_ultra["shcoarse"][total_packets - 1]
46
+ expected_arrn = json.loads(df.loc[int(tn)].Counts)
48
47
  arr = []
49
48
  for name in RATES_KEYS:
50
49
  arr.append(decom_ultra[name][total_packets - 1])
@@ -75,15 +74,15 @@ def test_image_rate_decom_zero_width(decom_test_data):
75
74
  / "ultra45_raw_sc_ultraimgrates_20220530_00.csv"
76
75
  )
77
76
 
78
- decom_ultra, _ = decom_test_data
77
+ decom_ultra = decom_test_data
79
78
 
80
79
  df = pd.read_csv(test_path, index_col="MET")
81
80
  total_packets = 163
82
81
 
83
- np.testing.assert_array_equal(df.SID, decom_ultra["SID"])
84
- np.testing.assert_array_equal(df.Spin, decom_ultra["SPIN"])
85
- np.testing.assert_array_equal(df.AbortFlag, decom_ultra["ABORTFLAG"])
86
- np.testing.assert_array_equal(df.StartDelay, decom_ultra["STARTDELAY"])
82
+ np.testing.assert_array_equal(df.SID, decom_ultra["sid"])
83
+ np.testing.assert_array_equal(df.Spin, decom_ultra["spin"])
84
+ np.testing.assert_array_equal(df.AbortFlag, decom_ultra["abortflag"])
85
+ np.testing.assert_array_equal(df.StartDelay, decom_ultra["startdelay"])
87
86
 
88
87
  for i in range(total_packets):
89
88
  t = int(df["SequenceCount"].iloc[i]) # Ensure we get an integer value
@@ -6,8 +6,6 @@ import pytest
6
6
 
7
7
  from imap_processing.ultra.l0.ultra_utils import ULTRA_TOF
8
8
 
9
- # TODO: discuss with instrument team incomplete set of SIDs
10
-
11
9
 
12
10
  @pytest.mark.parametrize(
13
11
  "decom_test_data",
@@ -15,7 +13,7 @@ from imap_processing.ultra.l0.ultra_utils import ULTRA_TOF
15
13
  pytest.param(
16
14
  {
17
15
  "apid": ULTRA_TOF.apid[0],
18
- "filename": "FM45_TV_Cycle6_Hot_Ops_" "Front212_20240124T063837.CCSDS",
16
+ "filename": "FM45_TV_Cycle6_Hot_Ops_Front212_20240124T063837.CCSDS",
19
17
  }
20
18
  )
21
19
  ],
@@ -25,20 +23,24 @@ def test_tof_decom(decom_test_data, tof_test_path):
25
23
  """This function reads validation data and checks that decom data
26
24
  matches validation data for image rate packet"""
27
25
 
28
- decom_ultra, _ = decom_test_data
26
+ decom_ultra = decom_test_data
29
27
  df = pd.read_csv(tof_test_path, index_col="SequenceCount")
30
28
 
31
- np.testing.assert_array_equal(df.Spin, decom_ultra["SPIN"].flatten())
32
- np.testing.assert_array_equal(df.AbortFlag, decom_ultra["ABORTFLAG"].flatten())
33
- np.testing.assert_array_equal(df.StartDelay, decom_ultra["STARTDELAY"].flatten())
34
- assert json.loads(df["P00s"].values[0])[0] == decom_ultra["P00"][0][0]
29
+ np.testing.assert_array_equal(df.Spin, decom_ultra["spin"].values.flatten())
30
+ np.testing.assert_array_equal(
31
+ df.AbortFlag, decom_ultra["abortflag"].values.flatten()
32
+ )
33
+ np.testing.assert_array_equal(
34
+ df.StartDelay, decom_ultra["startdelay"].values.flatten()
35
+ )
36
+ assert json.loads(df["P00s"].values[0])[0] == decom_ultra["p00"][0][0]
35
37
 
36
38
  for count in df.index.get_level_values("SequenceCount").values:
37
39
  df_data = df[df.index.get_level_values("SequenceCount") == count].Images.values[
38
40
  0
39
41
  ]
40
- rows, cols = np.where(decom_ultra["SRC_SEQ_CTR"] == count)
41
- decom_data = decom_ultra["PACKETDATA"][rows[0]][cols[0]]
42
+ rows, cols = np.where(decom_ultra["src_seq_ctr"] == count)
43
+ decom_data = decom_ultra["packetdata"][rows[0]][cols[0]]
42
44
  df_data_array = np.array(json.loads(df_data)[0])
43
45
 
44
46
  np.testing.assert_array_equal(df_data_array, decom_data)