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,15 @@
1
+ """Test coverage for imap_processing.hi.utils.py"""
2
+
3
+ from imap_processing.hi.utils import HIAPID
4
+
5
+
6
+ def test_hiapid():
7
+ """Test coverage for HIAPID class"""
8
+ hi_apid = HIAPID(754)
9
+ assert isinstance(hi_apid, HIAPID)
10
+ assert hi_apid.name == "H45_APP_NHK"
11
+ assert hi_apid.sensor == "45sensor"
12
+
13
+ hi_apid = HIAPID["H90_SCI_CNT"]
14
+ assert hi_apid.value == 833
15
+ assert hi_apid.sensor == "90sensor"
File without changes
@@ -0,0 +1,230 @@
1
+ from pathlib import Path
2
+
3
+ import numpy as np
4
+ import pytest
5
+
6
+ from imap_processing import imap_module_directory
7
+ from imap_processing.hit.l0.decom_hit import (
8
+ assemble_science_frames,
9
+ decom_hit,
10
+ find_valid_starting_indices,
11
+ get_valid_indices,
12
+ is_sequential,
13
+ parse_count_rates,
14
+ parse_data,
15
+ update_ccsds_header_dims,
16
+ )
17
+ from imap_processing.utils import packet_file_to_datasets
18
+
19
+
20
+ @pytest.fixture()
21
+ def sci_dataset():
22
+ """Create a xarray dataset for testing from sample data."""
23
+ packet_definition = (
24
+ imap_module_directory / "hit/packet_definitions/hit_packet_definitions.xml"
25
+ )
26
+
27
+ # L0 file path
28
+ packet_file = Path(imap_module_directory / "tests/hit/test_data/sci_sample.ccsds")
29
+
30
+ datasets_by_apid = packet_file_to_datasets(
31
+ packet_file=packet_file,
32
+ xtce_packet_definition=packet_definition,
33
+ )
34
+
35
+ science_dataset = datasets_by_apid[1252]
36
+ return science_dataset
37
+
38
+
39
+ def test_parse_data():
40
+ """Test the parse_data function."""
41
+ # Test parsing a single integer
42
+ bin_str = "110"
43
+ bits_per_index = 2
44
+ start = 0
45
+ end = 2
46
+ result = parse_data(bin_str, bits_per_index, start, end)
47
+ assert result == [3] # 11 in binary is 3
48
+
49
+ # Test parsing multiple integers
50
+ bin_str = "110010101011"
51
+ bits_per_index = 2
52
+ start = 0
53
+ end = 12
54
+ result = parse_data(bin_str, bits_per_index, start, end)
55
+ assert result == [3, 0, 2, 2, 2, 3] # 11, 00, 10, 10, 10, 11 in binary
56
+
57
+
58
+ def test_parse_count_rates(sci_dataset):
59
+ """Test the parse_count_rates function."""
60
+
61
+ # TODO: complete this test once the function is complete
62
+
63
+ # Update ccsds header fields to use sc_tick as dimension
64
+ sci_dataset = update_ccsds_header_dims(sci_dataset)
65
+
66
+ # Group science packets into groups of 20
67
+ sci_dataset = assemble_science_frames(sci_dataset)
68
+ # Parse count rates and add to dataset
69
+ parse_count_rates(sci_dataset)
70
+ # Added count rate variables to dataset
71
+ count_rate_vars = [
72
+ "hdr_unit_num",
73
+ "hdr_frame_version",
74
+ "hdr_status_bits",
75
+ "hdr_minute_cnt",
76
+ "spare",
77
+ "livetime",
78
+ "num_trig",
79
+ "num_reject",
80
+ "num_acc_w_pha",
81
+ "num_acc_no_pha",
82
+ "num_haz_trig",
83
+ "num_haz_reject",
84
+ "num_haz_acc_w_pha",
85
+ "num_haz_acc_no_pha",
86
+ "sngrates",
87
+ "nread",
88
+ "nhazard",
89
+ "nadcstim",
90
+ "nodd",
91
+ "noddfix",
92
+ "nmulti",
93
+ "nmultifix",
94
+ "nbadtraj",
95
+ "nl2",
96
+ "nl3",
97
+ "nl4",
98
+ "npen",
99
+ "nformat",
100
+ "naside",
101
+ "nbside",
102
+ "nerror",
103
+ "nbadtags",
104
+ "coinrates",
105
+ "bufrates",
106
+ "l2fgrates",
107
+ "l2bgrates",
108
+ "l3fgrates",
109
+ "l3bgrates",
110
+ "penfgrates",
111
+ "penbgrates",
112
+ "ialirtrates",
113
+ "sectorates",
114
+ "l4fgrates",
115
+ "l4bgrates",
116
+ ]
117
+ if count_rate_vars in list(sci_dataset.keys()):
118
+ assert True
119
+
120
+
121
+ def test_is_sequential():
122
+ """Test the is_sequential function."""
123
+ counters = np.array([0, 1, 2, 3, 4])
124
+ if is_sequential(counters):
125
+ assert True
126
+ counters = np.array([0, 2, 3, 4, 5])
127
+ if not is_sequential(counters):
128
+ assert True
129
+
130
+
131
+ def test_find_valid_starting_indices():
132
+ """Test the find_valid_starting_indices function."""
133
+ flags = np.array(
134
+ [
135
+ 0,
136
+ 0,
137
+ 0,
138
+ 0,
139
+ 0,
140
+ 0,
141
+ 0,
142
+ 0,
143
+ 0,
144
+ 0,
145
+ 0,
146
+ 0,
147
+ 0,
148
+ 0,
149
+ 2,
150
+ 1,
151
+ 0,
152
+ 0,
153
+ 0,
154
+ 0,
155
+ 0,
156
+ 0,
157
+ 0,
158
+ 0,
159
+ 0,
160
+ 0,
161
+ 0,
162
+ 0,
163
+ 0,
164
+ 0,
165
+ 0,
166
+ 0,
167
+ 0,
168
+ 0,
169
+ 2,
170
+ ]
171
+ )
172
+ counters = np.arange(35)
173
+ result = find_valid_starting_indices(flags, counters)
174
+ # The only valid starting index for a science frame
175
+ # in the flags array is 15.
176
+ assert len(result) == 1
177
+ assert result[0] == 15
178
+
179
+
180
+ def test_get_valid_indices():
181
+ """Test the get_valid_indices function."""
182
+ # Array of starting indices for science frames
183
+ # in the science data
184
+ indices = np.array([0, 20, 40])
185
+ # Array of counters
186
+ counters = np.arange(60)
187
+ # Array of valid indices where the packets in the science
188
+ # frame have corresponding counters in sequential order
189
+ result = get_valid_indices(indices, counters, 20)
190
+ # All indices are valid with sequential counters
191
+ assert len(result) == 3
192
+
193
+ # Test array with invalid indices (use smaller sample size)
194
+ indices = np.array([0, 5, 10])
195
+ # Array of counters (missing counters 6-8)
196
+ counters = np.array([0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 14, 15, 16, 17])
197
+ result = get_valid_indices(indices, counters, 5)
198
+ # Only indices 0 and 10 are valid with sequential counters
199
+ assert len(result) == 2
200
+
201
+
202
+ def test_update_ccsds_header_dims(sci_dataset):
203
+ """Test the update_ccsds_header_data function.
204
+
205
+ Replaces epoch dimension with sc_tick dimension.
206
+ """
207
+ updated_dataset = update_ccsds_header_dims(sci_dataset)
208
+ assert "sc_tick" in updated_dataset.dims
209
+ assert "epoch" not in updated_dataset.dims
210
+
211
+
212
+ def test_assemble_science_frames(sci_dataset):
213
+ """Test the assemble_science_frames function."""
214
+ updated_dataset = update_ccsds_header_dims(sci_dataset)
215
+ updated_dataset = assemble_science_frames(updated_dataset)
216
+ assert "count_rates_binary" in updated_dataset
217
+ assert "pha_binary" in updated_dataset
218
+
219
+
220
+ def test_decom_hit(sci_dataset):
221
+ """Test the decom_hit function.
222
+
223
+ This function orchestrates the unpacking and decompression
224
+ of the HIT science data.
225
+ """
226
+ # TODO: complete this test once the function is complete
227
+ updated_dataset = decom_hit(sci_dataset)
228
+ print(updated_dataset)
229
+ assert "count_rates_binary" in updated_dataset
230
+ assert "hdr_unit_num" in updated_dataset
@@ -0,0 +1,224 @@
1
+ import numpy as np
2
+ import pytest
3
+ import xarray as xr
4
+
5
+ from imap_processing import imap_module_directory
6
+ from imap_processing.cdf.imap_cdf_manager import ImapCdfAttributes
7
+ from imap_processing.hit.l1a.hit_l1a import (
8
+ HitAPID,
9
+ concatenate_leak_variables,
10
+ hit_l1a,
11
+ process_housekeeping,
12
+ )
13
+ from imap_processing.utils import packet_file_to_datasets
14
+
15
+
16
+ @pytest.fixture(scope="module")
17
+ def packet_filepath():
18
+ """Set path to test data file"""
19
+ return (
20
+ imap_module_directory / "tests/hit/test_data/imap_hit_l0_hk_20100105_v001.pkts"
21
+ )
22
+
23
+
24
+ @pytest.fixture(scope="module")
25
+ def datasets(packet_filepath):
26
+ """Create datasets from packet file"""
27
+ packet_definition = (
28
+ imap_module_directory / "hit/packet_definitions/" "hit_packet_definitions.xml"
29
+ )
30
+ datasets_by_apid = packet_file_to_datasets(
31
+ packet_file=packet_filepath,
32
+ xtce_packet_definition=packet_definition,
33
+ )
34
+ return datasets_by_apid
35
+
36
+
37
+ @pytest.fixture(scope="module")
38
+ def attribute_manager():
39
+ """Create the attribute manager"""
40
+ attr_mgr = ImapCdfAttributes()
41
+ attr_mgr.add_instrument_global_attrs(instrument="hit")
42
+ attr_mgr.add_instrument_variable_attrs(instrument="hit", level="l1a")
43
+ attr_mgr.add_global_attribute("Data_version", "001")
44
+ return attr_mgr
45
+
46
+
47
+ @pytest.fixture(scope="module")
48
+ def housekeeping_dataset(datasets):
49
+ """Get the housekeeping dataset"""
50
+ return datasets[HitAPID.HIT_HSKP]
51
+
52
+
53
+ def test_hit_l1a(packet_filepath):
54
+ """Create L1A datasets from a packet file.
55
+
56
+ Parameters
57
+ ----------
58
+ packet_filepath : str
59
+ Path to ccsds file
60
+ """
61
+ processed_datasets = hit_l1a(packet_filepath, "001")
62
+ # TODO: update assertions after science data processing is completed
63
+ assert isinstance(processed_datasets, list)
64
+ assert len(processed_datasets) == 1
65
+ assert isinstance(processed_datasets[0], xr.Dataset)
66
+ assert processed_datasets[0].attrs["Logical_source"] == "imap_hit_l1a_hk"
67
+
68
+
69
+ def test_concatenate_leak_variables(housekeeping_dataset):
70
+ """Test concatenation of leak_i variables"""
71
+
72
+ # Create data array for leak_i dependency
73
+ adc_channels = xr.DataArray(
74
+ np.arange(64, dtype=np.uint8),
75
+ name="adc_channels",
76
+ dims=["adc_channels"],
77
+ )
78
+
79
+ updated_dataset = concatenate_leak_variables(housekeeping_dataset, adc_channels)
80
+
81
+ # Assertions
82
+ # ----------------
83
+ assert "leak_i" in updated_dataset
84
+ assert updated_dataset["leak_i"].shape == (88, 64)
85
+ for i in range(64):
86
+ # Check if the values in the `leak_i` variable match the values in
87
+ # the original `leak_i_XX` variable.
88
+ # - First access the `leak_i` variable in the `updated_dataset`.
89
+ # The [:, i] selects all rows (`:`) and the `i`-th column of the `leak_i`
90
+ # variable.
91
+ # - Then access the `leak_i_XX` variable in the `housekeeping_dataset`.
92
+ # The `f"leak_i_{i:02d}"` selects the variable with the name `leak_i_XX`
93
+ # where `XX` is the `i`-th value.
94
+ # - Compare values
95
+ np.testing.assert_array_equal(
96
+ updated_dataset["leak_i"][:, i], housekeeping_dataset[f"leak_i_{i:02d}"]
97
+ )
98
+
99
+
100
+ def test_process_housekeeping(housekeeping_dataset, attribute_manager):
101
+ """Test processing of housekeeping dataset"""
102
+
103
+ # Call the function
104
+ processed_hskp_dataset = process_housekeeping(
105
+ housekeeping_dataset, attribute_manager
106
+ )
107
+
108
+ # Define the keys that should have dropped from the dataset
109
+ dropped_keys = {
110
+ "pkt_apid",
111
+ "sc_tick",
112
+ "version",
113
+ "type",
114
+ "sec_hdr_flg",
115
+ "seq_flgs",
116
+ "src_seq_ctr",
117
+ "pkt_len",
118
+ "hskp_spare1",
119
+ "hskp_spare2",
120
+ "hskp_spare3",
121
+ "hskp_spare4",
122
+ "hskp_spare5",
123
+ }
124
+ # Define the keys that should be present
125
+ valid_keys = {
126
+ "heater_on",
127
+ "fsw_version_b",
128
+ "ebox_m12va",
129
+ "phasic_stat",
130
+ "ebox_3d4vd",
131
+ "ebox_p2d0vd",
132
+ "temp1",
133
+ "last_bad_seq_num",
134
+ "ebox_m5d7va",
135
+ "ebox_p12va",
136
+ "table_status",
137
+ "enable_50khz",
138
+ "mram_disabled",
139
+ "temp3",
140
+ "preamp_l1a",
141
+ "l2ab_bias",
142
+ "l34b_bias",
143
+ "fsw_version_c",
144
+ "num_evnt_last_hk",
145
+ "dac1_enable",
146
+ "preamp_l234b",
147
+ "analog_temp",
148
+ "fee_running",
149
+ "fsw_version_a",
150
+ "num_errors",
151
+ "test_pulser_on",
152
+ "dac0_enable",
153
+ "preamp_l1b",
154
+ "l1ab_bias",
155
+ "l34a_bias",
156
+ "leak_i",
157
+ "last_good_cmd",
158
+ "lvps_temp",
159
+ "idpu_temp",
160
+ "temp2",
161
+ "preamp_l234a",
162
+ "last_good_seq_num",
163
+ "num_good_cmds",
164
+ "heater_control",
165
+ "hvps_temp",
166
+ "ebox_p5d7va",
167
+ "spin_period_long",
168
+ "enable_hvps",
169
+ "temp0",
170
+ "spin_period_short",
171
+ "dyn_thresh_lvl",
172
+ "num_bad_cmds",
173
+ "adc_mode",
174
+ "ebox_5d1vd",
175
+ "active_heater",
176
+ "last_error_num",
177
+ "last_bad_cmd",
178
+ "ref_p5v",
179
+ "code_checksum",
180
+ "mode",
181
+ }
182
+
183
+ # Define the dataset attributes
184
+ dataset_attrs = {
185
+ "Data_level": "1A",
186
+ "Data_type": "L1A_HK>Level-1A Housekeeping",
187
+ "Data_version": "001",
188
+ "Descriptor": "HIT>IMAP High-energy Ion Telescope",
189
+ "Discipline": "Solar Physics>Heliospheric Physics",
190
+ "File_naming_convention": "source_descriptor_datatype_yyyyMMdd_vNNN",
191
+ "HTTP_LINK": "https://imap.princeton.edu/",
192
+ "Instrument_type": "Particles (space)",
193
+ "LINK_TITLE": "IMAP The Interstellar Mapping and Acceleration Probe",
194
+ "Logical_file_id": None,
195
+ "Logical_source": "imap_hit_l1a_hk",
196
+ "Logical_source_description": "IMAP Mission HIT Instrument Level-1A "
197
+ "Housekeeping Data.",
198
+ "Mission_group": "IMAP",
199
+ "PI_affiliation": "Princeton University",
200
+ "PI_name": "Prof. David J. McComas",
201
+ "Project": "STP>Solar Terrestrial Probes",
202
+ "Source_name": "IMAP>Interstellar Mapping and Acceleration Probe",
203
+ "TEXT": "The High-energy Ion Telescope (HIT) measures the elemental "
204
+ "composition, energy spectra, angle distributions, and arrival "
205
+ "times of high-energy ions. HIT delivers full-sky coverage from "
206
+ "a wide instrument field-of-view (FOV) to enable a high resolution "
207
+ "of ion measurements, such as observing shock-accelerated ions, "
208
+ "determining the origin of the solar energetic particles (SEPs) "
209
+ "spectra, and resolving particle transport in the heliosphere. "
210
+ "See https://imap.princeton.edu/instruments/hit for more details.\n",
211
+ }
212
+
213
+ # Define the coordinates and dimensions. Both have equivalent values
214
+ dataset_coords_dims = {"epoch", "adc_channels", "adc_channels_label"}
215
+
216
+ # Assertions
217
+ # ----------------
218
+ # Check that the dataset has the correct variables
219
+ assert valid_keys == set(processed_hskp_dataset.data_vars.keys())
220
+ assert set(dropped_keys).isdisjoint(set(processed_hskp_dataset.data_vars.keys()))
221
+ # Check that the dataset has the correct attributes, coordinates, and dimensions
222
+ assert processed_hskp_dataset.attrs == dataset_attrs
223
+ assert processed_hskp_dataset.coords.keys() == dataset_coords_dims
224
+ assert processed_hskp_dataset.sizes.keys() == dataset_coords_dims
@@ -0,0 +1,52 @@
1
+ import pytest
2
+ import xarray as xr
3
+
4
+ from imap_processing import imap_module_directory
5
+ from imap_processing.cdf.imap_cdf_manager import ImapCdfAttributes
6
+ from imap_processing.hit.l1a import hit_l1a
7
+ from imap_processing.hit.l1b import hit_l1b
8
+
9
+
10
+ @pytest.fixture()
11
+ def dependency():
12
+ """Get L1A data from test packet file"""
13
+
14
+ packet_filepath = (
15
+ imap_module_directory / "tests/hit/test_data/imap_hit_l0_hk_20100105_v001.pkts"
16
+ )
17
+ l1a_data = hit_l1a.hit_l1a(packet_filepath, "001")[0]
18
+
19
+ return l1a_data
20
+
21
+
22
+ def test_create_hk_dataset():
23
+ """Test creating housekeeping L1B dataset
24
+
25
+ Creates a xarray dataset for housekeeping data
26
+ """
27
+
28
+ # create the attribute manager for this data level
29
+ attr_mgr = ImapCdfAttributes()
30
+ attr_mgr.add_instrument_global_attrs(instrument="hit")
31
+ attr_mgr.add_instrument_variable_attrs(instrument="hit", level="l1b")
32
+ attr_mgr.add_global_attribute("Data_version", "001")
33
+
34
+ l1b_hk_dataset = hit_l1b.create_hk_dataset(attr_mgr)
35
+ assert isinstance(l1b_hk_dataset, xr.Dataset)
36
+
37
+
38
+ def test_hit_l1b(dependency):
39
+ """Test creating L1B CDF files
40
+
41
+ Creates a CDF file for each L1B product and stores
42
+ their filepaths in a list
43
+
44
+ Parameters
45
+ ----------
46
+ dependency : xr.dataset
47
+ L1A data
48
+ """
49
+ datasets = hit_l1b.hit_l1b(dependency, "001")
50
+ assert len(datasets) == 1
51
+ assert isinstance(datasets[0], xr.Dataset)
52
+ assert datasets[0].attrs["Logical_source"] == "imap_hit_l1b_hk"
@@ -0,0 +1,88 @@
1
+ CCSDS_VERSION,CCSDS_TYPE,CCSDS_SEC_HDR_FLAG,CCSDS_APPID,CCSDS_GRP_FLAG,CCSDS_SEQ_CNT,CCSDS_LENGTH,SHCOARSE,MODE,FSW_VERSION_A,FSW_VERSION_B,FSW_VERSION_C,NUM_GOOD_CMDS,LAST_GOOD_CMD,LAST_GOOD_SEQ_NUM,NUM_BAD_CMDS,LAST_BAD_CMD,LAST_BAD_SEQ_NUM,FEE_RUNNING,MRAM_DISABLED,ENABLE_50KHZ,ENABLE_HVPS,TABLE_STATUS,HEATER_CONTROL,ADC_MODE,DYN_THRESH_LVL,NUM_EVNT_LAST_HK,NUM_ERRORS,LAST_ERROR_NUM,CODE_CHECKSUM,SPIN_PERIOD_SHORT,SPIN_PERIOD_LONG,LEAK_I_63,LEAK_I_62,LEAK_I_61,LEAK_I_60,LEAK_I_59,LEAK_I_58,LEAK_I_57,LEAK_I_56,LEAK_I_55,LEAK_I_54,LEAK_I_53,LEAK_I_52,LEAK_I_51,LEAK_I_50,LEAK_I_49,LEAK_I_48,LEAK_I_47,LEAK_I_46,LEAK_I_45,LEAK_I_44,LEAK_I_43,LEAK_I_42,LEAK_I_41,LEAK_I_40,LEAK_I_39,LEAK_I_38,LEAK_I_37,LEAK_I_36,LEAK_I_35,LEAK_I_34,LEAK_I_33,LEAK_I_32,LEAK_I_31,LEAK_I_30,LEAK_I_29,LEAK_I_28,LEAK_I_27,LEAK_I_26,LEAK_I_25,LEAK_I_24,LEAK_I_23,LEAK_I_22,LEAK_I_21,LEAK_I_20,LEAK_I_19,LEAK_I_18,LEAK_I_17,LEAK_I_16,LEAK_I_15,LEAK_I_14,LEAK_I_13,LEAK_I_12,LEAK_I_11,LEAK_I_10,LEAK_I_09,LEAK_I_08,LEAK_I_07,LEAK_I_06,LEAK_I_05,LEAK_I_04,LEAK_I_03,LEAK_I_02,LEAK_I_01,LEAK_I_00,PHASIC_STAT,ACTIVE_HEATER,HEATER_ON,TEST_PULSER_ON,DAC0_ENABLE,DAC1_ENABLE,PREAMP_L234A,PREAMP_L1A,PREAMP_L1B,PREAMP_L234B,TEMP0,TEMP1,TEMP2,TEMP3,ANALOG_TEMP,HVPS_TEMP,IDPU_TEMP,LVPS_TEMP,EBOX_3D4VD,EBOX_5D1VD,EBOX_P12VA,EBOX_M12VA,EBOX_P5D7VA,EBOX_M5D7VA,REF_P5V,L1AB_BIAS,L2AB_BIAS,L34A_BIAS,L34B_BIAS,EBOX_P2D0VD
2
+ 0,0,1,1251,3,2883,143,377991,4,3,2,8,162,169,85,0,0,0,1,0,1,1,1,0,0,0,51,0,0,13406,46875,26214,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,784,791,776,782,905,932,943,931,1151,1152,1136,999,2774,3334,2948,358,2986,494,3167,1501,1913,2823,2822,1619
3
+ 0,0,1,1251,3,2884,143,377996,4,3,2,8,162,169,85,0,0,0,1,0,1,1,1,0,0,0,51,0,0,13406,46875,48059,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,784,791,776,782,905,933,944,931,1151,1152,1136,998,2774,3334,2948,358,2986,495,3166,1500,1913,2823,2822,1619
4
+ 0,0,1,1251,3,2885,143,378001,4,3,2,8,162,169,85,0,0,0,1,0,1,1,1,0,0,0,51,0,0,13406,46875,4369,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,784,791,776,782,905,932,944,931,1151,1152,1136,998,2774,3334,2948,358,2986,494,3166,1501,1913,2823,2822,1619
5
+ 0,0,1,1251,3,2886,143,378006,4,3,2,8,167,170,90,0,0,0,1,0,1,1,1,0,0,0,51,0,0,13406,46875,26214,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,784,791,777,782,905,932,944,931,1150,1152,1136,998,2774,3334,2948,357,2986,494,3166,1501,1913,2822,2823,1602
6
+ 0,0,1,1251,3,2887,143,378011,4,3,2,8,167,170,90,0,0,0,1,0,1,1,1,0,0,0,50,0,0,13406,46875,48059,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,784,791,777,782,905,933,944,931,1152,1152,1136,998,2774,3334,2948,358,2986,494,3166,1500,1912,2823,2822,1616
7
+ 0,0,1,1251,3,2888,143,378016,4,3,2,8,172,169,95,0,0,0,1,0,1,1,1,0,0,0,51,0,0,13406,46875,4369,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,784,791,777,782,905,933,944,931,1150,1152,1136,998,2769,3335,2948,358,2986,495,3166,1500,1913,2822,2821,1620
8
+ 0,0,1,1251,3,2889,143,378021,4,3,2,8,172,169,95,0,0,0,1,0,1,1,1,0,0,0,51,0,0,13406,46875,26214,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,784,791,776,782,905,933,944,931,1151,1152,1136,998,2774,3334,2948,358,2986,495,3167,1501,1913,2823,2822,1612
9
+ 0,0,1,1251,3,2890,143,378026,4,3,2,8,172,169,95,0,0,0,1,0,1,1,1,0,0,0,51,0,0,13406,46875,48059,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,784,791,776,782,905,933,944,931,1152,1152,1136,999,2774,3334,2948,358,2987,494,3167,1500,1913,2823,2822,1610
10
+ 0,0,1,1251,3,2891,143,378031,4,3,2,8,172,169,95,0,0,0,1,0,1,1,1,0,0,0,51,0,0,13406,46875,4369,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,784,791,777,782,905,933,944,932,1152,1152,1136,998,2774,3334,2948,358,2987,494,3167,1500,1912,2823,2822,1609
11
+ 0,0,1,1251,3,2892,143,378036,4,3,2,8,172,169,95,0,0,0,1,0,1,1,1,0,0,0,51,0,0,13406,46875,26214,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,784,791,776,782,905,933,944,932,1152,1152,1136,998,2774,3334,2948,358,2986,494,3167,1501,1913,2823,2822,1604
12
+ 0,0,1,1251,3,2893,143,378041,4,3,2,8,172,169,95,0,0,0,1,0,1,1,1,0,0,0,50,0,0,13406,46875,48059,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,785,791,776,782,905,933,944,931,1152,1152,1136,998,2774,3334,2948,357,2987,495,3166,1500,1913,2823,2822,1605
13
+ 0,0,1,1251,3,2894,143,378046,4,3,2,8,177,170,100,0,0,0,1,0,1,1,1,0,0,0,52,0,0,13406,46875,4369,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,784,791,776,782,905,933,944,931,1151,1152,1136,999,2774,3334,2948,358,2986,494,3167,1501,1913,2824,2824,1619
14
+ 0,0,1,1251,3,2895,143,378051,4,3,2,8,177,170,100,0,0,0,1,0,1,1,1,0,0,0,50,0,0,13406,46875,26214,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,784,791,776,782,905,933,944,932,1151,1152,1136,999,2774,3334,2949,358,2986,494,3166,1501,1913,2823,2822,1604
15
+ 0,0,1,1251,3,2896,143,378056,4,3,2,8,182,169,105,0,0,0,1,0,1,1,1,0,0,0,51,0,0,13406,46875,48059,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,784,791,776,782,905,933,944,931,1150,1152,1136,999,2760,3334,2949,358,2986,494,3167,1500,1912,2823,2821,1620
16
+ 0,0,1,1251,3,2897,143,378061,4,3,2,8,182,169,105,0,0,0,1,0,1,1,1,0,0,0,51,0,0,13406,46875,4369,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,784,791,776,782,905,933,944,932,1151,1152,1136,998,2774,3334,2948,358,2986,494,3167,1501,1912,2823,2822,1604
17
+ 0,0,1,1251,3,2898,143,378066,4,3,2,8,182,169,105,0,0,0,1,0,1,1,1,0,0,0,51,0,0,13406,46875,26214,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,784,791,776,782,905,933,944,932,1150,1152,1136,998,2774,3334,2948,358,2986,495,3167,1500,1913,2823,2822,1603
18
+ 0,0,1,1251,3,2899,143,378071,4,3,2,8,182,169,105,0,0,0,1,0,1,1,1,0,0,0,50,0,0,13406,46875,48059,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,784,791,776,782,905,933,944,932,1151,1152,1136,999,2774,3334,2948,358,2987,494,3166,1501,1913,2823,2822,1603
19
+ 0,0,1,1251,3,2900,143,378076,4,3,2,8,182,169,105,0,0,0,1,0,1,1,1,0,0,0,51,0,0,13406,46875,4369,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,784,791,776,782,905,933,944,932,1151,1152,1136,999,2774,3334,2949,358,2986,494,3167,1500,1913,2823,2822,1602
20
+ 0,0,1,1251,3,2901,143,378081,4,3,2,8,182,169,105,0,0,0,1,0,1,1,1,0,0,0,51,0,0,13406,46875,26214,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,784,791,776,782,905,933,944,932,1151,1152,1136,998,2774,3334,2948,357,2986,495,3166,1501,1913,2823,2823,1602
21
+ 0,0,1,1251,3,2902,143,378086,4,3,2,8,187,170,110,0,0,0,1,0,1,1,1,0,0,0,52,0,0,13406,46875,48059,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,784,791,776,782,905,933,944,932,1151,1152,1136,999,2774,3334,2948,359,2986,494,3167,1500,1914,2825,2822,1620
22
+ 0,0,1,1251,3,2903,143,378091,4,3,2,8,187,170,110,0,0,0,1,0,1,1,1,0,0,0,50,0,0,13406,46875,4369,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,784,791,776,782,905,933,944,932,1151,1152,1136,999,2775,3334,2948,358,2986,494,3167,1501,1913,2823,2823,1602
23
+ 0,0,1,1251,3,2904,143,378096,4,3,2,8,192,169,115,0,0,0,1,0,1,1,1,0,0,0,51,0,0,13406,46875,26214,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,784,791,776,782,905,933,944,932,1151,1152,1136,999,2774,3334,2948,358,2986,494,3167,1500,1913,2823,2821,1620
24
+ 0,0,1,1251,3,2905,143,378101,4,3,2,8,192,169,115,0,0,0,1,0,1,1,1,0,0,0,51,0,0,13406,46875,48059,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,784,791,776,782,905,933,944,932,1151,1152,1136,999,2775,3334,2948,359,2986,494,3167,1502,1913,2823,2823,1620
25
+ 0,0,1,1251,3,2906,143,378106,4,3,2,8,192,169,115,0,0,0,1,0,1,1,1,0,0,0,50,0,0,13406,46875,4369,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,784,791,777,782,905,933,944,932,1151,1152,1136,999,2774,3334,2948,358,2986,495,3166,1501,1913,2823,2823,1619
26
+ 0,0,1,1251,3,2907,143,378111,4,3,2,8,192,169,115,0,0,0,1,0,1,1,1,0,0,0,51,0,0,13406,46875,26214,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,784,791,776,782,905,933,944,932,1151,1152,1136,999,2774,3334,2948,358,2986,494,3166,1501,1913,2823,2824,1620
27
+ 0,0,1,1251,3,2908,143,378116,4,3,2,8,192,169,115,0,0,0,1,0,1,1,1,0,0,0,51,0,0,13406,46875,48059,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,784,791,776,782,905,933,944,932,1151,1152,1136,999,2774,3334,2949,358,2986,495,3166,1501,1912,2823,2824,1619
28
+ 0,0,1,1251,3,2909,143,378121,4,3,2,8,192,169,115,0,0,0,1,0,1,1,1,0,0,0,51,0,0,13406,46875,4369,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,784,791,777,782,905,933,944,932,1151,1152,1136,999,2774,3334,2948,357,2986,493,3167,1501,1913,2823,2824,1619
29
+ 0,0,1,1251,3,2910,143,378126,4,3,2,8,197,170,120,0,0,0,1,0,1,1,1,0,0,0,51,0,0,13406,46875,26214,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,784,791,777,782,905,933,944,932,1151,1152,1136,999,2774,3334,2947,358,2986,494,3167,1501,1914,2823,2822,1620
30
+ 0,0,1,1251,3,2911,143,378131,4,3,2,8,197,170,120,0,0,0,1,0,1,1,1,0,0,0,51,0,0,13406,46875,48059,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,784,791,776,782,905,933,945,932,1151,1152,1136,999,2774,3334,2948,359,2986,495,3167,1501,1912,2824,2824,1619
31
+ 0,0,1,1251,3,2912,143,378136,4,3,2,8,202,169,125,0,0,0,1,0,1,1,1,0,0,0,51,0,0,13406,46875,4369,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,784,791,776,782,905,933,944,932,1151,1152,1137,999,2771,3335,2948,359,2986,494,3166,1500,1913,2822,2821,1619
32
+ 0,0,1,1251,3,2913,143,378141,4,3,2,8,202,169,125,0,0,0,1,0,1,1,1,0,0,0,50,0,0,13406,46875,26214,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,784,791,776,782,905,933,944,932,1152,1152,1136,999,2775,3334,2947,358,2986,494,3166,1500,1913,2824,2824,1619
33
+ 0,0,1,1251,3,2914,143,378146,4,3,2,8,202,169,125,0,0,0,1,0,1,1,1,0,0,0,51,0,0,13406,46875,48059,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,784,791,777,782,905,933,944,932,1152,1152,1136,999,2774,3334,2948,358,2986,495,3167,1501,1912,2824,2825,1619
34
+ 0,0,1,1251,3,2915,143,378151,4,3,2,8,202,169,125,0,0,0,1,0,1,1,1,0,0,0,51,0,0,13406,46875,4369,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,784,791,776,782,905,933,944,932,1151,1152,1136,999,2775,3334,2948,358,2986,495,3166,1500,1913,2824,2822,1620
35
+ 0,0,1,1251,3,2916,143,378156,4,3,2,8,202,169,125,0,0,0,1,0,1,1,1,0,0,0,51,0,0,13406,46875,26214,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,784,791,776,782,905,933,944,932,1151,1152,1136,999,2774,3334,2948,358,2986,494,3166,1501,1913,2825,2822,1619
36
+ 0,0,1,1251,3,2917,143,378161,4,3,2,8,202,169,125,0,0,0,1,0,1,1,1,0,0,0,51,0,0,13406,46875,48059,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,784,791,777,782,905,933,944,932,1152,1152,1136,999,2774,3334,2948,358,2986,495,3167,1500,1913,2825,2821,1620
37
+ 0,0,1,1251,3,2918,143,378166,4,3,2,8,207,170,130,0,0,0,1,0,1,1,1,0,0,0,51,0,0,13406,46875,4369,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,784,791,777,782,905,933,944,932,1151,1152,1136,999,2774,3334,2947,358,2986,494,3166,1502,1913,2822,2820,1619
38
+ 0,0,1,1251,3,2919,143,378171,4,3,2,8,207,170,130,0,0,0,1,0,1,1,1,0,0,0,50,0,0,13406,46875,26214,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,784,791,776,782,905,933,944,932,1152,1152,1135,999,2774,3334,2948,359,2986,494,3167,1501,1913,2825,2821,1620
39
+ 0,0,1,1251,3,2920,143,378176,4,3,2,8,212,169,135,0,0,0,1,0,1,1,1,0,0,0,51,0,0,13406,46875,48059,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,784,792,777,782,905,933,944,932,1151,1152,1136,999,2774,3334,2948,359,2985,494,3166,1500,1913,2822,2821,1619
40
+ 0,0,1,1251,3,2921,143,378181,4,3,2,8,212,169,135,0,0,0,1,0,1,1,1,0,0,0,51,0,0,13406,46875,4369,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,784,791,776,782,905,933,944,932,1151,1152,1136,999,2775,3334,2948,358,2985,494,3166,1501,1914,2825,2822,1619
41
+ 0,0,1,1251,3,2922,143,378186,4,3,2,8,212,169,135,0,0,0,1,0,1,1,1,0,0,0,51,0,0,13406,46875,26214,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,784,791,776,782,905,933,944,932,1152,1152,1136,999,2774,3334,2948,358,2986,494,3166,1500,1914,2825,2822,1620
42
+ 0,0,1,1251,3,2923,143,378191,4,3,2,8,212,169,135,0,0,0,1,0,1,1,1,0,0,0,51,0,0,13406,46875,48059,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,784,791,776,782,905,933,944,932,1151,1152,1136,999,2775,3334,2947,358,2985,494,3166,1500,1914,2826,2821,1619
43
+ 0,0,1,1251,3,2924,143,378196,4,3,2,8,212,169,135,0,0,0,1,0,1,1,1,0,0,0,51,0,0,13406,46875,4369,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,784,791,776,782,905,933,944,932,1152,1152,1136,999,2774,3334,2948,359,2985,494,3167,1501,1914,2825,2822,1620
44
+ 0,0,1,1251,3,2925,143,378201,4,3,2,8,212,169,135,0,0,0,1,0,1,1,1,0,0,0,50,0,0,13406,46875,26214,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,784,791,776,782,905,933,944,932,1151,1152,1136,999,2774,3334,2948,359,2985,495,3167,1501,1915,2823,2822,1619
45
+ 0,0,1,1251,3,2926,143,378206,4,3,2,8,217,170,140,0,0,0,1,0,1,1,1,0,0,0,52,0,0,13406,46875,48059,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,784,791,776,782,905,933,944,932,1151,1152,1136,999,2774,3334,2948,359,2985,494,3170,1501,1913,2823,2822,1620
46
+ 0,0,1,1251,3,2927,143,378211,4,3,2,8,217,170,140,0,0,0,1,0,1,1,1,0,0,0,50,0,0,13406,46875,4369,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,784,791,776,782,906,933,944,932,1152,1152,1136,1000,2774,3334,2947,358,2984,494,3167,1501,1914,2823,2821,1620
47
+ 0,0,1,1251,3,2928,143,378216,4,3,2,8,222,169,145,0,0,0,1,0,1,1,1,0,0,0,51,0,0,13406,46875,26214,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,784,791,777,782,905,933,944,932,1152,1153,1136,999,2774,3334,2948,359,2985,494,3166,1500,1913,2822,2821,1618
48
+ 0,0,1,1251,3,2929,143,378221,4,3,2,8,222,169,145,0,0,0,1,0,1,1,1,0,0,0,51,0,0,13406,46875,48059,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,784,791,777,782,906,933,944,932,1151,1152,1136,999,2774,3334,2947,359,2985,494,3167,1501,1914,2823,2822,1619
49
+ 0,0,1,1251,3,2930,143,378226,4,3,2,8,222,169,145,0,0,0,1,0,1,1,1,0,0,0,51,0,0,13406,46875,4369,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,784,791,777,782,905,933,944,932,1152,1152,1136,999,2774,3334,2947,359,2984,495,3166,1501,1915,2823,2822,1619
50
+ 0,0,1,1251,3,2931,143,378231,4,3,2,8,222,169,145,0,0,0,1,0,1,1,1,0,0,0,51,0,0,13406,46875,26214,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,784,791,776,782,905,933,945,932,1152,1152,1136,999,2769,3333,2948,359,2984,495,3167,1501,1915,2823,2822,1619
51
+ 0,0,1,1251,3,2932,143,378236,4,3,2,8,222,169,145,0,0,0,1,0,1,1,1,0,0,0,50,0,0,13406,46875,48059,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,784,791,776,782,905,933,944,932,1151,1152,1136,999,2774,3334,2947,359,2985,495,3166,1502,1915,2823,2822,1620
52
+ 0,0,1,1251,3,2933,143,378241,4,3,2,8,222,169,145,0,0,0,1,0,1,1,1,0,0,0,51,0,0,13406,46875,4369,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,784,791,776,782,906,933,944,932,1152,1152,1136,1000,2775,3334,2947,359,2984,494,3166,1501,1914,2823,2822,1619
53
+ 0,0,1,1251,3,2934,143,378246,4,3,2,8,223,170,146,0,0,0,1,0,1,1,1,0,0,0,50,0,0,13406,46875,26214,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,784,791,777,782,905,933,944,932,1152,1152,1137,999,2774,3334,2948,359,2985,495,3167,1501,1913,2823,2822,1619
54
+ 0,0,1,1251,3,2935,143,378251,4,3,2,8,223,170,146,0,0,0,1,0,1,1,1,0,0,0,0,0,0,13406,46875,48059,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,785,791,776,782,905,933,944,932,1151,1152,1136,999,2774,3334,2947,358,2985,494,3167,1502,1913,2823,2822,1620
55
+ 0,0,1,1251,3,2936,143,378256,4,3,2,8,228,169,151,0,0,0,1,0,1,1,1,0,0,0,0,0,0,13406,46875,4369,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,784,791,776,782,905,933,944,932,1152,1152,1136,999,2774,3334,2947,359,2984,494,3166,1500,1913,2822,2821,1609
56
+ 0,0,1,1251,3,2937,143,378261,4,3,2,8,228,169,151,0,0,0,1,0,1,1,1,0,0,0,0,0,0,13406,46875,26214,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,784,791,776,782,905,933,944,932,1152,1152,1136,999,2774,3334,2948,359,2985,495,3167,1502,1913,2823,2822,1620
57
+ 0,0,1,1251,3,2938,143,378266,4,3,2,8,229,170,152,0,0,0,1,0,1,1,1,0,0,0,1,0,0,13406,46875,48059,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,784,791,777,782,906,933,944,933,1152,1152,1138,999,2774,3334,2947,359,2985,494,3167,1500,1913,2822,2822,1620
58
+ 0,0,1,1251,3,2939,143,378271,4,3,2,8,229,170,152,0,0,0,1,0,1,1,1,0,0,0,15,0,0,13406,46875,4369,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,784,791,777,782,906,933,944,932,1151,1152,1136,999,2775,3334,2948,359,2984,495,3168,1502,1913,2823,2822,1619
59
+ 0,0,1,1251,3,2940,143,378276,4,3,2,8,231,169,154,0,0,0,1,0,1,1,1,0,0,0,17,0,0,13406,46875,26214,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,784,791,776,782,905,933,944,932,1152,1152,1136,999,2775,3334,2948,359,2985,494,3166,1500,1913,2823,2824,1619
60
+ 0,0,1,1251,3,2941,143,378281,4,3,2,8,231,169,154,0,0,0,1,0,1,1,1,0,0,0,21,0,0,13406,46875,48059,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,784,791,777,782,905,933,944,932,1152,1152,1136,999,2774,3334,2948,359,2985,494,3168,1502,1913,2823,2822,1620
61
+ 0,0,1,1251,3,2942,143,378286,4,3,2,8,231,169,154,0,0,0,1,0,1,1,1,0,0,0,20,0,0,13406,46875,4369,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,784,791,776,782,906,933,944,932,1151,1152,1136,999,2774,3335,2948,358,2984,495,3167,1503,1913,2823,2822,1619
62
+ 0,0,1,1251,3,2943,143,378291,4,3,2,8,232,170,155,0,0,0,1,0,1,1,1,0,0,0,18,0,0,13406,46875,26214,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,784,791,777,782,906,933,944,932,1152,1152,1138,999,2775,3334,2947,359,2985,494,3167,1501,1913,2822,2822,1620
63
+ 0,0,1,1251,3,2944,143,378296,4,3,2,8,232,170,155,0,0,0,1,0,1,1,1,0,0,0,0,0,0,13406,46875,48059,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,784,791,776,782,906,933,944,932,1152,1152,1137,1000,2774,3334,2948,358,2985,494,3170,1500,1913,2823,2822,1620
64
+ 0,0,1,1251,3,2945,143,378301,4,3,2,8,234,169,157,0,0,0,1,0,1,1,1,0,0,0,0,0,0,13406,46875,4369,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,784,791,776,782,906,933,944,932,1152,1152,1136,1000,2774,3334,2947,359,2985,494,3167,1501,1913,2824,2821,1619
65
+ 0,0,1,1251,3,2946,143,378306,4,3,2,8,234,169,157,0,0,0,1,0,1,1,1,0,0,0,0,0,0,13406,46875,26214,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,784,791,776,782,906,933,944,932,1152,1152,1136,999,2774,3334,2948,359,2985,494,3170,1500,1913,2823,2822,1620
66
+ 0,0,1,1251,3,2947,143,378311,4,3,2,8,237,17,160,0,0,0,1,0,1,1,1,0,0,0,0,0,0,13406,46875,48059,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,784,791,777,782,906,933,944,932,1152,1152,1136,999,2774,3334,2948,360,2985,495,3166,1501,1914,2823,2822,1619
67
+ 0,0,1,1251,3,2948,143,378316,4,3,2,8,238,36,161,0,0,0,1,0,1,1,1,0,0,0,0,0,0,13406,46875,4369,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,784,792,776,782,906,933,944,932,1152,1152,1136,999,2774,3335,2948,359,2985,494,3167,1501,1913,2823,2821,1619
68
+ 0,0,1,1251,3,2949,143,378321,4,3,2,8,238,36,161,0,0,0,1,0,1,1,1,0,0,0,0,0,0,13406,46875,26214,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,784,791,776,782,906,933,944,932,1152,1152,1136,999,2774,3334,2947,358,2984,494,3170,1501,1913,2823,2822,1620
69
+ 0,0,1,1251,3,2950,143,378326,4,3,2,8,243,170,166,0,0,0,1,0,1,1,1,0,0,0,0,0,0,13406,46875,48059,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,785,791,777,782,906,933,944,932,1151,1152,1137,999,2774,3335,2948,358,2990,494,3167,1500,1913,2823,2821,1620
70
+ 0,0,1,1251,3,2951,143,378331,4,3,2,8,243,170,166,0,0,0,1,0,1,1,1,0,0,0,0,0,0,13406,46875,4369,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,785,791,776,782,906,933,944,932,1152,1152,1136,1000,2774,3334,2949,358,2987,495,3171,1500,1912,2823,2822,1619
71
+ 0,0,1,1251,3,2952,143,378336,4,3,2,8,248,169,171,0,0,0,1,0,1,1,1,0,0,0,0,0,0,13406,46875,26214,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,784,791,777,782,906,933,944,932,1152,1152,1136,1000,2775,3334,2949,358,2987,494,3167,1500,1913,2823,2823,1620
72
+ 0,0,1,1251,3,2953,143,378341,4,3,2,8,248,169,171,0,0,0,1,0,1,1,1,0,0,0,0,0,0,13406,46875,48059,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,784,791,777,782,906,933,945,933,1152,1152,1136,1000,2774,3334,2948,358,2987,495,3170,1501,1913,2823,2822,1619
73
+ 0,0,1,1251,3,2954,143,378346,4,3,2,8,248,169,171,0,0,0,1,0,1,1,1,0,0,0,0,0,0,13406,46875,4369,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,784,791,776,782,906,934,944,932,1152,1152,1136,999,2774,3334,2949,358,2987,495,3166,1500,1913,2823,2822,1619
74
+ 0,0,1,1251,3,2955,143,378351,4,3,2,8,248,169,171,0,0,0,1,0,1,1,1,0,0,0,0,0,0,13406,46875,26214,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,784,791,776,782,906,933,944,932,1152,1152,1136,999,2774,3334,2948,357,2987,495,3166,1500,1912,2823,2821,1620
75
+ 0,0,1,1251,3,2956,143,378356,4,3,2,8,248,169,171,0,0,0,1,0,1,1,1,0,0,0,1,0,0,13406,46875,48059,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,784,791,776,782,906,934,944,932,1152,1152,1137,1000,2775,3334,2948,358,2987,495,3167,1500,1913,2822,2822,1620
76
+ 0,0,1,1251,3,2957,143,378361,4,3,2,8,248,169,171,0,0,0,1,0,1,1,1,0,0,0,0,0,0,13406,46875,4369,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,784,791,777,782,906,933,944,932,1152,1152,1136,1000,2774,3334,2949,358,2987,495,3167,1500,1912,2823,2822,1620
77
+ 0,0,1,1251,3,2958,143,378366,4,3,2,8,253,170,176,0,0,0,1,0,1,1,1,0,0,0,0,0,0,13406,46875,26214,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,784,791,777,782,906,934,944,932,1152,1152,1137,1000,2774,3334,2949,358,2987,494,3166,1501,1913,2823,2821,1620
78
+ 0,0,1,1251,3,2959,143,378371,4,3,2,8,253,170,176,0,0,0,1,0,1,1,1,0,0,0,0,0,0,13406,46875,48059,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,784,791,777,782,906,934,944,932,1152,1152,1136,999,2775,3334,2948,358,2988,495,3167,1500,1913,2822,2822,1619
79
+ 0,0,1,1251,3,2960,143,378376,4,3,2,8,2,169,181,0,0,0,1,0,1,1,1,0,0,0,0,0,0,13406,46875,4369,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,784,791,776,783,906,934,944,932,1152,1152,1137,999,2774,3334,2949,358,2987,495,3166,1500,1913,2824,2821,1620
80
+ 0,0,1,1251,3,2961,143,378381,4,3,2,8,2,169,181,0,0,0,1,0,1,1,1,0,0,0,0,0,0,13406,46875,26214,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,784,791,777,782,906,933,944,932,1152,1152,1136,1000,2774,3334,2949,358,2988,495,3166,1501,1913,2823,2821,1619
81
+ 0,0,1,1251,3,2962,143,378386,4,3,2,8,2,169,181,0,0,0,1,0,1,1,1,0,0,0,0,0,0,13406,46875,48059,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,784,791,777,782,906,933,944,932,1151,1152,1137,999,2775,3334,2948,357,2989,496,3167,1501,1912,2823,2822,1620
82
+ 0,0,1,1251,3,2963,143,378391,4,3,2,8,2,169,181,0,0,0,1,0,1,1,1,0,0,0,0,0,0,13406,46875,4369,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,784,791,776,782,906,934,944,932,1152,1152,1136,1000,2774,3334,2948,358,2989,496,3167,1500,1913,2823,2822,1620
83
+ 0,0,1,1251,3,2964,143,378396,4,3,2,8,2,169,181,0,0,0,1,0,1,1,1,0,0,0,0,0,0,13406,46875,26214,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,784,791,777,782,906,933,944,932,1151,1152,1136,1000,2774,3334,2949,357,2989,495,3166,1501,1913,2823,2822,1619
84
+ 0,0,1,1251,3,2965,143,378401,4,3,2,8,2,169,181,0,0,0,1,0,1,1,1,0,0,0,0,0,0,13406,46875,48059,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,784,791,776,782,906,934,944,932,1152,1152,1136,999,2774,3334,2948,358,2989,495,3167,1501,1913,2823,2822,1620
85
+ 0,0,1,1251,3,2966,143,378406,4,3,2,8,7,170,186,0,0,0,1,0,1,1,1,0,0,0,0,0,0,13406,46875,4369,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,784,791,776,782,906,933,944,932,1152,1152,1137,1000,2774,3334,2951,358,2986,494,3167,1501,1913,2823,2822,1619
86
+ 0,0,1,1251,3,2967,143,378411,4,3,2,8,7,170,186,0,0,0,1,0,1,1,1,0,0,0,0,0,0,13406,46875,26214,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,784,791,776,782,906,933,944,932,1151,1152,1137,999,2775,3334,2949,358,2989,494,3167,1501,1912,2823,2822,1620
87
+ 0,0,1,1251,3,2968,143,378416,4,3,2,8,12,169,191,0,0,0,1,0,1,1,1,0,0,0,0,0,0,13406,46875,48059,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,784,791,776,782,906,933,944,932,1151,1152,1137,999,2775,3334,2948,358,2986,495,3167,1500,1914,2825,2821,1619
88
+ 0,0,1,1251,3,2969,143,378421,4,3,2,8,12,169,191,0,0,0,1,0,1,1,1,0,0,0,0,0,0,13406,46875,4369,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,784,791,776,782,906,933,945,932,1152,1152,1137,1000,2774,3334,2949,358,2990,495,3167,1501,1913,2823,2822,1619
File without changes