imap-processing 0.6.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.
Files changed (398) hide show
  1. imap_processing/__init__.py +34 -0
  2. imap_processing/_version.py +3 -0
  3. imap_processing/ccsds/__init__.py +0 -0
  4. imap_processing/ccsds/ccsds_data.py +55 -0
  5. imap_processing/ccsds/excel_to_xtce.py +477 -0
  6. imap_processing/cdf/__init__.py +0 -0
  7. imap_processing/cdf/cdf_attribute_manager.py +322 -0
  8. imap_processing/cdf/config/imap_codice_global_cdf_attrs.yaml +212 -0
  9. imap_processing/cdf/config/imap_codice_l1a_variable_attrs.yaml +1358 -0
  10. imap_processing/cdf/config/imap_codice_l1b_variable_attrs.yaml +391 -0
  11. imap_processing/cdf/config/imap_constant_attrs.yaml +33 -0
  12. imap_processing/cdf/config/imap_default_global_cdf_attrs.yaml +17 -0
  13. imap_processing/cdf/config/imap_glows_global_cdf_attrs.yaml +41 -0
  14. imap_processing/cdf/config/imap_glows_l1a_variable_attrs.yaml +499 -0
  15. imap_processing/cdf/config/imap_glows_l1b_variable_attrs.yaml +334 -0
  16. imap_processing/cdf/config/imap_hi_global_cdf_attrs.yaml +51 -0
  17. imap_processing/cdf/config/imap_hi_variable_attrs.yaml +435 -0
  18. imap_processing/cdf/config/imap_hit_global_cdf_attrs.yaml +27 -0
  19. imap_processing/cdf/config/imap_hit_l1a_variable_attrs.yaml +493 -0
  20. imap_processing/cdf/config/imap_hit_l1b_variable_attrs.yaml +564 -0
  21. imap_processing/cdf/config/imap_idex_global_cdf_attrs.yaml +24 -0
  22. imap_processing/cdf/config/imap_idex_l1a_variable_attrs.yaml +426 -0
  23. imap_processing/cdf/config/imap_lo_global_cdf_attrs.yaml +90 -0
  24. imap_processing/cdf/config/imap_lo_l1a_variable_attrs.yaml +487 -0
  25. imap_processing/cdf/config/imap_lo_l1b_variable_attrs.yaml +121 -0
  26. imap_processing/cdf/config/imap_lo_l1c_variable_attrs.yaml +179 -0
  27. imap_processing/cdf/config/imap_mag_global_cdf_attrs.yaml +97 -0
  28. imap_processing/cdf/config/imap_mag_l1_variable_attrs.yaml +201 -0
  29. imap_processing/cdf/config/imap_swapi_global_cdf_attrs.yaml +33 -0
  30. imap_processing/cdf/config/imap_swapi_variable_attrs.yaml +137 -0
  31. imap_processing/cdf/config/imap_swe_global_cdf_attrs.yaml +24 -0
  32. imap_processing/cdf/config/imap_swe_l1a_variable_attrs.yaml +234 -0
  33. imap_processing/cdf/config/imap_swe_l1b_variable_attrs.yaml +273 -0
  34. imap_processing/cdf/config/imap_ultra_global_cdf_attrs.yaml +100 -0
  35. imap_processing/cdf/config/imap_ultra_l1a_variable_attrs.yaml +52 -0
  36. imap_processing/cdf/config/imap_ultra_l1b_variable_attrs.yaml +297 -0
  37. imap_processing/cdf/config/imap_ultra_l1c_variable_attrs.yaml +121 -0
  38. imap_processing/cdf/config/shared/default_global_cdf_attrs_schema.yaml +246 -0
  39. imap_processing/cdf/config/shared/default_variable_cdf_attrs_schema.yaml +466 -0
  40. imap_processing/cdf/imap_cdf_manager.py +64 -0
  41. imap_processing/cdf/utils.py +147 -0
  42. imap_processing/cli.py +863 -0
  43. imap_processing/codice/__init__.py +1 -0
  44. imap_processing/codice/codice_l0.py +54 -0
  45. imap_processing/codice/codice_l1a.py +558 -0
  46. imap_processing/codice/codice_l1b.py +194 -0
  47. imap_processing/codice/constants.py +986 -0
  48. imap_processing/codice/data/esa_sweep_values.csv +257 -0
  49. imap_processing/codice/data/lo_stepping_values.csv +129 -0
  50. imap_processing/codice/decompress.py +142 -0
  51. imap_processing/codice/packet_definitions/P_COD_NHK.xml +618 -0
  52. imap_processing/codice/packet_definitions/codice_packet_definition.xml +5073 -0
  53. imap_processing/codice/utils.py +95 -0
  54. imap_processing/decom.py +40 -0
  55. imap_processing/glows/__init__.py +1 -0
  56. imap_processing/glows/ancillary/l1b_conversion_table_v001.json +42 -0
  57. imap_processing/glows/l0/__init__.py +0 -0
  58. imap_processing/glows/l0/decom_glows.py +91 -0
  59. imap_processing/glows/l0/glows_l0_data.py +194 -0
  60. imap_processing/glows/l1a/glows_l1a.py +424 -0
  61. imap_processing/glows/l1a/glows_l1a_data.py +555 -0
  62. imap_processing/glows/l1b/glows_l1b.py +270 -0
  63. imap_processing/glows/l1b/glows_l1b_data.py +583 -0
  64. imap_processing/glows/packet_definitions/GLX_COMBINED.xml +254 -0
  65. imap_processing/glows/packet_definitions/P_GLX_TMSCDE.xml +97 -0
  66. imap_processing/glows/packet_definitions/P_GLX_TMSCHIST.xml +215 -0
  67. imap_processing/glows/utils/__init__.py +0 -0
  68. imap_processing/glows/utils/constants.py +105 -0
  69. imap_processing/hi/__init__.py +1 -0
  70. imap_processing/hi/l0/__init__.py +0 -0
  71. imap_processing/hi/l0/decom_hi.py +24 -0
  72. imap_processing/hi/l1a/__init__.py +0 -0
  73. imap_processing/hi/l1a/hi_l1a.py +73 -0
  74. imap_processing/hi/l1a/histogram.py +142 -0
  75. imap_processing/hi/l1a/housekeeping.py +27 -0
  76. imap_processing/hi/l1a/science_direct_event.py +341 -0
  77. imap_processing/hi/l1b/__init__.py +0 -0
  78. imap_processing/hi/l1b/hi_eng_unit_convert_table.csv +154 -0
  79. imap_processing/hi/l1b/hi_l1b.py +127 -0
  80. imap_processing/hi/l1c/__init__.py +0 -0
  81. imap_processing/hi/l1c/hi_l1c.py +228 -0
  82. imap_processing/hi/packet_definitions/__init__.py +0 -0
  83. imap_processing/hi/packet_definitions/hi_packet_definition.xml +482 -0
  84. imap_processing/hi/utils.py +27 -0
  85. imap_processing/hit/__init__.py +1 -0
  86. imap_processing/hit/l0/__init__.py +0 -0
  87. imap_processing/hit/l0/data_classes/housekeeping.py +240 -0
  88. imap_processing/hit/l0/data_classes/science_packet.py +259 -0
  89. imap_processing/hit/l0/decom_hit.py +467 -0
  90. imap_processing/hit/l0/utils/hit_base.py +57 -0
  91. imap_processing/hit/l1a/__init__.py +0 -0
  92. imap_processing/hit/l1a/hit_l1a.py +254 -0
  93. imap_processing/hit/l1b/hit_l1b.py +179 -0
  94. imap_processing/hit/packet_definitions/hit_packet_definitions.xml +1276 -0
  95. imap_processing/ialirt/__init__.py +0 -0
  96. imap_processing/ialirt/l0/__init__.py +0 -0
  97. imap_processing/ialirt/l0/process_hit.py +220 -0
  98. imap_processing/ialirt/packet_definitions/__init__.py +0 -0
  99. imap_processing/ialirt/packet_definitions/ialirt.xml +778 -0
  100. imap_processing/ialirt/packet_definitions/ialirt_hit.xml +186 -0
  101. imap_processing/idex/__init__.py +2 -0
  102. imap_processing/idex/idex_constants.py +27 -0
  103. imap_processing/idex/idex_l0.py +31 -0
  104. imap_processing/idex/idex_l1a.py +631 -0
  105. imap_processing/idex/packet_definitions/idex_packet_definition.xml +3162 -0
  106. imap_processing/lo/__init__.py +1 -0
  107. imap_processing/lo/l0/__init__.py +0 -0
  108. imap_processing/lo/l0/data_classes/science_direct_events.py +215 -0
  109. imap_processing/lo/l0/data_classes/star_sensor.py +98 -0
  110. imap_processing/lo/l0/decompression_tables/12_to_16_bit.csv +4097 -0
  111. imap_processing/lo/l0/decompression_tables/8_to_12_bit.csv +257 -0
  112. imap_processing/lo/l0/decompression_tables/8_to_16_bit.csv +257 -0
  113. imap_processing/lo/l0/decompression_tables/decompression_tables.py +75 -0
  114. imap_processing/lo/l0/lo_apid.py +15 -0
  115. imap_processing/lo/l0/lo_science.py +150 -0
  116. imap_processing/lo/l0/utils/binary_string.py +59 -0
  117. imap_processing/lo/l0/utils/bit_decompression.py +62 -0
  118. imap_processing/lo/l0/utils/lo_base.py +57 -0
  119. imap_processing/lo/l1a/__init__.py +0 -0
  120. imap_processing/lo/l1a/lo_l1a.py +157 -0
  121. imap_processing/lo/l1b/lo_l1b.py +160 -0
  122. imap_processing/lo/l1c/lo_l1c.py +180 -0
  123. imap_processing/lo/packet_definitions/lo_xtce.xml +3541 -0
  124. imap_processing/mag/__init__.py +2 -0
  125. imap_processing/mag/constants.py +108 -0
  126. imap_processing/mag/l0/decom_mag.py +170 -0
  127. imap_processing/mag/l0/mag_l0_data.py +118 -0
  128. imap_processing/mag/l1a/mag_l1a.py +317 -0
  129. imap_processing/mag/l1a/mag_l1a_data.py +1007 -0
  130. imap_processing/mag/l1b/__init__.py +0 -0
  131. imap_processing/mag/l1b/imap_calibration_mag_20240229_v01.cdf +0 -0
  132. imap_processing/mag/l1b/mag_l1b.py +125 -0
  133. imap_processing/mag/l1c/mag_l1c.py +57 -0
  134. imap_processing/mag/packet_definitions/MAG_SCI_COMBINED.xml +235 -0
  135. imap_processing/quality_flags.py +91 -0
  136. imap_processing/spice/__init__.py +1 -0
  137. imap_processing/spice/geometry.py +322 -0
  138. imap_processing/spice/kernels.py +459 -0
  139. imap_processing/spice/time.py +72 -0
  140. imap_processing/swapi/__init__.py +1 -0
  141. imap_processing/swapi/l1/__init__.py +0 -0
  142. imap_processing/swapi/l1/swapi_l1.py +685 -0
  143. imap_processing/swapi/l2/__init__.py +0 -0
  144. imap_processing/swapi/l2/swapi_l2.py +107 -0
  145. imap_processing/swapi/packet_definitions/__init__.py +0 -0
  146. imap_processing/swapi/packet_definitions/swapi_packet_definition.xml +708 -0
  147. imap_processing/swapi/swapi_utils.py +25 -0
  148. imap_processing/swe/__init__.py +1 -0
  149. imap_processing/swe/l1a/__init__.py +0 -0
  150. imap_processing/swe/l1a/swe_l1a.py +48 -0
  151. imap_processing/swe/l1a/swe_science.py +223 -0
  152. imap_processing/swe/l1b/engineering_unit_convert_table.csv +65 -0
  153. imap_processing/swe/l1b/swe_esa_lookup_table.csv +1441 -0
  154. imap_processing/swe/l1b/swe_l1b.py +49 -0
  155. imap_processing/swe/l1b/swe_l1b_science.py +557 -0
  156. imap_processing/swe/packet_definitions/__init__.py +0 -0
  157. imap_processing/swe/packet_definitions/swe_packet_definition.xml +303 -0
  158. imap_processing/swe/utils/__init__.py +0 -0
  159. imap_processing/swe/utils/swe_utils.py +9 -0
  160. imap_processing/tests/__init__.py +0 -0
  161. imap_processing/tests/ccsds/test_data/expected_output.xml +171 -0
  162. imap_processing/tests/ccsds/test_excel_to_xtce.py +285 -0
  163. imap_processing/tests/cdf/__init__.py +0 -0
  164. imap_processing/tests/cdf/imap_default_global_cdf_attrs.yaml +8 -0
  165. imap_processing/tests/cdf/shared/default_global_cdf_attrs_schema.yaml +246 -0
  166. imap_processing/tests/cdf/shared/default_variable_cdf_attrs_schema.yaml +466 -0
  167. imap_processing/tests/cdf/test_cdf_attribute_manager.py +353 -0
  168. imap_processing/tests/cdf/test_data/imap_default_global_test_cdf_attrs.yaml +7 -0
  169. imap_processing/tests/cdf/test_data/imap_instrument1_global_cdf_attrs.yaml +14 -0
  170. imap_processing/tests/cdf/test_data/imap_instrument1_level1_variable_attrs.yaml +23 -0
  171. imap_processing/tests/cdf/test_data/imap_instrument2_global_cdf_attrs.yaml +23 -0
  172. imap_processing/tests/cdf/test_data/imap_instrument2_level2_variable_attrs.yaml +30 -0
  173. imap_processing/tests/cdf/test_data/imap_test_global.yaml +26 -0
  174. imap_processing/tests/cdf/test_data/imap_test_variable.yaml +41 -0
  175. imap_processing/tests/cdf/test_imap_cdf_manager.py +62 -0
  176. imap_processing/tests/cdf/test_utils.py +109 -0
  177. imap_processing/tests/codice/__init__.py +0 -0
  178. imap_processing/tests/codice/conftest.py +56 -0
  179. imap_processing/tests/codice/data/eu_unit_lookup_table.csv +101 -0
  180. imap_processing/tests/codice/data/idle_export_eu.COD_NHK_20230822_122700 2.csv +100 -0
  181. imap_processing/tests/codice/data/idle_export_raw.COD_NHK_20230822_122700.csv +100 -0
  182. imap_processing/tests/codice/data/imap_codice_l0_hi-counters-aggregated_20240429_v001.pkts +0 -0
  183. imap_processing/tests/codice/data/imap_codice_l0_hi-counters-singles_20240429_v001.pkts +0 -0
  184. imap_processing/tests/codice/data/imap_codice_l0_hi-omni_20240429_v001.pkts +0 -0
  185. imap_processing/tests/codice/data/imap_codice_l0_hi-pha_20240429_v001.pkts +0 -0
  186. imap_processing/tests/codice/data/imap_codice_l0_hi-sectored_20240429_v001.pkts +0 -0
  187. imap_processing/tests/codice/data/imap_codice_l0_hskp_20100101_v001.pkts +0 -0
  188. imap_processing/tests/codice/data/imap_codice_l0_lo-counters-aggregated_20240429_v001.pkts +0 -0
  189. imap_processing/tests/codice/data/imap_codice_l0_lo-counters-singles_20240429_v001.pkts +0 -0
  190. imap_processing/tests/codice/data/imap_codice_l0_lo-nsw-angular_20240429_v001.pkts +0 -0
  191. imap_processing/tests/codice/data/imap_codice_l0_lo-nsw-priority_20240429_v001.pkts +0 -0
  192. imap_processing/tests/codice/data/imap_codice_l0_lo-nsw-species_20240429_v001.pkts +0 -0
  193. imap_processing/tests/codice/data/imap_codice_l0_lo-pha_20240429_v001.pkts +0 -0
  194. imap_processing/tests/codice/data/imap_codice_l0_lo-sw-angular_20240429_v001.pkts +0 -0
  195. imap_processing/tests/codice/data/imap_codice_l0_lo-sw-priority_20240429_v001.pkts +0 -0
  196. imap_processing/tests/codice/data/imap_codice_l0_lo-sw-species_20240429_v001.pkts +0 -0
  197. imap_processing/tests/codice/data/imap_codice_l1a_hi-counters-aggregated_20240429_v001.cdf +0 -0
  198. imap_processing/tests/codice/data/imap_codice_l1a_hi-counters-singles_20240429_v001.cdf +0 -0
  199. imap_processing/tests/codice/data/imap_codice_l1a_hi-omni_20240429_v001.cdf +0 -0
  200. imap_processing/tests/codice/data/imap_codice_l1a_hi-sectored_20240429_v001.cdf +0 -0
  201. imap_processing/tests/codice/data/imap_codice_l1a_hskp_20100101_v001.cdf +0 -0
  202. imap_processing/tests/codice/data/imap_codice_l1a_lo-counters-aggregated_20240429_v001.cdf +0 -0
  203. imap_processing/tests/codice/data/imap_codice_l1a_lo-counters-singles_20240429_v001.cdf +0 -0
  204. imap_processing/tests/codice/data/imap_codice_l1a_lo-nsw-angular_20240429_v001.cdf +0 -0
  205. imap_processing/tests/codice/data/imap_codice_l1a_lo-nsw-priority_20240429_v001.cdf +0 -0
  206. imap_processing/tests/codice/data/imap_codice_l1a_lo-nsw-species_20240429_v001.cdf +0 -0
  207. imap_processing/tests/codice/data/imap_codice_l1a_lo-sw-angular_20240429_v001.cdf +0 -0
  208. imap_processing/tests/codice/data/imap_codice_l1a_lo-sw-priority_20240429_v001.cdf +0 -0
  209. imap_processing/tests/codice/data/imap_codice_l1a_lo-sw-species_20240429_v001.cdf +0 -0
  210. imap_processing/tests/codice/data/imap_codice_l1b_hi-counters-aggregated_20240429_v001.cdf +0 -0
  211. imap_processing/tests/codice/data/imap_codice_l1b_hi-counters-singles_20240429_v001.cdf +0 -0
  212. imap_processing/tests/codice/data/imap_codice_l1b_hi-omni_20240429_v001.cdf +0 -0
  213. imap_processing/tests/codice/data/imap_codice_l1b_hi-sectored_20240429_v001.cdf +0 -0
  214. imap_processing/tests/codice/data/imap_codice_l1b_hskp_20100101_v001.cdf +0 -0
  215. imap_processing/tests/codice/data/imap_codice_l1b_lo-counters-aggregated_20240429_v001.cdf +0 -0
  216. imap_processing/tests/codice/data/imap_codice_l1b_lo-counters-singles_20240429_v001.cdf +0 -0
  217. imap_processing/tests/codice/data/imap_codice_l1b_lo-nsw-angular_20240429_v001.cdf +0 -0
  218. imap_processing/tests/codice/data/imap_codice_l1b_lo-nsw-priority_20240429_v001.cdf +0 -0
  219. imap_processing/tests/codice/data/imap_codice_l1b_lo-nsw-species_20240429_v001.cdf +0 -0
  220. imap_processing/tests/codice/data/imap_codice_l1b_lo-sw-angular_20240429_v001.cdf +0 -0
  221. imap_processing/tests/codice/data/imap_codice_l1b_lo-sw-priority_20240429_v001.cdf +0 -0
  222. imap_processing/tests/codice/data/imap_codice_l1b_lo-sw-species_20240429_v001.cdf +0 -0
  223. imap_processing/tests/codice/test_codice_l0.py +144 -0
  224. imap_processing/tests/codice/test_codice_l1a.py +187 -0
  225. imap_processing/tests/codice/test_codice_l1b.py +60 -0
  226. imap_processing/tests/codice/test_decompress.py +50 -0
  227. imap_processing/tests/conftest.py +372 -0
  228. imap_processing/tests/glows/direct_events_validation_data_l1a.csv +5704 -0
  229. imap_processing/tests/glows/glows_test_packet_20110921_v01.pkts +0 -0
  230. imap_processing/tests/glows/test_glows_decom.py +133 -0
  231. imap_processing/tests/glows/test_glows_l1a_cdf.py +85 -0
  232. imap_processing/tests/glows/test_glows_l1a_data.py +510 -0
  233. imap_processing/tests/glows/test_glows_l1b.py +348 -0
  234. imap_processing/tests/glows/test_glows_l1b_data.py +70 -0
  235. imap_processing/tests/hi/__init__.py +0 -0
  236. imap_processing/tests/hi/conftest.py +133 -0
  237. imap_processing/tests/hi/test_data/l0/20231030_H45_APP_NHK.bin +0 -0
  238. imap_processing/tests/hi/test_data/l0/20231030_H45_APP_NHK.csv +201 -0
  239. imap_processing/tests/hi/test_data/l0/20231030_H45_SCI_CNT.bin +0 -0
  240. imap_processing/tests/hi/test_data/l0/20231030_H45_SCI_DE.bin +0 -0
  241. imap_processing/tests/hi/test_data/l0/README.txt +54 -0
  242. imap_processing/tests/hi/test_decom.py +55 -0
  243. imap_processing/tests/hi/test_hi_l1b.py +31 -0
  244. imap_processing/tests/hi/test_hi_l1c.py +69 -0
  245. imap_processing/tests/hi/test_l1a.py +96 -0
  246. imap_processing/tests/hi/test_l1a_sci_de.py +72 -0
  247. imap_processing/tests/hi/test_utils.py +15 -0
  248. imap_processing/tests/hit/PREFLIGHT_raw_record_2023_256_15_59_04_apid1251.pkts +0 -0
  249. imap_processing/tests/hit/PREFLIGHT_raw_record_2023_256_15_59_04_apid1252.pkts +0 -0
  250. imap_processing/tests/hit/__init__.py +0 -0
  251. imap_processing/tests/hit/test_data/imap_hit_l0_hk_20100105_v001.pkts +0 -0
  252. imap_processing/tests/hit/test_data/sci_sample.ccsds +0 -0
  253. imap_processing/tests/hit/test_hit_decom.py +230 -0
  254. imap_processing/tests/hit/test_hit_l1a.py +224 -0
  255. imap_processing/tests/hit/test_hit_l1b.py +52 -0
  256. imap_processing/tests/hit/validation_data/hskp_sample_raw.csv +88 -0
  257. imap_processing/tests/ialirt/__init__.py +0 -0
  258. imap_processing/tests/ialirt/test_data/l0/IALiRT Raw Packet Telemetry.txt +33 -0
  259. imap_processing/tests/ialirt/test_data/l0/hit_ialirt_sample.ccsds +0 -0
  260. imap_processing/tests/ialirt/test_data/l0/hit_ialirt_sample.csv +1001 -0
  261. imap_processing/tests/ialirt/unit/__init__.py +0 -0
  262. imap_processing/tests/ialirt/unit/test_decom_ialirt.py +94 -0
  263. imap_processing/tests/ialirt/unit/test_process_hit.py +226 -0
  264. imap_processing/tests/idex/__init__.py +0 -0
  265. imap_processing/tests/idex/conftest.py +22 -0
  266. imap_processing/tests/idex/imap_idex_l0_raw_20230725_v001.pkts +0 -0
  267. imap_processing/tests/idex/impact_14_tof_high_data.txt +8189 -0
  268. imap_processing/tests/idex/test_idex_l0.py +45 -0
  269. imap_processing/tests/idex/test_idex_l1a.py +91 -0
  270. imap_processing/tests/lo/__init__.py +0 -0
  271. imap_processing/tests/lo/test_binary_string.py +21 -0
  272. imap_processing/tests/lo/test_bit_decompression.py +39 -0
  273. imap_processing/tests/lo/test_cdfs/imap_lo_l0_raw_20240627_v001.pkts +0 -0
  274. imap_processing/tests/lo/test_cdfs/imap_lo_l1a_de_20100101_v001.cdf +0 -0
  275. imap_processing/tests/lo/test_cdfs/imap_lo_l1a_spin_20100101_v001.cdf +0 -0
  276. imap_processing/tests/lo/test_cdfs/imap_lo_l1b_de_20100101_v001.cdf +0 -0
  277. imap_processing/tests/lo/test_lo_l1a.py +66 -0
  278. imap_processing/tests/lo/test_lo_l1b.py +74 -0
  279. imap_processing/tests/lo/test_lo_l1c.py +66 -0
  280. imap_processing/tests/lo/test_science_counts.py +41 -0
  281. imap_processing/tests/lo/test_science_direct_events.py +209 -0
  282. imap_processing/tests/lo/test_star_sensor.py +35 -0
  283. imap_processing/tests/mag/imap_mag_l1a_burst-magi_20231025_v001.cdf +0 -0
  284. imap_processing/tests/mag/mag_l0_test_data.pkts +0 -0
  285. imap_processing/tests/mag/mag_l0_test_output.csv +37 -0
  286. imap_processing/tests/mag/mag_l1_test_data.pkts +0 -0
  287. imap_processing/tests/mag/mag_l1a_test_output.csv +97 -0
  288. imap_processing/tests/mag/test_mag_decom.py +117 -0
  289. imap_processing/tests/mag/test_mag_l1a.py +856 -0
  290. imap_processing/tests/mag/test_mag_l1b.py +77 -0
  291. imap_processing/tests/mag/test_mag_l1c.py +40 -0
  292. imap_processing/tests/spice/__init__.py +0 -0
  293. imap_processing/tests/spice/test_data/imap_ena_sim_metakernel.template +4 -0
  294. imap_processing/tests/spice/test_data/imap_science_0001.tf +171 -0
  295. imap_processing/tests/spice/test_data/imap_sclk_0000.tsc +156 -0
  296. imap_processing/tests/spice/test_data/imap_sim_ck_2hr_2secsampling_with_nutation.bc +0 -0
  297. imap_processing/tests/spice/test_data/imap_simple_metakernel.template +3 -0
  298. imap_processing/tests/spice/test_data/imap_spk_demo.bsp +0 -0
  299. imap_processing/tests/spice/test_data/imap_wkcp.tf +1806 -0
  300. imap_processing/tests/spice/test_data/naif0012.tls +150 -0
  301. imap_processing/tests/spice/test_data/sim_1yr_imap_attitude.bc +0 -0
  302. imap_processing/tests/spice/test_data/sim_1yr_imap_pointing_frame.bc +0 -0
  303. imap_processing/tests/spice/test_geometry.py +214 -0
  304. imap_processing/tests/spice/test_kernels.py +272 -0
  305. imap_processing/tests/spice/test_time.py +35 -0
  306. imap_processing/tests/swapi/__init__.py +0 -0
  307. imap_processing/tests/swapi/conftest.py +16 -0
  308. imap_processing/tests/swapi/l0_data/__init__.py +0 -0
  309. imap_processing/tests/swapi/l0_data/imap_swapi_l0_raw_20231012_v001.pkts +0 -0
  310. imap_processing/tests/swapi/l0_validation_data/__init__.py +0 -0
  311. imap_processing/tests/swapi/l0_validation_data/idle_export_eu.SWP_AUT_20231012_125245.csv +124 -0
  312. imap_processing/tests/swapi/l0_validation_data/idle_export_eu.SWP_HK_20231012_125245.csv +98 -0
  313. imap_processing/tests/swapi/l0_validation_data/idle_export_eu.SWP_MG_20231012_125245.csv +9 -0
  314. imap_processing/tests/swapi/l0_validation_data/idle_export_eu.SWP_SCI_20231012_125245.csv +72 -0
  315. imap_processing/tests/swapi/l0_validation_data/idle_export_raw.SWP_AUT_20231012_125245.csv +124 -0
  316. imap_processing/tests/swapi/l0_validation_data/idle_export_raw.SWP_HK_20231012_125245.csv +98 -0
  317. imap_processing/tests/swapi/l0_validation_data/idle_export_raw.SWP_MG_20231012_125245.csv +9 -0
  318. imap_processing/tests/swapi/l0_validation_data/idle_export_raw.SWP_SCI_20231012_125245.csv +72 -0
  319. imap_processing/tests/swapi/test_swapi_decom.py +135 -0
  320. imap_processing/tests/swapi/test_swapi_l1.py +354 -0
  321. imap_processing/tests/swapi/test_swapi_l2.py +21 -0
  322. imap_processing/tests/swe/__init__.py +0 -0
  323. imap_processing/tests/swe/conftest.py +35 -0
  324. imap_processing/tests/swe/decompressed/20230927173238_4th_quarter_decompressed.csv +181 -0
  325. imap_processing/tests/swe/decompressed/20230927173253_1st_quarter_decompressed.csv +181 -0
  326. imap_processing/tests/swe/decompressed/20230927173308_2nd_quarter_decompressed.csv +181 -0
  327. imap_processing/tests/swe/decompressed/20230927173323_3rd_quarter_decompressed.csv +181 -0
  328. imap_processing/tests/swe/l0_data/2024051010_SWE_SCIENCE_packet.bin +0 -0
  329. imap_processing/tests/swe/l0_validation_data/idle_export_eu.SWE_SCIENCE_20240510_092742.csv +544 -0
  330. imap_processing/tests/swe/l0_validation_data/idle_export_raw.SWE_SCIENCE_20240510_092742.csv +363 -0
  331. imap_processing/tests/swe/test_swe_l1a.py +12 -0
  332. imap_processing/tests/swe/test_swe_l1a_science.py +129 -0
  333. imap_processing/tests/swe/test_swe_l1b.py +61 -0
  334. imap_processing/tests/swe/test_swe_l1b_science.py +65 -0
  335. imap_processing/tests/test_cli.py +229 -0
  336. imap_processing/tests/test_decom.py +66 -0
  337. imap_processing/tests/test_quality_flags.py +71 -0
  338. imap_processing/tests/test_utils.py +107 -0
  339. imap_processing/tests/ultra/__init__.py +0 -0
  340. imap_processing/tests/ultra/test_data/l0/FM45_40P_Phi28p5_BeamCal_LinearScan_phi28.50_theta-0.00_20240207T102740.CCSDS +0 -0
  341. imap_processing/tests/ultra/test_data/l0/FM45_7P_Phi0.0_BeamCal_LinearScan_phi0.04_theta-0.01_20230821T121304.CCSDS +0 -0
  342. imap_processing/tests/ultra/test_data/l0/FM45_TV_Cycle6_Hot_Ops_Front212_20240124T063837.CCSDS +0 -0
  343. imap_processing/tests/ultra/test_data/l0/Ultra45_EM_SwRI_Cal_Run7_ThetaScan_20220530T225054.CCSDS +0 -0
  344. imap_processing/tests/ultra/test_data/l0/ultra45_raw_sc_auxdata_Ultra45_EM_SwRI_Cal_Run7_ThetaScan_20220530T225054.csv +24 -0
  345. imap_processing/tests/ultra/test_data/l0/ultra45_raw_sc_enaphxtofhangimg_FM45_TV_Cycle6_Hot_Ops_Front212_20240124T063837.csv +105 -0
  346. imap_processing/tests/ultra/test_data/l0/ultra45_raw_sc_ultraimgrates_Ultra45_EM_SwRI_Cal_Run7_ThetaScan_20220530T225054.csv +24 -0
  347. imap_processing/tests/ultra/test_data/l0/ultra45_raw_sc_ultrarawimg_withFSWcalcs_FM45_40P_Phi28p5_BeamCal_LinearScan_phi2850_theta-000_20240207T102740.csv +3314 -0
  348. imap_processing/tests/ultra/test_data/l0/ultra45_raw_sc_ultrarawimgevent_FM45_7P_Phi00_BeamCal_LinearScan_phi004_theta-001_20230821T121304.csv +702 -0
  349. imap_processing/tests/ultra/unit/__init__.py +0 -0
  350. imap_processing/tests/ultra/unit/conftest.py +210 -0
  351. imap_processing/tests/ultra/unit/test_decom_apid_880.py +98 -0
  352. imap_processing/tests/ultra/unit/test_decom_apid_881.py +50 -0
  353. imap_processing/tests/ultra/unit/test_decom_apid_883.py +44 -0
  354. imap_processing/tests/ultra/unit/test_decom_apid_896.py +104 -0
  355. imap_processing/tests/ultra/unit/test_lookup_utils.py +68 -0
  356. imap_processing/tests/ultra/unit/test_ultra_l1a.py +338 -0
  357. imap_processing/tests/ultra/unit/test_ultra_l1b.py +122 -0
  358. imap_processing/tests/ultra/unit/test_ultra_l1b_annotated.py +57 -0
  359. imap_processing/tests/ultra/unit/test_ultra_l1b_extended.py +342 -0
  360. imap_processing/tests/ultra/unit/test_ultra_l1c.py +104 -0
  361. imap_processing/tests/ultra/unit/test_ultra_l1c_pset_bins.py +35 -0
  362. imap_processing/ultra/__init__.py +1 -0
  363. imap_processing/ultra/constants.py +60 -0
  364. imap_processing/ultra/l0/__init__.py +0 -0
  365. imap_processing/ultra/l0/decom_tools.py +281 -0
  366. imap_processing/ultra/l0/decom_ultra.py +278 -0
  367. imap_processing/ultra/l0/ultra_utils.py +326 -0
  368. imap_processing/ultra/l1a/__init__.py +0 -0
  369. imap_processing/ultra/l1a/ultra_l1a.py +319 -0
  370. imap_processing/ultra/l1b/badtimes.py +26 -0
  371. imap_processing/ultra/l1b/cullingmask.py +26 -0
  372. imap_processing/ultra/l1b/de.py +59 -0
  373. imap_processing/ultra/l1b/extendedspin.py +45 -0
  374. imap_processing/ultra/l1b/lookup_utils.py +165 -0
  375. imap_processing/ultra/l1b/ultra_l1b.py +65 -0
  376. imap_processing/ultra/l1b/ultra_l1b_annotated.py +54 -0
  377. imap_processing/ultra/l1b/ultra_l1b_extended.py +764 -0
  378. imap_processing/ultra/l1c/histogram.py +36 -0
  379. imap_processing/ultra/l1c/pset.py +36 -0
  380. imap_processing/ultra/l1c/ultra_l1c.py +52 -0
  381. imap_processing/ultra/l1c/ultra_l1c_pset_bins.py +54 -0
  382. imap_processing/ultra/lookup_tables/EgyNorm.mem.csv +32769 -0
  383. imap_processing/ultra/lookup_tables/FM45_Startup1_ULTRA_IMGPARAMS_20240719.csv +2 -0
  384. imap_processing/ultra/lookup_tables/ultra45_back-pos-luts.csv +4097 -0
  385. imap_processing/ultra/lookup_tables/ultra45_tdc_norm.csv +2050 -0
  386. imap_processing/ultra/lookup_tables/ultra90_back-pos-luts.csv +4097 -0
  387. imap_processing/ultra/lookup_tables/ultra90_tdc_norm.csv +2050 -0
  388. imap_processing/ultra/lookup_tables/yadjust.csv +257 -0
  389. imap_processing/ultra/packet_definitions/ULTRA_SCI_COMBINED.xml +547 -0
  390. imap_processing/ultra/packet_definitions/__init__.py +0 -0
  391. imap_processing/ultra/utils/__init__.py +0 -0
  392. imap_processing/ultra/utils/ultra_l1_utils.py +50 -0
  393. imap_processing/utils.py +413 -0
  394. imap_processing-0.6.0.dist-info/LICENSE +21 -0
  395. imap_processing-0.6.0.dist-info/METADATA +107 -0
  396. imap_processing-0.6.0.dist-info/RECORD +398 -0
  397. imap_processing-0.6.0.dist-info/WHEEL +4 -0
  398. imap_processing-0.6.0.dist-info/entry_points.txt +4 -0
File without changes
@@ -0,0 +1,125 @@
1
+ """MAG L1B Processing."""
2
+
3
+ from pathlib import Path
4
+
5
+ import numpy as np
6
+ import xarray as xr
7
+
8
+ from imap_processing.cdf.imap_cdf_manager import ImapCdfAttributes
9
+ from imap_processing.cdf.utils import load_cdf
10
+
11
+
12
+ def mag_l1b(input_dataset: xr.Dataset, version: str) -> xr.Dataset:
13
+ """
14
+ Will process MAG L1B data from L1A data.
15
+
16
+ Parameters
17
+ ----------
18
+ input_dataset : xr.Dataset
19
+ The input dataset to process.
20
+ version : str
21
+ The version of the output data.
22
+
23
+ Returns
24
+ -------
25
+ output_dataset : xr.Dataset
26
+ The processed dataset.
27
+ """
28
+ # TODO:
29
+ # Read in calibration file
30
+ # multiply all vectors by calibration file
31
+
32
+ output_dataset = mag_l1b_processing(input_dataset)
33
+ attribute_manager = ImapCdfAttributes()
34
+ attribute_manager.add_instrument_global_attrs("mag")
35
+ attribute_manager.add_global_attribute("Data_version", version)
36
+
37
+ # Variable attributes can remain the same as L1A
38
+ input_logical_source = input_dataset.attrs["Logical_source"]
39
+ if isinstance(input_dataset.attrs["Logical_source"], list):
40
+ input_logical_source = input_dataset.attrs["Logical_source"][0]
41
+
42
+ logical_source = input_logical_source.replace("l1a", "l1b")
43
+ output_dataset.attrs = attribute_manager.get_global_attributes(logical_source)
44
+
45
+ return output_dataset
46
+
47
+
48
+ def mag_l1b_processing(input_dataset: xr.Dataset) -> xr.Dataset:
49
+ """
50
+ Will process MAG L1B data from L1A data.
51
+
52
+ MAG L1B is almost identical to L1A, with only the vectors and attributes getting
53
+ updated. All non-vector variables are the same.
54
+
55
+ Parameters
56
+ ----------
57
+ input_dataset : xr.Dataset
58
+ The input dataset to process.
59
+
60
+ Returns
61
+ -------
62
+ output_dataset : xr.Dataset
63
+ L1b dataset.
64
+ """
65
+ # TODO: There is a time alignment step that will add a lot of complexity.
66
+ # This needs to be done once we have some SPICE time data.
67
+
68
+ dims = [["direction"]]
69
+ new_dims = [["direction"]]
70
+ # TODO: This should definitely be loaded from AWS
71
+ calibration_dataset = load_cdf(
72
+ Path(__file__).parent / "imap_calibration_mag_20240229_v01.cdf"
73
+ )
74
+ # TODO: Check validity of time range for calibration
75
+ if "mago" in input_dataset.attrs["Logical_source"][0]:
76
+ calibration_matrix = calibration_dataset["MFOTOURFO"]
77
+ else:
78
+ calibration_matrix = calibration_dataset["MFITOURFI"]
79
+
80
+ l1b_fields = xr.apply_ufunc(
81
+ calibrate,
82
+ input_dataset["vectors"],
83
+ input_core_dims=dims,
84
+ output_core_dims=new_dims,
85
+ vectorize=True,
86
+ keep_attrs=True,
87
+ kwargs={"calibration_matrix": calibration_matrix},
88
+ )
89
+
90
+ output_dataset = input_dataset.copy()
91
+ output_dataset["vectors"] = l1b_fields
92
+
93
+ # TODO add/update attributes
94
+ return output_dataset
95
+
96
+
97
+ def calibrate(
98
+ input_vector: np.ndarray, calibration_matrix: xr.DataArray = None
99
+ ) -> np.ndarray:
100
+ """
101
+ Apply calibration matrix to input vector.
102
+
103
+ The calibration matrix contains 3x3 matrices for each range. To calibrate the input
104
+ vector, we take the range (which is the fourth value of the vector) to determine
105
+ the correct calibration matrix. We then multiply the input vector by that matrix.
106
+
107
+ Parameters
108
+ ----------
109
+ input_vector : numpy.ndarray
110
+ The input vector to calibrate [x, y, z, range].
111
+ calibration_matrix : xr.DataArray
112
+ The full set of calibration matrices, for each range. Size is ((3, 3, 4)).
113
+
114
+ Returns
115
+ -------
116
+ updated_vector : numpy.ndarray
117
+ Calibrated vector.
118
+ """
119
+ updated_vector = input_vector.copy()
120
+
121
+ updated_vector[:3] = np.matmul(
122
+ input_vector[:3], calibration_matrix.values[:, :, int(input_vector[3])]
123
+ )
124
+
125
+ return updated_vector
@@ -0,0 +1,57 @@
1
+ """MAG L1C processing module."""
2
+
3
+ import xarray as xr
4
+
5
+ from imap_processing.cdf.imap_cdf_manager import ImapCdfAttributes
6
+
7
+
8
+ def mag_l1c(
9
+ first_input_dataset: xr.Dataset, second_input_dataset: xr.Dataset, version: str
10
+ ) -> xr.Dataset:
11
+ """
12
+ Will process MAG L1C data from L1A data.
13
+
14
+ This requires both the norm and burst data to be passed in.
15
+
16
+ Parameters
17
+ ----------
18
+ first_input_dataset : xr.Dataset
19
+ The first input dataset to process. This can be either burst or norm data, for
20
+ mago or magi.
21
+ second_input_dataset : xr.Dataset
22
+ The second input dataset to process. This should be burst if first_input_dataset
23
+ was norm, or norm if first_input_dataset was burst. It should match the
24
+ instrument - both inputs should be mago or magi.
25
+ version : str
26
+ The version of the output data.
27
+
28
+ Returns
29
+ -------
30
+ output_dataset : xr.Dataset
31
+ L1C data set.
32
+ """
33
+ # TODO: L1C processing involves filling gaps with burst data.
34
+ input_logical_source_1 = first_input_dataset.attrs["Logical_source"]
35
+ if isinstance(first_input_dataset.attrs["Logical_source"], list):
36
+ input_logical_source_1 = first_input_dataset.attrs["Logical_source"][0]
37
+
38
+ input_logical_source_2 = second_input_dataset.attrs["Logical_source"]
39
+ if isinstance(second_input_dataset.attrs["Logical_source"], list):
40
+ input_logical_source_2 = second_input_dataset.attrs["Logical_source"][0]
41
+
42
+ if "norm" in input_logical_source_1:
43
+ output_dataset = first_input_dataset.copy()
44
+ logical_source = input_logical_source_1.replace("l1b", "l1c")
45
+ elif "norm" in input_logical_source_2:
46
+ output_dataset = second_input_dataset.copy()
47
+ logical_source = input_logical_source_2.replace("l1b", "l1c")
48
+ else:
49
+ raise RuntimeError("Neither input dataset is norm data")
50
+
51
+ attribute_manager = ImapCdfAttributes()
52
+ attribute_manager.add_instrument_global_attrs("mag")
53
+ attribute_manager.add_global_attribute("Data_version", version)
54
+
55
+ output_dataset.attrs = attribute_manager.get_global_attributes(logical_source)
56
+
57
+ return output_dataset
@@ -0,0 +1,235 @@
1
+ <?xml version='1.0' encoding='utf-8'?>
2
+ <xtce:SpaceSystem xmlns:xtce="http://www.omg.org/space/xtce" name="P_MAG_SCI_NORM">
3
+ <xtce:Header date="2023-11" version="1.0" author="IMAP SDC" />
4
+ <xtce:TelemetryMetaData>
5
+ <xtce:ParameterTypeSet>
6
+ <xtce:IntegerParameterType name="UINT1" signed="false">
7
+ <xtce:IntegerDataEncoding sizeInBits="1" encoding="unsigned" />
8
+ </xtce:IntegerParameterType>
9
+ <xtce:IntegerParameterType name="UINT2" signed="false">
10
+ <xtce:IntegerDataEncoding sizeInBits="2" encoding="unsigned" />
11
+ </xtce:IntegerParameterType>
12
+ <xtce:IntegerParameterType name="UINT3" signed="false">
13
+ <xtce:IntegerDataEncoding sizeInBits="3" encoding="unsigned" />
14
+ </xtce:IntegerParameterType>
15
+ <xtce:IntegerParameterType name="UINT4" signed="false">
16
+ <xtce:IntegerDataEncoding sizeInBits="4" encoding="unsigned" />
17
+ </xtce:IntegerParameterType>
18
+ <xtce:IntegerParameterType name="UINT8" signed="false">
19
+ <xtce:IntegerDataEncoding sizeInBits="8" encoding="unsigned" />
20
+ </xtce:IntegerParameterType>
21
+ <xtce:IntegerParameterType name="UINT11" signed="false">
22
+ <xtce:IntegerDataEncoding sizeInBits="11" encoding="unsigned" />
23
+ </xtce:IntegerParameterType>
24
+ <xtce:IntegerParameterType name="UINT14" signed="false">
25
+ <xtce:IntegerDataEncoding sizeInBits="14" encoding="unsigned" />
26
+ </xtce:IntegerParameterType>
27
+ <xtce:IntegerParameterType name="UINT16" signed="false">
28
+ <xtce:IntegerDataEncoding sizeInBits="16" encoding="unsigned" />
29
+ </xtce:IntegerParameterType>
30
+ <xtce:IntegerParameterType name="UINT32" signed="false">
31
+ <xtce:IntegerDataEncoding sizeInBits="32" encoding="unsigned" />
32
+ </xtce:IntegerParameterType>
33
+ <xtce:BinaryParameterType name="VAR_BYTE">
34
+ <xtce:UnitSet />
35
+ <xtce:BinaryDataEncoding bitOrder="mostSignificantBitFirst">
36
+ <xtce:SizeInBits>
37
+ <xtce:DynamicValue>
38
+ <xtce:ParameterInstanceRef parameterRef="PKT_LEN"/>
39
+ <xtce:LinearAdjustment intercept="-160" slope="8"/>
40
+ </xtce:DynamicValue>
41
+ </xtce:SizeInBits>
42
+ </xtce:BinaryDataEncoding>
43
+ </xtce:BinaryParameterType>
44
+ </xtce:ParameterTypeSet>
45
+ <xtce:ParameterSet>
46
+ <!-- MAG includes some ESA Header values as well as the standard NASA headers-->
47
+ <xtce:Parameter name="VERSION" parameterTypeRef="UINT3">
48
+ <xtce:LongDescription>CCSDS Packet Version Number (always 0)</xtce:LongDescription>
49
+ </xtce:Parameter>
50
+ <xtce:Parameter name="TYPE" parameterTypeRef="UINT1">
51
+ <xtce:LongDescription>CCSDS Packet Type Indicator (0=telemetry)</xtce:LongDescription>
52
+ </xtce:Parameter>
53
+ <xtce:Parameter name="SEC_HDR_FLG" parameterTypeRef="UINT1">
54
+ <xtce:LongDescription>CCSDS Packet Secondary Header Flag (always 1)</xtce:LongDescription>
55
+ </xtce:Parameter>
56
+ <xtce:Parameter name="PKT_APID" parameterTypeRef="UINT11">
57
+ <xtce:LongDescription>CCSDS Packet Application Process ID</xtce:LongDescription>
58
+ </xtce:Parameter>
59
+ <xtce:Parameter name="SEQ_FLGS" parameterTypeRef="UINT2">
60
+ <xtce:LongDescription>CCSDS Packet Grouping Flags (3=not part of group)</xtce:LongDescription>
61
+ </xtce:Parameter>
62
+ <xtce:Parameter name="SRC_SEQ_CTR" parameterTypeRef="UINT14">
63
+ <xtce:LongDescription>CCSDS Packet Sequence Count (increments with each new packet)</xtce:LongDescription>
64
+ </xtce:Parameter>
65
+ <xtce:Parameter name="PKT_LEN" parameterTypeRef="UINT16">
66
+ <xtce:LongDescription>CCSDS Packet Length (number of bytes after Packet length minus 1)</xtce:LongDescription>
67
+ </xtce:Parameter>
68
+ <xtce:Parameter name="PHVERNO" parameterTypeRef="UINT3">
69
+ <xtce:ShortDescription>ESA CCSDS Packet Version Number</xtce:ShortDescription>
70
+ </xtce:Parameter>
71
+ <xtce:Parameter name="PHTYPE" parameterTypeRef="UINT1">
72
+ <xtce:ShortDescription>ESA CCSDS Packet Type Indicator</xtce:ShortDescription>
73
+ </xtce:Parameter>
74
+ <xtce:Parameter name="PHSHF" parameterTypeRef="UINT1">
75
+ <xtce:ShortDescription>ESA CCSDS Packet Secondary Header Flag</xtce:ShortDescription>
76
+ </xtce:Parameter>
77
+ <xtce:Parameter name="PHAPID" parameterTypeRef="UINT11">
78
+ <xtce:ShortDescription>ESA CCSDS Packet Application Process ID</xtce:ShortDescription>
79
+ </xtce:Parameter>
80
+ <xtce:Parameter name="PHGROUPF" parameterTypeRef="UINT2">
81
+ <xtce:ShortDescription>ESA CCSDS Packet Grouping Flags</xtce:ShortDescription>
82
+ </xtce:Parameter>
83
+ <xtce:Parameter name="PHSEQCNT" parameterTypeRef="UINT14">
84
+ <xtce:ShortDescription>ESA CCSDS Packet Sequence Count</xtce:ShortDescription>
85
+ </xtce:Parameter>
86
+ <xtce:Parameter name="PHDLEN" parameterTypeRef="UINT16">
87
+ <xtce:ShortDescription>ESA CCSDS Packet Length</xtce:ShortDescription>
88
+ </xtce:Parameter>
89
+ <xtce:Parameter name="SHCOARSE" parameterTypeRef="UINT32">
90
+ <xtce:ShortDescription>Mission elapsed time</xtce:ShortDescription>
91
+ <xtce:LongDescription>CCSDS Packet 2nd Header Coarse Time</xtce:LongDescription>
92
+ </xtce:Parameter>
93
+ <xtce:Parameter name="PUS_SPARE1" parameterTypeRef="UINT1">
94
+ <xtce:ShortDescription>PUS Spare 1</xtce:ShortDescription>
95
+ <xtce:LongDescription>PUS Spare 1</xtce:LongDescription>
96
+ </xtce:Parameter>
97
+ <xtce:Parameter name="PUS_VERSION" parameterTypeRef="UINT3">
98
+ <xtce:ShortDescription>PUS Version Number</xtce:ShortDescription>
99
+ <xtce:LongDescription>PUS Version Number</xtce:LongDescription>
100
+ </xtce:Parameter>
101
+ <xtce:Parameter name="PUS_SPARE2" parameterTypeRef="UINT4">
102
+ <xtce:ShortDescription>PUS Spare 2</xtce:ShortDescription>
103
+ <xtce:LongDescription>PUS Spare 2</xtce:LongDescription>
104
+ </xtce:Parameter>
105
+ <xtce:Parameter name="PUS_STYPE" parameterTypeRef="UINT8">
106
+ <xtce:ShortDescription>PUS Service Type</xtce:ShortDescription>
107
+ <xtce:LongDescription>PUS Service Type</xtce:LongDescription>
108
+ </xtce:Parameter>
109
+ <xtce:Parameter name="PUS_SSUBTYPE" parameterTypeRef="UINT8">
110
+ <xtce:ShortDescription>PUS Service Subtype</xtce:ShortDescription>
111
+ <xtce:LongDescription>PUS Service Subtype</xtce:LongDescription>
112
+ </xtce:Parameter>
113
+ <xtce:Parameter name="COMPRESSION" parameterTypeRef="UINT1">
114
+ <xtce:ShortDescription>Science Data Compression Flag</xtce:ShortDescription>
115
+ <xtce:LongDescription>Science Data Compression Flag</xtce:LongDescription>
116
+ </xtce:Parameter>
117
+ <xtce:Parameter name="MAGO_ACT" parameterTypeRef="UINT1">
118
+ <xtce:ShortDescription>MAGO Active Status</xtce:ShortDescription>
119
+ <xtce:LongDescription>MAGO Active Status</xtce:LongDescription>
120
+ </xtce:Parameter>
121
+ <xtce:Parameter name="MAGI_ACT" parameterTypeRef="UINT1">
122
+ <xtce:ShortDescription>MAGI Active Status</xtce:ShortDescription>
123
+ <xtce:LongDescription>MAGI Active Status</xtce:LongDescription>
124
+ </xtce:Parameter>
125
+ <xtce:Parameter name="PRI_SENS" parameterTypeRef="UINT1">
126
+ <xtce:ShortDescription>Primary Sensor</xtce:ShortDescription>
127
+ <xtce:LongDescription>Primary Sensor</xtce:LongDescription>
128
+ </xtce:Parameter>
129
+ <xtce:Parameter name="SPARE1" parameterTypeRef="UINT4">
130
+ <xtce:ShortDescription>Spare</xtce:ShortDescription>
131
+ <xtce:LongDescription>Spare</xtce:LongDescription>
132
+ </xtce:Parameter>
133
+ <xtce:Parameter name="PRI_VECSEC" parameterTypeRef="UINT3">
134
+ <xtce:ShortDescription>Primary Vectors per Second</xtce:ShortDescription>
135
+ <xtce:LongDescription>Primary Vectors per Second</xtce:LongDescription>
136
+ </xtce:Parameter>
137
+ <xtce:Parameter name="SEC_VECSEC" parameterTypeRef="UINT3">
138
+ <xtce:ShortDescription>Secondary Vectors per second</xtce:ShortDescription>
139
+ <xtce:LongDescription>Secondary Vectors per second</xtce:LongDescription>
140
+ </xtce:Parameter>
141
+ <xtce:Parameter name="SPARE2" parameterTypeRef="UINT2">
142
+ <xtce:ShortDescription>Spare</xtce:ShortDescription>
143
+ <xtce:LongDescription>Spare</xtce:LongDescription>
144
+ </xtce:Parameter>
145
+ <xtce:Parameter name="PRI_COARSETM" parameterTypeRef="UINT32">
146
+ <xtce:ShortDescription>Primary Coarse Time</xtce:ShortDescription>
147
+ <xtce:LongDescription>Primary Coarse Time</xtce:LongDescription>
148
+ </xtce:Parameter>
149
+ <xtce:Parameter name="PRI_FNTM" parameterTypeRef="UINT16">
150
+ <xtce:ShortDescription>Primary Fine Time</xtce:ShortDescription>
151
+ <xtce:LongDescription>Primary Fine Time</xtce:LongDescription>
152
+ </xtce:Parameter>
153
+ <xtce:Parameter name="SEC_COARSETM" parameterTypeRef="UINT32">
154
+ <xtce:ShortDescription>Secondary Coarse Time</xtce:ShortDescription>
155
+ <xtce:LongDescription>Secondary Coarse Time</xtce:LongDescription>
156
+ </xtce:Parameter>
157
+ <xtce:Parameter name="SEC_FNTM" parameterTypeRef="UINT16">
158
+ <xtce:ShortDescription>Secondary Fine Time</xtce:ShortDescription>
159
+ <xtce:LongDescription>Secondary Fine Time</xtce:LongDescription>
160
+ </xtce:Parameter>
161
+ <xtce:Parameter name="VECTORS" parameterTypeRef="VAR_BYTE">
162
+ <xtce:ShortDescription>MAG Science Vectors</xtce:ShortDescription>
163
+ </xtce:Parameter>
164
+ </xtce:ParameterSet>
165
+ <xtce:ContainerSet>
166
+ <xtce:SequenceContainer name="CCSDSPacket">
167
+ <xtce:EntryList>
168
+ <xtce:ParameterRefEntry parameterRef="VERSION" />
169
+ <xtce:ParameterRefEntry parameterRef="TYPE" />
170
+ <xtce:ParameterRefEntry parameterRef="SEC_HDR_FLG" />
171
+ <xtce:ParameterRefEntry parameterRef="PKT_APID" />
172
+ <xtce:ParameterRefEntry parameterRef="SEQ_FLGS" />
173
+ <xtce:ParameterRefEntry parameterRef="SRC_SEQ_CTR" />
174
+ <xtce:ParameterRefEntry parameterRef="PKT_LEN" />
175
+ </xtce:EntryList>
176
+ </xtce:SequenceContainer>
177
+ <xtce:SequenceContainer name="P_MAG_SCI_NORM">
178
+ <xtce:BaseContainer containerRef="CCSDSPacket">
179
+ <xtce:RestrictionCriteria>
180
+ <xtce:Comparison parameterRef="PKT_APID" value="1052" useCalibratedValue="false" />
181
+ </xtce:RestrictionCriteria>
182
+ </xtce:BaseContainer>
183
+ <xtce:EntryList>
184
+ <xtce:ParameterRefEntry parameterRef="SHCOARSE" />
185
+ <xtce:ParameterRefEntry parameterRef="PUS_SPARE1" />
186
+ <xtce:ParameterRefEntry parameterRef="PUS_VERSION" />
187
+ <xtce:ParameterRefEntry parameterRef="PUS_SPARE2" />
188
+ <xtce:ParameterRefEntry parameterRef="PUS_STYPE" />
189
+ <xtce:ParameterRefEntry parameterRef="PUS_SSUBTYPE" />
190
+ <xtce:ParameterRefEntry parameterRef="COMPRESSION" />
191
+ <xtce:ParameterRefEntry parameterRef="MAGO_ACT" />
192
+ <xtce:ParameterRefEntry parameterRef="MAGI_ACT" />
193
+ <xtce:ParameterRefEntry parameterRef="PRI_SENS" />
194
+ <xtce:ParameterRefEntry parameterRef="SPARE1" />
195
+ <xtce:ParameterRefEntry parameterRef="PRI_VECSEC" />
196
+ <xtce:ParameterRefEntry parameterRef="SEC_VECSEC" />
197
+ <xtce:ParameterRefEntry parameterRef="SPARE2" />
198
+ <xtce:ParameterRefEntry parameterRef="PRI_COARSETM" />
199
+ <xtce:ParameterRefEntry parameterRef="PRI_FNTM" />
200
+ <xtce:ParameterRefEntry parameterRef="SEC_COARSETM" />
201
+ <xtce:ParameterRefEntry parameterRef="SEC_FNTM" />
202
+ <xtce:ParameterRefEntry parameterRef="VECTORS" />
203
+ </xtce:EntryList>
204
+ </xtce:SequenceContainer>
205
+ <xtce:SequenceContainer name="P_MAG_SCI_BURST">
206
+ <xtce:BaseContainer containerRef="CCSDSPacket">
207
+ <xtce:RestrictionCriteria>
208
+ <xtce:Comparison parameterRef="PKT_APID" value="1068" useCalibratedValue="false" />
209
+ </xtce:RestrictionCriteria>
210
+ </xtce:BaseContainer>
211
+ <xtce:EntryList>
212
+ <xtce:ParameterRefEntry parameterRef="SHCOARSE" />
213
+ <xtce:ParameterRefEntry parameterRef="PUS_SPARE1" />
214
+ <xtce:ParameterRefEntry parameterRef="PUS_VERSION" />
215
+ <xtce:ParameterRefEntry parameterRef="PUS_SPARE2" />
216
+ <xtce:ParameterRefEntry parameterRef="PUS_STYPE" />
217
+ <xtce:ParameterRefEntry parameterRef="PUS_SSUBTYPE" />
218
+ <xtce:ParameterRefEntry parameterRef="COMPRESSION" />
219
+ <xtce:ParameterRefEntry parameterRef="MAGO_ACT" />
220
+ <xtce:ParameterRefEntry parameterRef="MAGI_ACT" />
221
+ <xtce:ParameterRefEntry parameterRef="PRI_SENS" />
222
+ <xtce:ParameterRefEntry parameterRef="SPARE1" />
223
+ <xtce:ParameterRefEntry parameterRef="PRI_VECSEC" />
224
+ <xtce:ParameterRefEntry parameterRef="SEC_VECSEC" />
225
+ <xtce:ParameterRefEntry parameterRef="SPARE2" />
226
+ <xtce:ParameterRefEntry parameterRef="PRI_COARSETM" />
227
+ <xtce:ParameterRefEntry parameterRef="PRI_FNTM" />
228
+ <xtce:ParameterRefEntry parameterRef="SEC_COARSETM" />
229
+ <xtce:ParameterRefEntry parameterRef="SEC_FNTM" />
230
+ <xtce:ParameterRefEntry parameterRef="VECTORS" />
231
+ </xtce:EntryList>
232
+ </xtce:SequenceContainer>
233
+ </xtce:ContainerSet>
234
+ </xtce:TelemetryMetaData>
235
+ </xtce:SpaceSystem>
@@ -0,0 +1,91 @@
1
+ """Bitwise flagging."""
2
+
3
+ from enum import IntFlag
4
+
5
+
6
+ class FlagNameMixin(IntFlag):
7
+ """Modifies flags for Python versions < 3.11."""
8
+
9
+ @property
10
+ def name(self) -> str:
11
+ """
12
+ Override the default name property to handle combined flags.
13
+
14
+ Returns
15
+ -------
16
+ combined_name : str
17
+ The combined name of the individual flags.
18
+ """
19
+ if self._name_ is not None:
20
+ return self._name_
21
+
22
+ members = [member for member in self.__class__ if member & self == member]
23
+ return "|".join(str(m).split(".", 1)[-1] for m in members if m != 0x0)
24
+
25
+
26
+ class CommonFlags(FlagNameMixin):
27
+ """Common quality flags."""
28
+
29
+ NONE = 0x0
30
+ INF = 2**0 # bit 0, Infinite value
31
+ NEG = 2**1 # bit 1, Negative value
32
+
33
+
34
+ class ENAFlags(FlagNameMixin):
35
+ """Common ENA flags."""
36
+
37
+ BADSPIN = 2**2 # bit 2, Bad spin
38
+
39
+
40
+ class ImapUltraFlags(FlagNameMixin):
41
+ """IMAP Ultra flags."""
42
+
43
+ NONE = CommonFlags.NONE
44
+ INF = CommonFlags.INF # bit 0
45
+ NEG = CommonFlags.NEG # bit 1
46
+ BADSPIN = ENAFlags.BADSPIN # bit 2
47
+ FLAG1 = 2**3 # bit 2
48
+
49
+
50
+ class ImapLoFlags(FlagNameMixin):
51
+ """IMAP Lo flags."""
52
+
53
+ NONE = CommonFlags.NONE
54
+ INF = CommonFlags.INF # bit 0
55
+ NEG = CommonFlags.NEG # bit 1
56
+ BADSPIN = ENAFlags.BADSPIN # bit 2
57
+ FLAG2 = 2**3 # bit 2
58
+
59
+
60
+ class HitFlags(
61
+ FlagNameMixin,
62
+ ):
63
+ """Hit flags."""
64
+
65
+ NONE = CommonFlags.NONE
66
+ INF = CommonFlags.INF # bit 0
67
+ NEG = CommonFlags.NEG # bit 1
68
+ FLAG3 = 2**2 # bit 2
69
+
70
+
71
+ class SWAPIFlags(
72
+ FlagNameMixin,
73
+ ):
74
+ """SWAPI flags."""
75
+
76
+ NONE = CommonFlags.NONE
77
+ INF = CommonFlags.INF # bit 0
78
+ NEG = CommonFlags.NEG # bit 1
79
+ SWP_PCEM_COMP = 2**2 # bit 2
80
+ SWP_SCEM_COMP = 2**3 # bit 3
81
+ SWP_COIN_COMP = 2**4 # bit 4
82
+ OVR_T_ST = 2**5 # bit 5
83
+ UND_T_ST = 2**6 # bit 6
84
+ PCEM_CNT_ST = 2**7 # bit 7
85
+ SCEM_CNT_ST = 2**8 # bit 8
86
+ PCEM_V_ST = 2**9 # bit 9
87
+ PCEM_I_ST = 2**10 # bit 10
88
+ PCEM_INT_ST = 2**11 # bit 11
89
+ SCEM_V_ST = 2**12 # bit 12
90
+ SCEM_I_ST = 2**13 # bit 13
91
+ SCEM_INT_ST = 2**14 # bit 14
@@ -0,0 +1 @@
1
+ IMAP_SC_ID = -43