imap-processing 0.11.0__py3-none-any.whl → 0.12.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 (288) hide show
  1. imap_processing/__init__.py +10 -11
  2. imap_processing/_version.py +2 -2
  3. imap_processing/ccsds/excel_to_xtce.py +65 -16
  4. imap_processing/cdf/config/imap_codice_global_cdf_attrs.yaml +6 -28
  5. imap_processing/cdf/config/imap_codice_l1a_variable_attrs.yaml +365 -42
  6. imap_processing/cdf/config/imap_glows_global_cdf_attrs.yaml +0 -5
  7. imap_processing/cdf/config/imap_hi_global_cdf_attrs.yaml +10 -11
  8. imap_processing/cdf/config/imap_hi_variable_attrs.yaml +17 -19
  9. imap_processing/cdf/config/imap_hit_global_cdf_attrs.yaml +26 -13
  10. imap_processing/cdf/config/imap_hit_l1a_variable_attrs.yaml +106 -116
  11. imap_processing/cdf/config/imap_hit_l1b_variable_attrs.yaml +120 -145
  12. imap_processing/cdf/config/imap_hit_l2_variable_attrs.yaml +14 -0
  13. imap_processing/cdf/config/imap_idex_global_cdf_attrs.yaml +6 -9
  14. imap_processing/cdf/config/imap_idex_l1a_variable_attrs.yaml +1 -1
  15. imap_processing/cdf/config/imap_lo_global_cdf_attrs.yaml +0 -12
  16. imap_processing/cdf/config/imap_lo_l1a_variable_attrs.yaml +1 -1
  17. imap_processing/cdf/config/imap_mag_global_cdf_attrs.yaml +9 -21
  18. imap_processing/cdf/config/imap_mag_l1a_variable_attrs.yaml +361 -0
  19. imap_processing/cdf/config/imap_mag_l1b_variable_attrs.yaml +160 -0
  20. imap_processing/cdf/config/imap_mag_l1c_variable_attrs.yaml +160 -0
  21. imap_processing/cdf/config/imap_spacecraft_global_cdf_attrs.yaml +18 -0
  22. imap_processing/cdf/config/imap_spacecraft_variable_attrs.yaml +40 -0
  23. imap_processing/cdf/config/imap_swapi_global_cdf_attrs.yaml +1 -5
  24. imap_processing/cdf/config/imap_swe_global_cdf_attrs.yaml +12 -4
  25. imap_processing/cdf/config/imap_swe_l1a_variable_attrs.yaml +16 -2
  26. imap_processing/cdf/config/imap_swe_l1b_variable_attrs.yaml +48 -52
  27. imap_processing/cdf/config/imap_swe_l2_variable_attrs.yaml +71 -47
  28. imap_processing/cdf/config/imap_ultra_global_cdf_attrs.yaml +2 -14
  29. imap_processing/cdf/config/imap_ultra_l1b_variable_attrs.yaml +51 -2
  30. imap_processing/cdf/config/imap_ultra_l1c_variable_attrs.yaml +29 -14
  31. imap_processing/cdf/utils.py +13 -7
  32. imap_processing/cli.py +23 -8
  33. imap_processing/codice/codice_l1a.py +207 -85
  34. imap_processing/codice/constants.py +1322 -568
  35. imap_processing/codice/decompress.py +2 -6
  36. imap_processing/ena_maps/ena_maps.py +480 -116
  37. imap_processing/ena_maps/utils/coordinates.py +19 -0
  38. imap_processing/ena_maps/utils/map_utils.py +14 -17
  39. imap_processing/ena_maps/utils/spatial_utils.py +45 -47
  40. imap_processing/hi/l1a/hi_l1a.py +24 -18
  41. imap_processing/hi/l1a/histogram.py +0 -1
  42. imap_processing/hi/l1a/science_direct_event.py +6 -8
  43. imap_processing/hi/l1b/hi_l1b.py +31 -39
  44. imap_processing/hi/l1c/hi_l1c.py +405 -17
  45. imap_processing/hi/utils.py +58 -12
  46. imap_processing/hit/ancillary/imap_hit_l1b-to-l2-standard-dt0-factors_20250219_v002.csv +205 -0
  47. imap_processing/hit/ancillary/imap_hit_l1b-to-l2-standard-dt1-factors_20250219_v002.csv +205 -0
  48. imap_processing/hit/ancillary/imap_hit_l1b-to-l2-standard-dt2-factors_20250219_v002.csv +205 -0
  49. imap_processing/hit/ancillary/imap_hit_l1b-to-l2-standard-dt3-factors_20250219_v002.csv +205 -0
  50. imap_processing/hit/ancillary/imap_hit_l1b-to-l2-summed-dt0-factors_20250219_v002.csv +68 -0
  51. imap_processing/hit/hit_utils.py +173 -1
  52. imap_processing/hit/l0/constants.py +20 -11
  53. imap_processing/hit/l0/decom_hit.py +18 -4
  54. imap_processing/hit/l1a/hit_l1a.py +45 -54
  55. imap_processing/hit/l1b/constants.py +317 -0
  56. imap_processing/hit/l1b/hit_l1b.py +367 -18
  57. imap_processing/hit/l2/constants.py +281 -0
  58. imap_processing/hit/l2/hit_l2.py +614 -0
  59. imap_processing/hit/packet_definitions/hit_packet_definitions.xml +1323 -71
  60. imap_processing/ialirt/l0/mag_l0_ialirt_data.py +155 -0
  61. imap_processing/ialirt/l0/parse_mag.py +246 -0
  62. imap_processing/ialirt/l0/process_swe.py +252 -0
  63. imap_processing/ialirt/packet_definitions/ialirt.xml +7 -3
  64. imap_processing/ialirt/packet_definitions/ialirt_mag.xml +115 -0
  65. imap_processing/ialirt/utils/grouping.py +114 -0
  66. imap_processing/ialirt/utils/time.py +29 -0
  67. imap_processing/idex/atomic_masses.csv +22 -0
  68. imap_processing/idex/decode.py +2 -2
  69. imap_processing/idex/idex_constants.py +25 -0
  70. imap_processing/idex/idex_l1a.py +6 -7
  71. imap_processing/idex/idex_l1b.py +4 -31
  72. imap_processing/idex/idex_l2a.py +789 -0
  73. imap_processing/idex/idex_variable_unpacking_and_eu_conversion.csv +39 -33
  74. imap_processing/lo/l0/lo_science.py +6 -0
  75. imap_processing/lo/l1a/lo_l1a.py +0 -1
  76. imap_processing/lo/l1b/lo_l1b.py +177 -25
  77. imap_processing/mag/constants.py +8 -0
  78. imap_processing/mag/imap_mag_sdc-configuration_v001.yaml +6 -0
  79. imap_processing/mag/l0/decom_mag.py +10 -3
  80. imap_processing/mag/l1a/mag_l1a.py +22 -11
  81. imap_processing/mag/l1a/mag_l1a_data.py +28 -3
  82. imap_processing/mag/l1b/mag_l1b.py +190 -48
  83. imap_processing/mag/l1c/interpolation_methods.py +211 -0
  84. imap_processing/mag/l1c/mag_l1c.py +447 -9
  85. imap_processing/quality_flags.py +1 -0
  86. imap_processing/spacecraft/packet_definitions/scid_x252.xml +538 -0
  87. imap_processing/spacecraft/quaternions.py +123 -0
  88. imap_processing/spice/geometry.py +16 -19
  89. imap_processing/spice/repoint.py +120 -0
  90. imap_processing/swapi/l1/swapi_l1.py +4 -0
  91. imap_processing/swapi/l2/swapi_l2.py +0 -1
  92. imap_processing/swe/l1a/swe_l1a.py +47 -8
  93. imap_processing/swe/l1a/swe_science.py +5 -2
  94. imap_processing/swe/l1b/swe_l1b_science.py +103 -56
  95. imap_processing/swe/l2/swe_l2.py +60 -65
  96. imap_processing/swe/packet_definitions/swe_packet_definition.xml +1121 -1
  97. imap_processing/swe/utils/swe_constants.py +63 -0
  98. imap_processing/swe/utils/swe_utils.py +85 -28
  99. imap_processing/tests/ccsds/test_data/expected_output.xml +40 -1
  100. imap_processing/tests/ccsds/test_excel_to_xtce.py +23 -20
  101. imap_processing/tests/cdf/test_data/imap_instrument2_global_cdf_attrs.yaml +0 -2
  102. imap_processing/tests/codice/conftest.py +1 -1
  103. imap_processing/tests/codice/data/validation/imap_codice_l1a_hi-counters-aggregated_20241110193700_v0.0.0.cdf +0 -0
  104. imap_processing/tests/codice/data/validation/imap_codice_l1a_hi-counters-singles_20241110193700_v0.0.0.cdf +0 -0
  105. imap_processing/tests/codice/data/validation/imap_codice_l1a_hi-ialirt_20241110193700_v0.0.0.cdf +0 -0
  106. imap_processing/tests/codice/data/validation/imap_codice_l1a_hi-omni_20241110193700_v0.0.0.cdf +0 -0
  107. imap_processing/tests/codice/data/validation/imap_codice_l1a_hi-pha_20241110193700_v0.0.0.cdf +0 -0
  108. imap_processing/tests/codice/data/validation/imap_codice_l1a_hi-priorities_20241110193700_v0.0.0.cdf +0 -0
  109. imap_processing/tests/codice/data/validation/imap_codice_l1a_hi-sectored_20241110193700_v0.0.0.cdf +0 -0
  110. imap_processing/tests/codice/data/validation/imap_codice_l1a_lo-counters-aggregated_20241110193700_v0.0.0.cdf +0 -0
  111. imap_processing/tests/codice/data/validation/imap_codice_l1a_lo-counters-singles_20241110193700_v0.0.0.cdf +0 -0
  112. imap_processing/tests/codice/data/validation/imap_codice_l1a_lo-ialirt_20241110193700_v0.0.0.cdf +0 -0
  113. imap_processing/tests/codice/data/validation/imap_codice_l1a_lo-nsw-angular_20241110193700_v0.0.0.cdf +0 -0
  114. imap_processing/tests/codice/data/validation/imap_codice_l1a_lo-nsw-priority_20241110193700_v0.0.0.cdf +0 -0
  115. imap_processing/tests/codice/data/validation/imap_codice_l1a_lo-nsw-species_20241110193700_v0.0.0.cdf +0 -0
  116. imap_processing/tests/codice/data/validation/imap_codice_l1a_lo-pha_20241110193700_v0.0.0.cdf +0 -0
  117. imap_processing/tests/codice/data/validation/imap_codice_l1a_lo-sw-angular_20241110193700_v0.0.0.cdf +0 -0
  118. imap_processing/tests/codice/data/validation/imap_codice_l1a_lo-sw-priority_20241110193700_v0.0.0.cdf +0 -0
  119. imap_processing/tests/codice/data/validation/imap_codice_l1a_lo-sw-species_20241110193700_v0.0.0.cdf +0 -0
  120. imap_processing/tests/codice/test_codice_l1a.py +110 -46
  121. imap_processing/tests/codice/test_decompress.py +4 -4
  122. imap_processing/tests/conftest.py +166 -10
  123. imap_processing/tests/ena_maps/conftest.py +51 -0
  124. imap_processing/tests/ena_maps/test_ena_maps.py +638 -109
  125. imap_processing/tests/ena_maps/test_map_utils.py +66 -43
  126. imap_processing/tests/ena_maps/test_spatial_utils.py +16 -20
  127. imap_processing/tests/hi/data/l0/H45_diag_fee_20250208.bin +0 -0
  128. imap_processing/tests/hi/data/l0/H45_diag_fee_20250208_verify.csv +205 -0
  129. imap_processing/tests/hi/test_hi_l1b.py +12 -15
  130. imap_processing/tests/hi/test_hi_l1c.py +234 -6
  131. imap_processing/tests/hi/test_l1a.py +30 -0
  132. imap_processing/tests/hi/test_science_direct_event.py +1 -1
  133. imap_processing/tests/hi/test_utils.py +24 -2
  134. imap_processing/tests/hit/helpers/l1_validation.py +39 -39
  135. imap_processing/tests/hit/test_data/hskp_sample.ccsds +0 -0
  136. imap_processing/tests/hit/test_data/imap_hit_l0_raw_20100105_v001.pkts +0 -0
  137. imap_processing/tests/hit/test_decom_hit.py +4 -0
  138. imap_processing/tests/hit/test_hit_l1a.py +24 -28
  139. imap_processing/tests/hit/test_hit_l1b.py +304 -40
  140. imap_processing/tests/hit/test_hit_l2.py +454 -0
  141. imap_processing/tests/hit/test_hit_utils.py +112 -2
  142. imap_processing/tests/hit/validation_data/hskp_sample_eu_3_6_2025.csv +89 -0
  143. imap_processing/tests/hit/validation_data/hskp_sample_raw.csv +89 -88
  144. imap_processing/tests/ialirt/test_data/l0/461971383-404.bin +0 -0
  145. imap_processing/tests/ialirt/test_data/l0/461971384-405.bin +0 -0
  146. imap_processing/tests/ialirt/test_data/l0/461971385-406.bin +0 -0
  147. imap_processing/tests/ialirt/test_data/l0/461971386-407.bin +0 -0
  148. imap_processing/tests/ialirt/test_data/l0/461971387-408.bin +0 -0
  149. imap_processing/tests/ialirt/test_data/l0/461971388-409.bin +0 -0
  150. imap_processing/tests/ialirt/test_data/l0/461971389-410.bin +0 -0
  151. imap_processing/tests/ialirt/test_data/l0/461971390-411.bin +0 -0
  152. imap_processing/tests/ialirt/test_data/l0/461971391-412.bin +0 -0
  153. imap_processing/tests/ialirt/test_data/l0/sample_decoded_i-alirt_data.csv +383 -0
  154. imap_processing/tests/ialirt/unit/test_grouping.py +81 -0
  155. imap_processing/tests/ialirt/unit/test_parse_mag.py +168 -0
  156. imap_processing/tests/ialirt/unit/test_process_swe.py +208 -3
  157. imap_processing/tests/ialirt/unit/test_time.py +16 -0
  158. imap_processing/tests/idex/conftest.py +62 -6
  159. imap_processing/tests/idex/test_data/imap_idex_l0_raw_20231218_v001.pkts +0 -0
  160. imap_processing/tests/idex/test_data/impact_14_tof_high_data.txt +4508 -4508
  161. imap_processing/tests/idex/test_idex_l1a.py +48 -4
  162. imap_processing/tests/idex/test_idex_l1b.py +3 -3
  163. imap_processing/tests/idex/test_idex_l2a.py +383 -0
  164. imap_processing/tests/lo/test_cdfs/imap_lo_l1a_de_20241022_v002.cdf +0 -0
  165. imap_processing/tests/lo/test_cdfs/imap_lo_l1a_spin_20241022_v002.cdf +0 -0
  166. imap_processing/tests/lo/test_lo_l1b.py +148 -4
  167. imap_processing/tests/lo/test_lo_science.py +1 -0
  168. imap_processing/tests/mag/conftest.py +69 -0
  169. imap_processing/tests/mag/test_mag_decom.py +1 -1
  170. imap_processing/tests/mag/test_mag_l1a.py +38 -0
  171. imap_processing/tests/mag/test_mag_l1b.py +34 -53
  172. imap_processing/tests/mag/test_mag_l1c.py +251 -20
  173. imap_processing/tests/mag/test_mag_validation.py +109 -25
  174. imap_processing/tests/mag/validation/L1b/T009/MAGScience-normal-(2,2)-8s-20250204-16h39.csv +17 -0
  175. imap_processing/tests/mag/validation/L1b/T009/mag-l1a-l1b-t009-magi-out.csv +16 -16
  176. imap_processing/tests/mag/validation/L1b/T009/mag-l1a-l1b-t009-mago-out.csv +16 -16
  177. imap_processing/tests/mag/validation/L1b/T010/MAGScience-normal-(2,2)-8s-20250206-12h05.csv +17 -0
  178. imap_processing/tests/mag/validation/L1b/T011/MAGScience-normal-(2,2)-8s-20250204-16h08.csv +17 -0
  179. imap_processing/tests/mag/validation/L1b/T011/mag-l1a-l1b-t011-magi-out.csv +16 -16
  180. imap_processing/tests/mag/validation/L1b/T011/mag-l1a-l1b-t011-mago-out.csv +16 -16
  181. imap_processing/tests/mag/validation/L1b/T012/MAGScience-normal-(2,2)-8s-20250204-16h08.csv +17 -0
  182. imap_processing/tests/mag/validation/L1b/T012/data.bin +0 -0
  183. imap_processing/tests/mag/validation/L1b/T012/field_like_all_ranges.txt +19200 -0
  184. imap_processing/tests/mag/validation/L1b/T012/mag-l1a-l1b-t012-cal.cdf +0 -0
  185. imap_processing/tests/mag/validation/L1b/T012/mag-l1a-l1b-t012-in.csv +17 -0
  186. imap_processing/tests/mag/validation/L1b/T012/mag-l1a-l1b-t012-magi-out.csv +17 -0
  187. imap_processing/tests/mag/validation/L1b/T012/mag-l1a-l1b-t012-mago-out.csv +17 -0
  188. imap_processing/tests/mag/validation/imap_calibration_mag_20240229_v01.cdf +0 -0
  189. imap_processing/tests/spacecraft/__init__.py +0 -0
  190. imap_processing/tests/spacecraft/data/SSR_2024_190_20_08_12_0483851794_2_DA_apid0594_1packet.pkts +0 -0
  191. imap_processing/tests/spacecraft/test_quaternions.py +71 -0
  192. imap_processing/tests/spice/test_data/fake_repoint_data.csv +5 -0
  193. imap_processing/tests/spice/test_geometry.py +6 -9
  194. imap_processing/tests/spice/test_repoint.py +111 -0
  195. imap_processing/tests/swapi/test_swapi_l1.py +7 -3
  196. imap_processing/tests/swe/l0_data/2024051010_SWE_HK_packet.bin +0 -0
  197. imap_processing/tests/swe/l0_data/2024051011_SWE_CEM_RAW_packet.bin +0 -0
  198. imap_processing/tests/swe/l0_validation_data/idle_export_eu.SWE_APP_HK_20240510_092742.csv +49 -0
  199. imap_processing/tests/swe/l0_validation_data/idle_export_eu.SWE_CEM_RAW_20240510_092742.csv +593 -0
  200. imap_processing/tests/swe/test_swe_l1a.py +18 -0
  201. imap_processing/tests/swe/test_swe_l1a_cem_raw.py +52 -0
  202. imap_processing/tests/swe/test_swe_l1a_hk.py +68 -0
  203. imap_processing/tests/swe/test_swe_l1b_science.py +23 -4
  204. imap_processing/tests/swe/test_swe_l2.py +112 -30
  205. imap_processing/tests/test_cli.py +2 -2
  206. imap_processing/tests/test_utils.py +138 -16
  207. imap_processing/tests/ultra/data/l0/FM45_UltraFM45_Functional_2024-01-22T0105_20240122T010548.CCSDS +0 -0
  208. imap_processing/tests/ultra/data/l0/ultra45_raw_sc_ultraimgrates_20220530_00.csv +164 -0
  209. imap_processing/tests/ultra/{test_data → data}/l0/ultra45_raw_sc_ultrarawimg_withFSWcalcs_FM45_40P_Phi28p5_BeamCal_LinearScan_phi2850_theta-000_20240207T102740.csv +3243 -3243
  210. imap_processing/tests/ultra/data/mock_data.py +341 -0
  211. imap_processing/tests/ultra/unit/conftest.py +69 -26
  212. imap_processing/tests/ultra/unit/test_badtimes.py +2 -0
  213. imap_processing/tests/ultra/unit/test_cullingmask.py +4 -0
  214. imap_processing/tests/ultra/unit/test_de.py +12 -4
  215. imap_processing/tests/ultra/unit/test_decom_apid_881.py +44 -0
  216. imap_processing/tests/ultra/unit/test_spacecraft_pset.py +78 -0
  217. imap_processing/tests/ultra/unit/test_ultra_l1a.py +28 -12
  218. imap_processing/tests/ultra/unit/test_ultra_l1b.py +34 -6
  219. imap_processing/tests/ultra/unit/test_ultra_l1b_culling.py +22 -26
  220. imap_processing/tests/ultra/unit/test_ultra_l1b_extended.py +86 -51
  221. imap_processing/tests/ultra/unit/test_ultra_l1c_pset_bins.py +94 -52
  222. imap_processing/ultra/l0/decom_tools.py +6 -5
  223. imap_processing/ultra/l1a/ultra_l1a.py +28 -56
  224. imap_processing/ultra/l1b/de.py +72 -28
  225. imap_processing/ultra/l1b/extendedspin.py +12 -14
  226. imap_processing/ultra/l1b/ultra_l1b.py +34 -9
  227. imap_processing/ultra/l1b/ultra_l1b_culling.py +65 -29
  228. imap_processing/ultra/l1b/ultra_l1b_extended.py +64 -19
  229. imap_processing/ultra/l1c/spacecraft_pset.py +86 -0
  230. imap_processing/ultra/l1c/ultra_l1c.py +7 -4
  231. imap_processing/ultra/l1c/ultra_l1c_pset_bins.py +112 -61
  232. imap_processing/ultra/lookup_tables/ultra_90_dps_exposure_compressed.cdf +0 -0
  233. imap_processing/ultra/utils/ultra_l1_utils.py +20 -2
  234. imap_processing/utils.py +68 -28
  235. {imap_processing-0.11.0.dist-info → imap_processing-0.12.0.dist-info}/METADATA +8 -5
  236. {imap_processing-0.11.0.dist-info → imap_processing-0.12.0.dist-info}/RECORD +250 -199
  237. imap_processing/cdf/config/imap_mag_l1_variable_attrs.yaml +0 -237
  238. imap_processing/hi/l1a/housekeeping.py +0 -27
  239. imap_processing/tests/codice/data/imap_codice_l1a_hi-counters-aggregated_20240429_v001.cdf +0 -0
  240. imap_processing/tests/codice/data/imap_codice_l1a_hi-counters-singles_20240429_v001.cdf +0 -0
  241. imap_processing/tests/codice/data/imap_codice_l1a_hi-omni_20240429_v001.cdf +0 -0
  242. imap_processing/tests/codice/data/imap_codice_l1a_hi-sectored_20240429_v001.cdf +0 -0
  243. imap_processing/tests/codice/data/imap_codice_l1a_hskp_20100101_v001.cdf +0 -0
  244. imap_processing/tests/codice/data/imap_codice_l1a_lo-counters-aggregated_20240429_v001.cdf +0 -0
  245. imap_processing/tests/codice/data/imap_codice_l1a_lo-counters-singles_20240429_v001.cdf +0 -0
  246. imap_processing/tests/codice/data/imap_codice_l1a_lo-nsw-angular_20240429_v001.cdf +0 -0
  247. imap_processing/tests/codice/data/imap_codice_l1a_lo-nsw-priority_20240429_v001.cdf +0 -0
  248. imap_processing/tests/codice/data/imap_codice_l1a_lo-nsw-species_20240429_v001.cdf +0 -0
  249. imap_processing/tests/codice/data/imap_codice_l1a_lo-sw-angular_20240429_v001.cdf +0 -0
  250. imap_processing/tests/codice/data/imap_codice_l1a_lo-sw-priority_20240429_v001.cdf +0 -0
  251. imap_processing/tests/codice/data/imap_codice_l1a_lo-sw-species_20240429_v001.cdf +0 -0
  252. imap_processing/tests/codice/data/imap_codice_l1b_hi-counters-aggregated_20240429_v001.cdf +0 -0
  253. imap_processing/tests/codice/data/imap_codice_l1b_hi-counters-singles_20240429_v001.cdf +0 -0
  254. imap_processing/tests/codice/data/imap_codice_l1b_hi-omni_20240429_v001.cdf +0 -0
  255. imap_processing/tests/codice/data/imap_codice_l1b_hi-sectored_20240429_v001.cdf +0 -0
  256. imap_processing/tests/codice/data/imap_codice_l1b_hskp_20100101_v001.cdf +0 -0
  257. imap_processing/tests/codice/data/imap_codice_l1b_lo-counters-aggregated_20240429_v001.cdf +0 -0
  258. imap_processing/tests/codice/data/imap_codice_l1b_lo-counters-singles_20240429_v001.cdf +0 -0
  259. imap_processing/tests/codice/data/imap_codice_l1b_lo-nsw-angular_20240429_v001.cdf +0 -0
  260. imap_processing/tests/codice/data/imap_codice_l1b_lo-nsw-priority_20240429_v001.cdf +0 -0
  261. imap_processing/tests/codice/data/imap_codice_l1b_lo-nsw-species_20240429_v001.cdf +0 -0
  262. imap_processing/tests/codice/data/imap_codice_l1b_lo-sw-angular_20240429_v001.cdf +0 -0
  263. imap_processing/tests/codice/data/imap_codice_l1b_lo-sw-priority_20240429_v001.cdf +0 -0
  264. imap_processing/tests/codice/data/imap_codice_l1b_lo-sw-species_20240429_v001.cdf +0 -0
  265. imap_processing/tests/hi/data/l1/imap_hi_l1b_45sensor-de_20250415_v999.cdf +0 -0
  266. imap_processing/tests/hit/PREFLIGHT_raw_record_2023_256_15_59_04_apid1251.pkts +0 -0
  267. imap_processing/tests/hit/PREFLIGHT_raw_record_2023_256_15_59_04_apid1252.pkts +0 -0
  268. imap_processing/tests/hit/validation_data/hskp_sample_eu.csv +0 -89
  269. imap_processing/tests/hit/validation_data/sci_sample_raw1.csv +0 -29
  270. imap_processing/tests/idex/test_data/imap_idex_l0_raw_20231214_v001.pkts +0 -0
  271. imap_processing/tests/lo/test_cdfs/imap_lo_l1a_de_20100101_v001.cdf +0 -0
  272. imap_processing/tests/lo/test_cdfs/imap_lo_l1a_spin_20100101_v001.cdf +0 -0
  273. imap_processing/tests/ultra/test_data/mock_data.py +0 -161
  274. imap_processing/ultra/l1c/pset.py +0 -40
  275. /imap_processing/tests/ultra/{test_data → data}/l0/FM45_40P_Phi28p5_BeamCal_LinearScan_phi28.50_theta-0.00_20240207T102740.CCSDS +0 -0
  276. /imap_processing/tests/ultra/{test_data → data}/l0/FM45_7P_Phi0.0_BeamCal_LinearScan_phi0.04_theta-0.01_20230821T121304.CCSDS +0 -0
  277. /imap_processing/tests/ultra/{test_data → data}/l0/FM45_TV_Cycle6_Hot_Ops_Front212_20240124T063837.CCSDS +0 -0
  278. /imap_processing/tests/ultra/{test_data → data}/l0/Ultra45_EM_SwRI_Cal_Run7_ThetaScan_20220530T225054.CCSDS +0 -0
  279. /imap_processing/tests/ultra/{test_data → data}/l0/ultra45_raw_sc_auxdata_Ultra45_EM_SwRI_Cal_Run7_ThetaScan_20220530T225054.csv +0 -0
  280. /imap_processing/tests/ultra/{test_data → data}/l0/ultra45_raw_sc_enaphxtofhangimg_FM45_TV_Cycle6_Hot_Ops_Front212_20240124T063837.csv +0 -0
  281. /imap_processing/tests/ultra/{test_data → data}/l0/ultra45_raw_sc_ultraimgrates_Ultra45_EM_SwRI_Cal_Run7_ThetaScan_20220530T225054.csv +0 -0
  282. /imap_processing/tests/ultra/{test_data → data}/l0/ultra45_raw_sc_ultrarawimgevent_FM45_7P_Phi00_BeamCal_LinearScan_phi004_theta-001_20230821T121304.csv +0 -0
  283. /imap_processing/tests/ultra/{test_data → data}/l1/dps_exposure_helio_45_E1.cdf +0 -0
  284. /imap_processing/tests/ultra/{test_data → data}/l1/dps_exposure_helio_45_E12.cdf +0 -0
  285. /imap_processing/tests/ultra/{test_data → data}/l1/dps_exposure_helio_45_E24.cdf +0 -0
  286. {imap_processing-0.11.0.dist-info → imap_processing-0.12.0.dist-info}/LICENSE +0 -0
  287. {imap_processing-0.11.0.dist-info → imap_processing-0.12.0.dist-info}/WHEEL +0 -0
  288. {imap_processing-0.11.0.dist-info → imap_processing-0.12.0.dist-info}/entry_points.txt +0 -0
@@ -19,16 +19,15 @@ from imap_processing._version import __version__, __version_tuple__ # noqa: F40
19
19
  # Eg. imap_module_directory = /usr/local/lib/python3.11/site-packages/imap_processing
20
20
  imap_module_directory = Path(__file__).parent
21
21
 
22
- # TODO: should we move this to imap-data-access?
23
22
  PROCESSING_LEVELS = {
24
- "codice": ["l0", "l1a", "l1b", "l2"],
25
- "glows": ["l0", "l1a", "l1b", "l2"],
26
- "hi": ["l0", "l1a", "l1b", "l1c", "l2"],
27
- "hit": ["l0", "l1a", "l1b", "l2"],
28
- "idex": ["l0", "l1a", "l1b", "l2a", "l2b"],
29
- "lo": ["l0", "l1a", "l1b", "l1c", "l2"],
30
- "mag": ["l0", "l1a", "l1b", "l1c", "l2pre", "l2"],
31
- "swapi": ["l0", "l1", "l2", "l3a", "l3b"],
32
- "swe": ["l0", "l1a", "l1b", "l2"],
33
- "ultra": ["l0", "l1a", "l1b", "l1c", "l2"],
23
+ "codice": ["l1a", "l1b", "l2"],
24
+ "glows": ["l1a", "l1b", "l2"],
25
+ "hi": ["l1a", "l1b", "l1c", "l2"],
26
+ "hit": ["l1a", "l1b", "l2"],
27
+ "idex": ["l1a", "l1b", "l2a", "l2b"],
28
+ "lo": ["l1a", "l1b", "l1c", "l2"],
29
+ "mag": ["l1a", "l1b", "l1c", "l1d", "l2"],
30
+ "swapi": ["l1", "l2", "l3a", "l3b"],
31
+ "swe": ["l1a", "l1b", "l2"],
32
+ "ultra": ["l1a", "l1b", "l1c", "l2"],
34
33
  }
@@ -1,3 +1,3 @@
1
1
  # These version placeholders will be replaced later during substitution.
2
- __version__ = "0.11.0"
3
- __version_tuple__ = (0, 11, 0)
2
+ __version__ = "0.12.0"
3
+ __version_tuple__ = (0, 12, 0)
@@ -352,21 +352,70 @@ class XTCEGenerator:
352
352
  conversion = analog_conversion.loc[
353
353
  (analog_conversion["mnemonic"] == row["mnemonic"])
354
354
  & (analog_conversion["packetName"] == row["packetName"])
355
- ].iloc[0]
355
+ ]
356
+ name = f"{row['packetName']}.{row['mnemonic']}"
356
357
 
357
- # Create the Conversion element
358
- default_calibrator = Et.SubElement(encoding, "xtce:DefaultCalibrator")
359
- polynomial_calibrator = Et.SubElement(
360
- default_calibrator, "xtce:PolynomialCalibrator"
361
- )
362
- # FIXME: Use lowValue / highValue from the conversion sheet
363
- # FIXME: Handle segmented polynomials (only using first segment now)
364
- for i in range(8):
365
- col = f"c{i}"
366
- if conversion[col] != 0:
367
- term = Et.SubElement(polynomial_calibrator, "xtce:Term")
368
- term.attrib["coefficient"] = str(conversion[col])
369
- term.attrib["exponent"] = str(i)
358
+ def add_poly_calibrator(segment: pd.Series, calibrator: Et.Element) -> None:
359
+ """
360
+ Add a polynomial calibrator to the input calibrator element.
361
+
362
+ Parameters
363
+ ----------
364
+ segment : pandas.Series
365
+ Row from the AnalogConversions sheet.
366
+ calibrator : Element
367
+ The calibrator element to add the polynomial to.
368
+ """
369
+ polynomial_calibrator = Et.SubElement(
370
+ calibrator, "xtce:PolynomialCalibrator"
371
+ )
372
+ for i in range(8):
373
+ col = f"c{i}"
374
+ if segment[col] != 0:
375
+ term = Et.SubElement(polynomial_calibrator, "xtce:Term")
376
+ term.attrib["coefficient"] = str(segment[col])
377
+ term.attrib["exponent"] = str(i)
378
+
379
+ if len(conversion) == 1:
380
+ # Unsegmented Polynomial has a single calibrator
381
+ # NOTE: We don't add the low/high limits to unsegmented polynomials
382
+ # because some instruments haven't defined these
383
+ calibrator = Et.SubElement(encoding, "xtce:DefaultCalibrator")
384
+ # There is only one segment, so no need to iterate here
385
+ segment = conversion.iloc[0]
386
+ add_poly_calibrator(segment, calibrator)
387
+ else:
388
+ # Segmented Polynomial has a list of calibrators
389
+ context_calibrator_list = Et.SubElement(
390
+ encoding, "xtce:ContextCalibratorList"
391
+ )
392
+ # One context calibrator for each segment
393
+ for _, segment in conversion.iterrows():
394
+ context_calibrator = Et.SubElement(
395
+ context_calibrator_list, "xtce:ContextCalibrator"
396
+ )
397
+
398
+ # The matching criteria for this calibrator
399
+ # >= lowValue and <= highValue
400
+ context_match = Et.SubElement(context_calibrator, "xtce:ContextMatch")
401
+ comparison_list = Et.SubElement(context_match, "xtce:ComparisonList")
402
+ comparison = Et.SubElement(comparison_list, "xtce:Comparison")
403
+ comparison.attrib["comparisonOperator"] = ">="
404
+ comparison.attrib["value"] = str(int(segment["lowValue"]))
405
+ comparison.attrib["parameterRef"] = name
406
+ # This references the parameter name itself, so we use the uncalibrated
407
+ # value for comparison
408
+ comparison.attrib["useCalibratedValue"] = "false"
409
+ comparison = Et.SubElement(comparison_list, "xtce:Comparison")
410
+ comparison.attrib["comparisonOperator"] = "<="
411
+ comparison.attrib["value"] = str(int(segment["highValue"]))
412
+ comparison.attrib["parameterRef"] = name
413
+ comparison.attrib["useCalibratedValue"] = "false"
414
+
415
+ # The calibrator for this segment
416
+ # (used if the matching criteria are met)
417
+ calibrator = Et.SubElement(context_calibrator, "xtce:Calibrator")
418
+ add_poly_calibrator(segment, calibrator)
370
419
 
371
420
  def _add_state_conversion(self, row: pd.Series, parameter_type: Et.Element) -> None:
372
421
  """
@@ -394,8 +443,8 @@ class XTCEGenerator:
394
443
  for _, state_row in state_sheet.iterrows():
395
444
  enumeration = Et.SubElement(enumeration_list, "xtce:Enumeration")
396
445
  valid_state = self._ensure_state_value_is_int(state_row)
397
- enumeration.attrib["value"] = str(valid_state["value"])
398
- enumeration.attrib["label"] = str(valid_state["state"])
446
+ enumeration.attrib["value"] = str(valid_state["value"]).strip()
447
+ enumeration.attrib["label"] = str(valid_state["state"]).strip()
399
448
 
400
449
  def _ensure_state_value_is_int(self, state: dict) -> dict:
401
450
  """
@@ -16,105 +16,96 @@ instrument_base: &instrument_base
16
16
  # L1a
17
17
  imap_codice_l1a_hskp:
18
18
  <<: *instrument_base
19
- Data_level: 1A
20
19
  Data_type: L1A_hskp->Level-1A Housekeeping Data
21
20
  Logical_source: imap_codice_l1a_hskp
22
21
  Logical_source_description: IMAP Mission CoDICE Instrument Level-1A Housekeeping Data.
23
22
 
24
23
  imap_codice_l1a_hi-counters-aggregated:
25
24
  <<: *instrument_base
26
- Data_level: 1A
27
25
  Data_type: L1A_hi-counters-aggregated->Level-1A Hi Aggregated Instrument Counts Data
28
26
  Logical_source: imap_codice_l1a_hi-counters-aggregated
29
27
  Logical_source_description: IMAP Mission CoDICE Hi Level-1A Aggregated Instrument Counts Data.
30
28
 
31
29
  imap_codice_l1a_hi-counters-singles:
32
30
  <<: *instrument_base
33
- Data_level: 1A
34
31
  Data_type: L1A_hi-counters-singles->Level-1A Hi Single Instrument Counts Data
35
32
  Logical_source: imap_codice_l1a_hi-counters-singles
36
33
  Logical_source_description: IMAP Mission CoDICE Hi Level-1A Single Instrument Counts Data.
37
34
 
38
35
  imap_codice_l1a_hi-omni:
39
36
  <<: *instrument_base
40
- Data_level: 1A
41
37
  Data_type: L1A_hi-omni->Level-1A Hi Omnidirectional Data
42
38
  Logical_source: imap_codice_l1a_hi-omni
43
39
  Logical_source_description: IMAP Mission CoDICE Hi Level-1A Omnidirectional Data.
44
40
 
41
+ imap_codice_l1a_hi-priority:
42
+ <<: *instrument_base
43
+ Data_type: L1A_hi-priority->Level-1A Hi Priority Data
44
+ Logical_source: imap_codice_l1a_hi-priority
45
+ Logical_source_description: IMAP Mission CoDICE Hi Level-1A Priority Data.
46
+
45
47
  imap_codice_l1a_hi-sectored:
46
48
  <<: *instrument_base
47
- Data_level: 1A
48
49
  Data_type: L1A_hi-sectored->Level-1A Hi Sectored Data
49
50
  Logical_source: imap_codice_l1a_hi-sectored
50
51
  Logical_source_description: IMAP Mission CoDICE Hi Level-1A Sectored Data.
51
52
 
52
53
  imap_codice_l1a_hi-pha:
53
54
  <<: *instrument_base
54
- Data_level: 1A
55
55
  Data_type: L1A_hi-pha->Level-1A Hi Event Data
56
56
  Logical_source: imap_codice_l1a_hi-pha
57
57
  Logical_source_description: IMAP Mission CoDICE Hi Level-1A Event Data.
58
58
 
59
59
  imap_codice_l1a_lo-counters-aggregated:
60
60
  <<: *instrument_base
61
- Data_level: 1A
62
61
  Data_type: L1A_lo-counters-aggregated->Level-1A Lo Aggregated Instrument Counts Data
63
62
  Logical_source: imap_codice_l1a_lo-counters-aggregated
64
63
  Logical_source_description: IMAP Mission CoDICE Lo Level-1A Aggregated Instrument Counts Data.
65
64
 
66
65
  imap_codice_l1a_lo-counters-singles:
67
66
  <<: *instrument_base
68
- Data_level: 1A
69
67
  Data_type: L1A_lo-counters-singles->Level-1A Lo Single Instrument Counts Data
70
68
  Logical_source: imap_codice_l1a_lo-counters-singles
71
69
  Logical_source_description: IMAP Mission CoDICE Lo Level-1A Single Instrument Counts Data.
72
70
 
73
71
  imap_codice_l1a_lo-sw-angular:
74
72
  <<: *instrument_base
75
- Data_level: 1A
76
73
  Data_type: L1A_lo-sw-angular->Level-1A Lo Sunward Angular Counts Data
77
74
  Logical_source: imap_codice_l1a_lo-sw-angular
78
75
  Logical_source_description: IMAP Mission CoDICE Lo Level-1A Sunward Angular Counts Data.
79
76
 
80
77
  imap_codice_l1a_lo-nsw-angular:
81
78
  <<: *instrument_base
82
- Data_level: 1A
83
79
  Data_type: L1A_lo-nsw-angular->Level-1A Lo Non-Sunward Angular Counts Data
84
80
  Logical_source: imap_codice_l1a_lo-nsw-angular
85
81
  Logical_source_description: IMAP Mission CoDICE Lo Level-1A Non-Sunward Angular Counts Data.
86
82
 
87
83
  imap_codice_l1a_lo-sw-priority:
88
84
  <<: *instrument_base
89
- Data_level: 1A
90
85
  Data_type: L1A_lo-sw-priority->Level-1A Lo Sunward Priority Counts Data
91
86
  Logical_source: imap_codice_l1a_lo-sw-priority
92
87
  Logical_source_description: IMAP Mission CoDICE Lo Level-1A Sunward Priority Counts Data.
93
88
 
94
89
  imap_codice_l1a_lo-nsw-priority:
95
90
  <<: *instrument_base
96
- Data_level: 1A
97
91
  Data_type: L1A_lo-nsw-priority->Level-1A Lo Non-Sunward Priority Counts Data
98
92
  Logical_source: imap_codice_l1a_lo-nsw-priority
99
93
  Logical_source_description: IMAP Mission CoDICE Lo Level-1A Non-Sunward Priority Counts Data.
100
94
 
101
95
  imap_codice_l1a_lo-sw-species:
102
96
  <<: *instrument_base
103
- Data_level: 1A
104
97
  Data_type: L1A_lo-sw-species->Level-1A Lo Sunward Species Counts Data
105
98
  Logical_source: imap_codice_l1a_lo-sw-species
106
99
  Logical_source_description: IMAP Mission CoDICE Lo Level-1A Sunward Species Counts Data.
107
100
 
108
101
  imap_codice_l1a_lo-nsw-species:
109
102
  <<: *instrument_base
110
- Data_level: 1A
111
103
  Data_type: L1A_lo-nsw-species->Level-1A Lo Non-Sunward Species Counts Data
112
104
  Logical_source: imap_codice_l1a_lo-nsw-species
113
105
  Logical_source_description: IMAP Mission CoDICE Lo Level-1A Non-Sunward Species Counts Data.
114
106
 
115
107
  imap_codice_l1a_lo-pha:
116
108
  <<: *instrument_base
117
- Data_level: 1A
118
109
  Data_type: L1A_lo-pha->Level-1A Lo Event Data
119
110
  Logical_source: imap_codice_l1a_lo-pha
120
111
  Logical_source_description: IMAP Mission CoDICE Lo Level-1A Event Data.
@@ -122,91 +113,78 @@ imap_codice_l1a_lo-pha:
122
113
  # L1b
123
114
  imap_codice_l1b_hskp:
124
115
  <<: *instrument_base
125
- Data_level: 1B
126
116
  Data_type: L1B_hskp->Level-1B Housekeeping Data
127
117
  Logical_source: imap_codice_l1b_hskp
128
118
  Logical_source_description: IMAP Mission CoDICE Instrument Level-1B Housekeeping Data.
129
119
 
130
120
  imap_codice_l1b_hi_counters_aggregated:
131
121
  <<: *instrument_base
132
- Data_level: 1B
133
122
  Data_type: L1B_hi-counters-aggregated->Level-1B Hi Aggregated Instrument Rates Data
134
123
  Logical_source: imap_codice_l1b_hi-counters-aggregated
135
124
  Logical_source_description: IMAP Mission CoDICE Hi Level-1B Aggregated Instrument Rates Data.
136
125
 
137
126
  imap_codice_l1b_hi_counters_singles:
138
127
  <<: *instrument_base
139
- Data_level: 1B
140
128
  Data_type: L1B_hi-counters-singles->Level-1B Hi Single Instrument Rates Data
141
129
  Logical_source: imap_codice_l1b_hi-counters-singles
142
130
  Logical_source_description: IMAP Mission CoDICE Hi Level-1B Single Instrument Rates Data.
143
131
 
144
132
  imap_codice_l1b_hi_omni:
145
133
  <<: *instrument_base
146
- Data_level: 1B
147
134
  Data_type: L1B_hi-omni->Level-1B Hi Omnidirectional Data
148
135
  Logical_source: imap_codice_l1b_hi-omni
149
136
  Logical_source_description: IMAP Mission CoDICE Hi Level-1B Omnidirectional Data.
150
137
 
151
138
  imap_codice_l1b_hi_sectored:
152
139
  <<: *instrument_base
153
- Data_level: 1B
154
140
  Data_type: L1B_hi-sectored->Level-1B Hi Sectored Data
155
141
  Logical_source: imap_codice_l1b_hi-sectored
156
142
  Logical_source_description: IMAP Mission CoDICE Hi Level-1B Sectored Data.
157
143
 
158
144
  imap_codice_l1b_lo_counters_aggregated:
159
145
  <<: *instrument_base
160
- Data_level: 1B
161
146
  Data_type: L1B_lo-counters-aggregated->Level-1B Lo Aggregated Instrument Rates Data
162
147
  Logical_source: imap_codice_l1b_lo-counters-aggregated
163
148
  Logical_source_description: IMAP Mission CoDICE Lo Level-1B Aggregated Instrument Rates Data.
164
149
 
165
150
  imap_codice_l1b_lo_counters_singles:
166
151
  <<: *instrument_base
167
- Data_level: 1B
168
152
  Data_type: L1B_lo-counters-aggregated->Level-1B Lo Single Instrument Rates Data
169
153
  Logical_source: imap_codice_l1b_lo-counters-singles
170
154
  Logical_source_description: IMAP Mission CoDICE Lo Level-1B Single Instrument Rates Data.
171
155
 
172
156
  imap_codice_l1b_lo_sw_angular:
173
157
  <<: *instrument_base
174
- Data_level: 1B
175
158
  Data_type: L1B_lo-sw-angular->Level-1B Lo Sunward Angular Rates Data
176
159
  Logical_source: imap_codice_l1b_lo-sw-angular
177
160
  Logical_source_description: IMAP Mission CoDICE Lo Level-1B Sunward Angular Rates Data.
178
161
 
179
162
  imap_codice_l1b_lo_nsw_angular:
180
163
  <<: *instrument_base
181
- Data_level: 1B
182
164
  Data_type: L1B_lo-nsw-angular->Level-1B Lo Non-Sunward Angular Rates Data
183
165
  Logical_source: imap_codice_l1b_lo-nsw-angular
184
166
  Logical_source_description: IMAP Mission CoDICE Lo Level-1B Non-Sunward Angular Rates Data.
185
167
 
186
168
  imap_codice_l1b_lo_sw_priority:
187
169
  <<: *instrument_base
188
- Data_level: 1B
189
170
  Data_type: L1B_lo-sw-priority->Level-1B Lo Sunward Priority Rates Data
190
171
  Logical_source: imap_codice_l1b_lo-sw-priority
191
172
  Logical_source_description: IMAP Mission CoDICE Lo Level-1B Sunward Priority Rates Data.
192
173
 
193
174
  imap_codice_l1b_lo_nsw_priority:
194
175
  <<: *instrument_base
195
- Data_level: 1B
196
176
  Data_type: L1B_lo-nsw-priority->Level-1B Lo Non-Sunward Priority Rates Data
197
177
  Logical_source: imap_codice_l1b_lo-nsw-priority
198
178
  Logical_source_description: IMAP Mission CoDICE Lo Level-1B Non-Sunward Priority Rates Data.
199
179
 
200
180
  imap_codice_l1b_lo_sw_species:
201
181
  <<: *instrument_base
202
- Data_level: 1B
203
182
  Data_type: L1B_lo-sw-species->Level-1B Lo Sunward Species Rates Data
204
183
  Logical_source: imap_codice_l1b_lo-sw-species
205
184
  Logical_source_description: IMAP Mission CoDICE Lo Level-1B Sunward Species Rates Data.
206
185
 
207
186
  imap_codice_l1b_lo_nsw_species:
208
187
  <<: *instrument_base
209
- Data_level: 1B
210
188
  Data_type: L1B_lo-nsw-species->Level-1B Lo Non-Sunward Species Rates Data
211
189
  Logical_source: imap_codice_l1b_lo-nsw-species
212
190
  Logical_source_description: IMAP Mission CoDICE Lo Level-1B Non-Sunward Species Rates Data.