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
@@ -0,0 +1,353 @@
1
+ from pathlib import Path
2
+
3
+ import pytest
4
+
5
+ from imap_processing.cdf.cdf_attribute_manager import CdfAttributeManager
6
+
7
+
8
+ def test_default_attr_schema():
9
+ """
10
+ Test function that covers:
11
+ _load_default_global_attr_schema
12
+ _load_default_variable_attr_schema
13
+ """
14
+
15
+ # Initialize CdfAttributeManager object which loads in default schema
16
+ cdf_manager = CdfAttributeManager(Path(__file__).parent.parent / "cdf")
17
+
18
+ # Default global tests
19
+ assert cdf_manager.global_attribute_schema["DOI"]["required"] is False
20
+ assert cdf_manager.global_attribute_schema["Data_level"]["required"] is True
21
+
22
+ # Default variable tests
23
+ assert (
24
+ cdf_manager.variable_attribute_schema["attribute_key"]["ABSOLUTE_ERROR"][
25
+ "required"
26
+ ]
27
+ is False
28
+ )
29
+ assert (
30
+ cdf_manager.variable_attribute_schema["attribute_key"]["RESOLUTION"]["required"]
31
+ is True
32
+ )
33
+
34
+
35
+ def test_load_global_attribute():
36
+ """
37
+ Test function that covers:
38
+ load_global_attributes
39
+ """
40
+
41
+ # Initialize CdfAttributeManager object which loads in default info
42
+ cdf_manager = CdfAttributeManager(Path(__file__).parent.parent / "cdf")
43
+ cdf_manager.load_global_attributes("imap_default_global_cdf_attrs.yaml")
44
+
45
+ # Testing information has been loaded in
46
+ assert cdf_manager._global_attributes["Project"] == "STP>Solar-Terrestrial Physics"
47
+ assert (
48
+ cdf_manager._global_attributes["Source_name"]
49
+ == "IMAP>Interstellar Mapping and Acceleration Probe"
50
+ )
51
+ assert (
52
+ cdf_manager._global_attributes["Discipline"]
53
+ == "Solar Physics>Heliospheric Physics"
54
+ )
55
+ assert (
56
+ cdf_manager._global_attributes["Mission_group"]
57
+ == "IMAP>Interstellar Mapping and Acceleration Probe"
58
+ )
59
+ assert cdf_manager._global_attributes["PI_name"] == "Dr. David J. McComas"
60
+ assert (
61
+ cdf_manager._global_attributes["PI_affiliation"]
62
+ == "Princeton Plasma Physics Laboratory, 100 Stellarator Road, "
63
+ "Princeton, NJ 08540"
64
+ )
65
+ assert (
66
+ cdf_manager._global_attributes["File_naming_convention"]
67
+ == "source_descriptor_datatype_yyyyMMdd_vNNN"
68
+ )
69
+ # The following test should fail because "DOI" is not an attribute in
70
+ # imap_default_global_cdf_attrs.yaml
71
+ with pytest.raises(KeyError):
72
+ assert cdf_manager._global_attributes["DOI"] == "test"
73
+
74
+ # Load in different data
75
+ cdf_manager.source_dir = Path(__file__).parent.parent / "cdf" / "test_data"
76
+ cdf_manager.load_global_attributes("imap_default_global_test_cdf_attrs.yaml")
77
+
78
+ # Testing attributes carried over
79
+ assert (
80
+ cdf_manager._global_attributes["File_naming_convention"]
81
+ == "source_descriptor_datatype_yyyyMMdd_vNNN"
82
+ )
83
+ assert (
84
+ cdf_manager._global_attributes["Discipline"]
85
+ == "Solar Physics>Heliospheric Physics"
86
+ )
87
+
88
+ # Testing attributes newly loaded
89
+ assert cdf_manager._global_attributes["Project"] == "STP>Solar-Terrestrial Physics"
90
+ assert (
91
+ cdf_manager._global_attributes["Source_name"]
92
+ == "IMAP>Interstellar Mapping and Acceleration Probe"
93
+ )
94
+ assert cdf_manager._global_attributes["Mission_group"] == "Dysfunctional Cats"
95
+ assert cdf_manager._global_attributes["PI_name"] == "Ana Manica"
96
+ assert cdf_manager._global_attributes["PI_affiliation"] == "LASP, CU"
97
+ assert cdf_manager._global_attributes["Data_version"] == 2
98
+ assert cdf_manager._global_attributes["DOI"] == "test"
99
+
100
+ # Testing that everything loaded into the global attrs is present in
101
+ # the global attrs schema
102
+ for attr in cdf_manager._global_attributes.keys():
103
+ assert attr in cdf_manager.global_attribute_schema.keys()
104
+
105
+
106
+ def test_get_global_attributes():
107
+ """
108
+ Test function that covers:
109
+ get_global_attributes
110
+ """
111
+
112
+ # Initialize CdfAttributeManager object which loads in default info
113
+ cdf_manager = CdfAttributeManager(Path(__file__).parent.parent / "cdf")
114
+
115
+ # Change filepath to load test global attributes
116
+ cdf_manager.source_dir = Path(__file__).parent.parent / "cdf" / "test_data"
117
+ cdf_manager.load_global_attributes("imap_default_global_test_cdf_attrs.yaml")
118
+ cdf_manager.load_global_attributes("imap_test_global.yaml")
119
+
120
+ # Loading in instrument specific attributes
121
+ test_get_global_attrs = cdf_manager.get_global_attributes("imap_test_T1_test")
122
+
123
+ # Testing information previously loaded into global attributes (first if statement)
124
+ assert test_get_global_attrs["Project"] == "STP>Solar-Terrestrial Physics"
125
+ assert (
126
+ test_get_global_attrs["Source_name"]
127
+ == "IMAP>Interstellar Mapping and Acceleration Probe"
128
+ )
129
+ assert test_get_global_attrs["Mission_group"] == "Dysfunctional Cats"
130
+ # Testing instrument specific global attributes (first elif statement)
131
+ assert test_get_global_attrs["Descriptor"] == "TEST>Testinstrument"
132
+ assert test_get_global_attrs["Data_type"] == "T1_test-one>Test-1 test one"
133
+ assert test_get_global_attrs["Logical_source"] == "imap_test_T1_test"
134
+ assert (
135
+ test_get_global_attrs["Logical_source_description"]
136
+ == "IMAP Mission TEST one document Level-T1."
137
+ )
138
+ # Not given, and not required information
139
+ assert test_get_global_attrs["Data_level"] is None
140
+ with pytest.raises(KeyError):
141
+ assert test_get_global_attrs["bad_name"] == "false info"
142
+
143
+ # Testing second elif statement
144
+ test_error_elif = cdf_manager.get_global_attributes("imap_test_T3_test")
145
+ with pytest.raises(KeyError):
146
+ assert test_error_elif["Data_type"] == "Does Not Exist"
147
+
148
+ # Load in more data using get_global_attributes
149
+ test_get_global_attrs_2 = cdf_manager.get_global_attributes("imap_test_T2_test")
150
+ # Testing information previously loaded into global attributes (first if statement)
151
+ assert test_get_global_attrs_2["Project"] == "STP>Solar-Terrestrial Physics"
152
+ # Testing first elif statement
153
+ assert test_get_global_attrs_2["Descriptor"] == "TEST>Testinstrument"
154
+ # "Data_type" not required according to default schema
155
+ assert test_get_global_attrs_2["Data_type"] == "T2_test-two>Test-2 test two"
156
+
157
+ # Testing that required schema keys are in get_global_attributes
158
+ for attr_name in cdf_manager.global_attribute_schema.keys():
159
+ required_schema = cdf_manager.global_attribute_schema[attr_name]["required"]
160
+ if required_schema is True:
161
+ assert attr_name in test_get_global_attrs.keys()
162
+
163
+
164
+ def test_instrument_id_format():
165
+ # Initialize CdfAttributeManager object which loads in default info
166
+ cdf_manager = CdfAttributeManager(Path(__file__).parent.parent / "cdf")
167
+
168
+ # Change filepath to load test global attributes
169
+ cdf_manager.source_dir = Path(__file__).parent.parent / "cdf" / "test_data"
170
+ cdf_manager.load_global_attributes("imap_default_global_test_cdf_attrs.yaml")
171
+ cdf_manager.load_global_attributes("imap_test_global.yaml")
172
+
173
+ # Loading in instrument specific attributes
174
+ test_get_global_attrs = cdf_manager.get_global_attributes("imap_test_T1_test")
175
+
176
+ # Testing how instrument_id operates
177
+ assert test_get_global_attrs["Project"] == cdf_manager._global_attributes["Project"]
178
+ assert (
179
+ test_get_global_attrs["Source_name"]
180
+ == cdf_manager._global_attributes["Source_name"]
181
+ )
182
+ assert (
183
+ test_get_global_attrs["Data_type"]
184
+ == cdf_manager._global_attributes["imap_test_T1_test"]["Data_type"]
185
+ )
186
+ assert (
187
+ cdf_manager._global_attributes["imap_test_T1_test"]["Logical_source"]
188
+ == "imap_test_T1_test"
189
+ )
190
+ with pytest.raises(KeyError):
191
+ assert cdf_manager._global_attributes["imap_test_T1_test"]["Project"]
192
+
193
+
194
+ def test_add_global_attribute():
195
+ # Initialize CdfAttributeManager object which loads in default info
196
+ cdf_manager = CdfAttributeManager(Path(__file__).parent.parent / "cdf")
197
+
198
+ # Change filepath to load test global attributes
199
+ cdf_manager.source_dir = Path(__file__).parent.parent / "cdf" / "test_data"
200
+ cdf_manager.load_global_attributes("imap_test_global.yaml")
201
+
202
+ # Changing a dynamic global variable
203
+ cdf_manager.add_global_attribute("Project", "Test Project")
204
+ test_get_global_attrs = cdf_manager.get_global_attributes("imap_test_T1_test")
205
+ assert cdf_manager._global_attributes["Project"] == "Test Project"
206
+ assert test_get_global_attrs["Project"] == "Test Project"
207
+
208
+ # Testing adding required global attribute
209
+ cdf_manager._global_attributes.__delitem__("Source_name")
210
+ # Reloading get_global_attributes to pick up deleted Source_name
211
+ test_get_global_attrs = cdf_manager.get_global_attributes("imap_test_T1_test")
212
+ with pytest.raises(KeyError):
213
+ assert cdf_manager._global_attributes["Source_name"]
214
+ assert test_get_global_attrs["Source_name"] is None
215
+
216
+ # Adding deleted global attribute
217
+ cdf_manager.add_global_attribute("Source_name", "anas_source")
218
+ assert cdf_manager._global_attributes["Source_name"] == "anas_source"
219
+ # Reloading get_global_attributes to pick up added Source_name
220
+ test_get_global_attrs = cdf_manager.get_global_attributes("imap_test_T1_test")
221
+ assert test_get_global_attrs["Source_name"] == "anas_source"
222
+
223
+ # Testing instrument specific attribute
224
+ cdf_manager._global_attributes["imap_test_T1_test"].__delitem__("Logical_source")
225
+ # Reloading get_global_attributes to pick up deleted Source_name
226
+ test_get_global_attrs = cdf_manager.get_global_attributes("imap_test_T1_test")
227
+ with pytest.raises(KeyError):
228
+ assert cdf_manager._global_attributes["imap_test_T1_test"]["Logical_source"]
229
+ assert test_get_global_attrs["Logical_source"] is None
230
+
231
+
232
+ def test_variable_attribute():
233
+ """
234
+ Test function that covers:
235
+ load_variable_attributes
236
+ get_variable_attributes
237
+ """
238
+
239
+ # Creating CdfAttributeManager object, loading in default data
240
+ cdf_manager = CdfAttributeManager(Path(__file__).parent.parent / "cdf")
241
+ cdf_manager.source_dir = Path(__file__).parent.parent / "cdf" / "test_data"
242
+ cdf_manager.load_global_attributes("imap_default_global_test_cdf_attrs.yaml")
243
+ # Loading in test data
244
+ cdf_manager.load_variable_attributes("imap_test_variable.yaml")
245
+
246
+ # All variables required to have:
247
+ expected_attributes = [
248
+ "CATDESC",
249
+ "DEPEND_0",
250
+ "DISPLAY_TYPE",
251
+ "FIELDNAM",
252
+ "FILLVAL",
253
+ "FORMAT",
254
+ "LABLAXIS",
255
+ "UNITS",
256
+ "VALIDMIN",
257
+ "VALIDMAX",
258
+ "VAR_TYPE",
259
+ ]
260
+
261
+ # Assuring all required attributes are loaded in
262
+ for attr_name in cdf_manager.variable_attribute_schema["attribute_key"]:
263
+ attribute = cdf_manager.variable_attribute_schema["attribute_key"][attr_name]
264
+ if attribute["required"] is True:
265
+ for exp_attr in expected_attributes:
266
+ assert (
267
+ exp_attr in cdf_manager.variable_attribute_schema["attribute_key"]
268
+ )
269
+
270
+ # Testing specific attributes
271
+ assert (
272
+ cdf_manager._variable_attributes["default_attrs"]["DEPEND_0"]
273
+ == cdf_manager._variable_attributes["default_attrs"]["DEPEND_0"]
274
+ )
275
+ assert cdf_manager._variable_attributes["default_attrs"]["FILLVAL"] == -10
276
+ assert cdf_manager._variable_attributes["test_field_1"]["DEPEND_0"] == "test_depend"
277
+ assert (
278
+ cdf_manager._variable_attributes["default_attrs"]["VAR_TYPE"] == "test_var_type"
279
+ )
280
+ with pytest.raises(KeyError):
281
+ assert cdf_manager._variable_attributes["default_attrs"]["CATDESC"] == "test"
282
+
283
+
284
+ def test_get_variable_attributes():
285
+ # Creating CdfAttributeManager object, loading in default data
286
+ cdf_manager = CdfAttributeManager(Path(__file__).parent.parent / "cdf")
287
+
288
+ # Change filepath to load test global attributes
289
+ cdf_manager.source_dir = Path(__file__).parent.parent / "cdf" / "test_data"
290
+ cdf_manager.load_global_attributes("imap_default_global_test_cdf_attrs.yaml")
291
+ cdf_manager.load_variable_attributes("imap_test_variable.yaml")
292
+
293
+ # Loading in instrument specific attributes
294
+ imap_test_variable = cdf_manager.get_variable_attributes("test_field_1")
295
+
296
+ # Make sure all expected attributes are present
297
+ for variable_attrs in cdf_manager.variable_attribute_schema["attribute_key"]:
298
+ required_var_attributes = cdf_manager.variable_attribute_schema[
299
+ "attribute_key"
300
+ ][variable_attrs]["required"]
301
+ if required_var_attributes is True:
302
+ assert variable_attrs in imap_test_variable.keys()
303
+
304
+ # Calling default attributes
305
+ assert imap_test_variable["DEPEND_0"] == "test_depend"
306
+ assert imap_test_variable["DISPLAY_TYPE"] == "test_display_type"
307
+ assert imap_test_variable["FILLVAL"] == -10
308
+
309
+ # Calling required attributes
310
+ assert imap_test_variable["CATDESC"] == "test time"
311
+ assert imap_test_variable["TIME_BASE"] == 10
312
+ assert imap_test_variable["DEPEND_1"] == "test_depend_1"
313
+ assert imap_test_variable["DEPEND_2"] == "test_depend_2"
314
+
315
+ # Calling to non required attributes
316
+ assert imap_test_variable["LEAP_SECONDS_INCLUDED"] == "test_not_required"
317
+
318
+ # Calling attribute name that does not exist
319
+ with pytest.raises(KeyError):
320
+ assert imap_test_variable["DOES_NOT_EXIST"]
321
+
322
+ # Testing for attribute not in schema
323
+ with pytest.raises(KeyError):
324
+ assert imap_test_variable["NOT_IN_SCHEMA"]
325
+
326
+ # Load in different data, test again
327
+ imap_test_variable_2 = cdf_manager.get_variable_attributes("test_field_2")
328
+ # Calling default attributes
329
+ assert imap_test_variable_2["DEPEND_0"] == "test_depend"
330
+ assert imap_test_variable_2["DISPLAY_TYPE"] == "test_display_type"
331
+ assert imap_test_variable_2["FILLVAL"] == -10
332
+
333
+ # Calling required attributes
334
+ assert imap_test_variable_2["CATDESC"] == "test time 2"
335
+ assert imap_test_variable_2["TIME_BASE"] == 11
336
+
337
+ # Loading in different data to test logger errors, empty strings,
338
+ # and DEPEND_i with i >= 1 condition
339
+ imap_test_variable_3 = cdf_manager.get_variable_attributes("test_field_3")
340
+
341
+ assert imap_test_variable_3["DEPEND_1"] == "depend_1_test_3"
342
+ with pytest.raises(KeyError):
343
+ assert imap_test_variable_3["DEPEND_0"]
344
+ assert imap_test_variable_3["CATDESC"] == ""
345
+ assert imap_test_variable_3["REPRESENTATION_2"] == "representation_2"
346
+ assert imap_test_variable_3["LABL_PTR_1"] == "labl_ptr_1"
347
+
348
+ # check_schema = False
349
+ imap_test_variable_1_false = cdf_manager.get_variable_attributes(
350
+ "test_field_1", False
351
+ )
352
+ assert imap_test_variable_1_false["NOT_IN_SCHEMA"] == "not_in_schema"
353
+ assert imap_test_variable_1_false["VALIDMIN"] == 0
@@ -0,0 +1,7 @@
1
+ Project: STP>Solar-Terrestrial Physics
2
+ Source_name: IMAP>Interstellar Mapping and Acceleration Probe
3
+ Mission_group: Dysfunctional Cats
4
+ PI_name: Ana Manica
5
+ PI_affiliation: LASP, CU
6
+ Data_version: 002
7
+ DOI: test
@@ -0,0 +1,14 @@
1
+ Descriptor: &desc
2
+ TEST>Testinstrument
3
+ TEXT: &txt >
4
+ This file is nothing more than a test yamal. This description? This is a test description.
5
+ This Testinstrument will contribute to our understanding of the cdf_attribute_manager.py file.
6
+ This test file is led by me, Ana Manica. Lasp undergraduate employee.
7
+ I don't have a website. Sorry.
8
+
9
+ imap_test_T1_test:
10
+ Descriptor: *desc
11
+ TEXT: *txt
12
+ Data_type: T1_test-one>Test-1 test one
13
+ Logical_source: imap_test_T1_test
14
+ Logical_source_description: IMAP Mission TEST one document Level-T1.
@@ -0,0 +1,23 @@
1
+ default_attrs: &default
2
+ # Assumed values for all variable attrs unless overwritten
3
+ DEPEND_0: test_depend
4
+ DISPLAY_TYPE: test_display_type
5
+ FILLVAL: -10
6
+ FORMAT: I1
7
+ VALIDMIN: 0
8
+ VALIDMAX: 10
9
+ VAR_TYPE: test_var_type
10
+
11
+ test_field_1:
12
+ <<: *default
13
+ CATDESC: test time
14
+ FIELDNAM: test_field_1
15
+ LABLAXIS: test_labaxis
16
+ UNITS: test_units
17
+ VAR_TYPE: test_variable_type
18
+ SCALETYP: test_scaletyp
19
+ MONOTON: test_monoton
20
+ TIME_BASE: 10
21
+ TIME_SCALE: test_time_scale
22
+ REFERENCE_POSITION: test_reference_position
23
+ NOT_REQUIRED: test_not_required
@@ -0,0 +1,23 @@
1
+ instrument_base: &instrument_base
2
+ Descriptor: SWE>Solar Wind Electron
3
+ TEXT: >
4
+ The IMAP Solar Wind Electron (SWE) instrument measures the solar wind electrons
5
+ in the heliosphere. SWE will contribute to our understanding of the acceleration
6
+ and transport of charged particles in the heliosphere.
7
+ SWE design and assembly is led by the Princeton Plasma Physics Laboratory. See
8
+ https://imap.princeton.edu/instruments/swe for more details.
9
+ Instrument_type: "Particles (space)"
10
+
11
+ imap_swe_l1a_sci:
12
+ <<: *instrument_base
13
+ Data_level: 1A
14
+ Data_type: L1A_SCI>Level-1A Science data
15
+ Logical_source: imap_swe_l1a_sci
16
+ Logical_source_description: SWE Instrument Level-1A Science Data
17
+
18
+ imap_swe_l1b_sci:
19
+ <<: *instrument_base
20
+ Data_level: 1A
21
+ Data_type: L1B_SCI>Level-1B Science data
22
+ Logical_source: imap_swe_l1b_sci
23
+ Logical_source_description: SWE Instrument Level-1B Science Data
@@ -0,0 +1,30 @@
1
+ default_attrs: &default
2
+ # Assumed values for all variable attrs unless overwritten
3
+ DEPEND_0: epoch
4
+ DISPLAY_TYPE: time_series
5
+ FILLVAL: -9223372036854775808
6
+ FORMAT: I19
7
+ VALIDMIN: 0
8
+ VALIDMAX: 9223372036854775807
9
+ VAR_TYPE: data
10
+
11
+ epoch:
12
+ <<: *default
13
+ CATDESC: Time, number of nanoseconds since J2000 with leap seconds included
14
+ FIELDNAM: epoch
15
+ LABLAXIS: epoch
16
+ UNITS: ns
17
+ VAR_TYPE: support_data
18
+ SCALETYP: linear
19
+ MONOTON: INCREASE
20
+ TIME_BASE: J2000
21
+ TIME_SCALE: Terrestrial Time
22
+ REFERENCE_POSITION: Rotating Earth Geoid
23
+
24
+ x_front:
25
+ <<: *default
26
+ CATDESC: x front position
27
+ FIELDNAM: Event x-position on front foil
28
+ LABLAXIS: x front position
29
+ # TODO: come back to format
30
+ UNITS: mm
@@ -0,0 +1,26 @@
1
+ Descriptor: &desc
2
+ TEST>Testinstrument
3
+ TEXT: &txt >
4
+ This file is nothing more than a test yamal. This description? This is a test description.
5
+ This Testinstrument will contribute to our understanding of the cdf_attribute_manager.py file.
6
+ This test file is led by me, Ana Manica. Lasp undergraduate employee.
7
+ I don't have a website. Sorry.
8
+
9
+ imap_test_T1_test:
10
+ Descriptor: *desc
11
+ TEXT: *txt
12
+ Data_type: T1_test-one>Test-1 test one
13
+ Logical_source: imap_test_T1_test
14
+ Logical_source_description: IMAP Mission TEST one document Level-T1.
15
+
16
+ imap_test_T2_test:
17
+ Descriptor: *desc
18
+ TEXT: *txt
19
+ Data_type: T2_test-two>Test-2 test two
20
+ Logical_source: imap_test_T2_test
21
+ Logical_source_description: IMAP Mission TEST two document Level-T2.
22
+ LINK_TEXT: Test two additional info
23
+
24
+ imap_test_T3_test:
25
+ Descriptor: *desc
26
+ TEXT: *txt
@@ -0,0 +1,41 @@
1
+ default_attrs: &default
2
+ # Assumed values for all variable attrs unless overwritten
3
+ DEPEND_0: test_depend
4
+ DISPLAY_TYPE: test_display_type
5
+ FILLVAL: -10
6
+ FORMAT: I1
7
+ VALIDMIN: 0
8
+ VALIDMAX: 10
9
+ VAR_TYPE: test_var_type
10
+
11
+ test_field_1:
12
+ <<: *default
13
+ CATDESC: test time
14
+ FIELDNAM: test_field_1
15
+ LABLAXIS: test_labaxis
16
+ UNITS: test_units
17
+ VAR_TYPE: test_variable_type
18
+ TIME_BASE: 10
19
+ TIME_SCALE: test_time_scale
20
+ REFERENCE_POSITION: test_reference_position
21
+ LEAP_SECONDS_INCLUDED: test_not_required
22
+ DEPEND_1: test_depend_1
23
+ DEPEND_2: test_depend_2
24
+ NOT_IN_SCHEMA: not_in_schema
25
+
26
+ test_field_2:
27
+ <<: *default
28
+ CATDESC: test time 2
29
+ FIELDNAM: test_field_2
30
+ LABLAXIS: test_labaxis_2
31
+ UNITS: test_units_2
32
+ VAR_TYPE: test_variable_type_2
33
+ TIME_BASE: 11
34
+ TIME_SCALE: test_time_scale_2
35
+ REFERENCE_POSITION: test_reference_position_2
36
+
37
+ test_field_3:
38
+ DEPEND_1: depend_1_test_3
39
+ DEPEND_1: depend_1_test_3
40
+ LABL_PTR_1: labl_ptr_1
41
+ REPRESENTATION_2: representation_2
@@ -0,0 +1,62 @@
1
+ from pathlib import Path
2
+ from unittest import mock
3
+
4
+ # from imap_processing.cdf.cdf_attribute_manager import CdfAttributeManager
5
+ from imap_processing.cdf.imap_cdf_manager import ImapCdfAttributes
6
+
7
+
8
+ def test_add_instrument_global_attrs():
9
+ # Create an ImapCdfAttributes object, set to correct file path
10
+ imap_cdf_manager = ImapCdfAttributes()
11
+ imap_cdf_manager.source_dir = Path(__file__).parent.parent / "cdf" / "test_data"
12
+ imap_cdf_manager.add_instrument_global_attrs("instrument1")
13
+
14
+ # Testing data loaded in
15
+ imap_instrument = imap_cdf_manager.get_global_attributes("imap_test_T1_test")
16
+ assert imap_instrument["Data_type"] == "T1_test-one>Test-1 test one"
17
+ assert imap_instrument["Project"] == "STP>Solar Terrestrial Probes"
18
+
19
+ # Testing reloading data
20
+ imap_cdf_manager.add_instrument_global_attrs("instrument2")
21
+
22
+ # Testing data carried over, and overwritten
23
+ instrument2_instrument = imap_cdf_manager.get_global_attributes("imap_swe_l1a_sci")
24
+ assert instrument2_instrument["Data_type"] == "L1A_SCI>Level-1A Science data"
25
+ assert instrument2_instrument["Project"] == "STP>Solar Terrestrial Probes"
26
+
27
+
28
+ @mock.patch(
29
+ "imap_processing.cdf.cdf_attribute_manager.CdfAttributeManager.load_variable_attributes"
30
+ )
31
+ def testing_source_dir(mock_load_variable_attributes):
32
+ # Create an ImapCdfAttributes object
33
+ imap_cdf_manager = ImapCdfAttributes(Path(__file__).parent.parent / "cdf")
34
+ assert str(imap_cdf_manager.source_dir) == str(Path(__file__).parent.parent / "cdf")
35
+
36
+
37
+ def test_add_instrument_variable_attrs():
38
+ # Create an ImapCdfAttributes object
39
+ imap_cdf_manager = ImapCdfAttributes()
40
+ imap_cdf_manager.source_dir = Path(__file__).parent.parent / "cdf" / "test_data"
41
+ imap_cdf_manager.add_instrument_variable_attrs("instrument1", "level1")
42
+
43
+ # Testing the actual function
44
+ imap_instrument = imap_cdf_manager.get_variable_attributes("test_field_1")
45
+ assert imap_instrument["DEPEND_0"] == "test_depend"
46
+ assert imap_instrument["CATDESC"] == "test time"
47
+ assert imap_instrument["FIELDNAM"] == "test_field_1"
48
+ assert imap_instrument["UNITS"] == "test_units"
49
+
50
+ # Testing reloading data
51
+ imap_cdf_manager.add_instrument_variable_attrs("instrument2", "level2")
52
+
53
+ # Testing again
54
+ instrument2_instrument = imap_cdf_manager.get_variable_attributes("epoch")
55
+ assert instrument2_instrument["DEPEND_0"] == "epoch"
56
+ assert instrument2_instrument["DISPLAY_TYPE"] == "time_series"
57
+ assert instrument2_instrument["VALIDMAX"] == 9223372036854775807
58
+ assert (
59
+ instrument2_instrument["CATDESC"]
60
+ == "Time, number of nanoseconds since J2000 with leap seconds included"
61
+ )
62
+ assert instrument2_instrument["UNITS"] == "ns"