imap-processing 0.18.0__py3-none-any.whl → 0.19.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of imap-processing might be problematic. Click here for more details.

Files changed (122) hide show
  1. imap_processing/_version.py +2 -2
  2. imap_processing/ancillary/ancillary_dataset_combiner.py +161 -1
  3. imap_processing/cdf/config/imap_codice_global_cdf_attrs.yaml +6 -0
  4. imap_processing/cdf/config/imap_codice_l1a_variable_attrs.yaml +221 -1057
  5. imap_processing/cdf/config/imap_codice_l1b_variable_attrs.yaml +307 -283
  6. imap_processing/cdf/config/imap_codice_l2_variable_attrs.yaml +1044 -203
  7. imap_processing/cdf/config/imap_constant_attrs.yaml +4 -2
  8. imap_processing/cdf/config/imap_enamaps_l2-common_variable_attrs.yaml +11 -0
  9. imap_processing/cdf/config/imap_glows_l1b_variable_attrs.yaml +15 -1
  10. imap_processing/cdf/config/imap_hi_global_cdf_attrs.yaml +5 -0
  11. imap_processing/cdf/config/imap_hit_global_cdf_attrs.yaml +10 -4
  12. imap_processing/cdf/config/imap_idex_l2a_variable_attrs.yaml +33 -4
  13. imap_processing/cdf/config/imap_idex_l2b_variable_attrs.yaml +8 -91
  14. imap_processing/cdf/config/imap_idex_l2c_variable_attrs.yaml +106 -16
  15. imap_processing/cdf/config/imap_lo_global_cdf_attrs.yaml +5 -4
  16. imap_processing/cdf/config/imap_lo_l1a_variable_attrs.yaml +4 -15
  17. imap_processing/cdf/config/imap_lo_l1c_variable_attrs.yaml +189 -98
  18. imap_processing/cdf/config/imap_mag_global_cdf_attrs.yaml +85 -2
  19. imap_processing/cdf/config/imap_mag_l1c_variable_attrs.yaml +24 -1
  20. imap_processing/cdf/config/imap_ultra_global_cdf_attrs.yaml +20 -8
  21. imap_processing/cdf/config/imap_ultra_l1b_variable_attrs.yaml +45 -35
  22. imap_processing/cdf/config/imap_ultra_l1c_variable_attrs.yaml +110 -7
  23. imap_processing/cli.py +138 -93
  24. imap_processing/codice/codice_l0.py +2 -1
  25. imap_processing/codice/codice_l1a.py +167 -69
  26. imap_processing/codice/codice_l1b.py +42 -32
  27. imap_processing/codice/codice_l2.py +215 -9
  28. imap_processing/codice/constants.py +790 -603
  29. imap_processing/codice/data/lo_stepping_values.csv +1 -1
  30. imap_processing/decom.py +1 -4
  31. imap_processing/ena_maps/ena_maps.py +71 -43
  32. imap_processing/ena_maps/utils/corrections.py +291 -0
  33. imap_processing/ena_maps/utils/map_utils.py +20 -4
  34. imap_processing/ena_maps/utils/naming.py +8 -2
  35. imap_processing/glows/ancillary/imap_glows_exclusions-by-instr-team_20250923_v002.dat +10 -0
  36. imap_processing/glows/ancillary/imap_glows_map-of-excluded-regions_20250923_v002.dat +393 -0
  37. imap_processing/glows/ancillary/imap_glows_map-of-uv-sources_20250923_v002.dat +593 -0
  38. imap_processing/glows/ancillary/imap_glows_pipeline-settings_20250923_v002.json +54 -0
  39. imap_processing/glows/ancillary/imap_glows_suspected-transients_20250923_v002.dat +10 -0
  40. imap_processing/glows/l1b/glows_l1b.py +123 -18
  41. imap_processing/glows/l1b/glows_l1b_data.py +358 -47
  42. imap_processing/glows/l2/glows_l2.py +11 -0
  43. imap_processing/hi/hi_l1a.py +124 -3
  44. imap_processing/hi/hi_l1b.py +154 -71
  45. imap_processing/hi/hi_l1c.py +4 -109
  46. imap_processing/hi/hi_l2.py +104 -60
  47. imap_processing/hi/utils.py +262 -8
  48. imap_processing/hit/l0/constants.py +3 -0
  49. imap_processing/hit/l0/decom_hit.py +3 -6
  50. imap_processing/hit/l1a/hit_l1a.py +311 -21
  51. imap_processing/hit/l1b/hit_l1b.py +54 -126
  52. imap_processing/hit/l2/hit_l2.py +6 -6
  53. imap_processing/ialirt/calculate_ingest.py +219 -0
  54. imap_processing/ialirt/constants.py +12 -2
  55. imap_processing/ialirt/generate_coverage.py +15 -2
  56. imap_processing/ialirt/l0/ialirt_spice.py +6 -2
  57. imap_processing/ialirt/l0/parse_mag.py +293 -42
  58. imap_processing/ialirt/l0/process_hit.py +5 -3
  59. imap_processing/ialirt/l0/process_swapi.py +41 -25
  60. imap_processing/ialirt/process_ephemeris.py +70 -14
  61. imap_processing/ialirt/utils/create_xarray.py +1 -1
  62. imap_processing/idex/idex_l0.py +2 -2
  63. imap_processing/idex/idex_l1a.py +2 -3
  64. imap_processing/idex/idex_l1b.py +2 -3
  65. imap_processing/idex/idex_l2a.py +130 -4
  66. imap_processing/idex/idex_l2b.py +158 -143
  67. imap_processing/idex/idex_utils.py +1 -3
  68. imap_processing/lo/ancillary_data/imap_lo_hydrogen-geometric-factor_v001.csv +75 -0
  69. imap_processing/lo/ancillary_data/imap_lo_oxygen-geometric-factor_v001.csv +75 -0
  70. imap_processing/lo/l0/lo_science.py +25 -24
  71. imap_processing/lo/l1b/lo_l1b.py +93 -19
  72. imap_processing/lo/l1c/lo_l1c.py +273 -93
  73. imap_processing/lo/l2/lo_l2.py +949 -135
  74. imap_processing/lo/lo_ancillary.py +55 -0
  75. imap_processing/mag/l1a/mag_l1a.py +1 -0
  76. imap_processing/mag/l1a/mag_l1a_data.py +26 -0
  77. imap_processing/mag/l1b/mag_l1b.py +3 -2
  78. imap_processing/mag/l1c/interpolation_methods.py +14 -15
  79. imap_processing/mag/l1c/mag_l1c.py +23 -6
  80. imap_processing/mag/l1d/mag_l1d.py +57 -14
  81. imap_processing/mag/l1d/mag_l1d_data.py +202 -32
  82. imap_processing/mag/l2/mag_l2.py +2 -0
  83. imap_processing/mag/l2/mag_l2_data.py +14 -5
  84. imap_processing/quality_flags.py +23 -1
  85. imap_processing/spice/geometry.py +89 -39
  86. imap_processing/spice/pointing_frame.py +4 -8
  87. imap_processing/spice/repoint.py +78 -2
  88. imap_processing/spice/spin.py +28 -8
  89. imap_processing/spice/time.py +12 -22
  90. imap_processing/swapi/l1/swapi_l1.py +10 -4
  91. imap_processing/swapi/l2/swapi_l2.py +15 -17
  92. imap_processing/swe/l1b/swe_l1b.py +1 -2
  93. imap_processing/ultra/constants.py +30 -24
  94. imap_processing/ultra/l0/ultra_utils.py +9 -11
  95. imap_processing/ultra/l1a/ultra_l1a.py +1 -2
  96. imap_processing/ultra/l1b/badtimes.py +35 -11
  97. imap_processing/ultra/l1b/de.py +95 -31
  98. imap_processing/ultra/l1b/extendedspin.py +31 -16
  99. imap_processing/ultra/l1b/goodtimes.py +112 -0
  100. imap_processing/ultra/l1b/lookup_utils.py +281 -28
  101. imap_processing/ultra/l1b/quality_flag_filters.py +10 -1
  102. imap_processing/ultra/l1b/ultra_l1b.py +7 -7
  103. imap_processing/ultra/l1b/ultra_l1b_culling.py +169 -7
  104. imap_processing/ultra/l1b/ultra_l1b_extended.py +311 -69
  105. imap_processing/ultra/l1c/helio_pset.py +139 -37
  106. imap_processing/ultra/l1c/l1c_lookup_utils.py +289 -0
  107. imap_processing/ultra/l1c/spacecraft_pset.py +140 -29
  108. imap_processing/ultra/l1c/ultra_l1c.py +33 -24
  109. imap_processing/ultra/l1c/ultra_l1c_culling.py +92 -0
  110. imap_processing/ultra/l1c/ultra_l1c_pset_bins.py +400 -292
  111. imap_processing/ultra/l2/ultra_l2.py +54 -11
  112. imap_processing/ultra/utils/ultra_l1_utils.py +37 -7
  113. imap_processing/utils.py +3 -4
  114. {imap_processing-0.18.0.dist-info → imap_processing-0.19.2.dist-info}/METADATA +2 -2
  115. {imap_processing-0.18.0.dist-info → imap_processing-0.19.2.dist-info}/RECORD +118 -109
  116. imap_processing/idex/idex_l2c.py +0 -84
  117. imap_processing/spice/kernels.py +0 -187
  118. imap_processing/ultra/l1b/cullingmask.py +0 -87
  119. imap_processing/ultra/l1c/histogram.py +0 -36
  120. {imap_processing-0.18.0.dist-info → imap_processing-0.19.2.dist-info}/LICENSE +0 -0
  121. {imap_processing-0.18.0.dist-info → imap_processing-0.19.2.dist-info}/WHEEL +0 -0
  122. {imap_processing-0.18.0.dist-info → imap_processing-0.19.2.dist-info}/entry_points.txt +0 -0
@@ -60,6 +60,7 @@ CODICEAPID_MAPPING = {
60
60
  # Numerical constants
61
61
  SPIN_PERIOD_CONVERSION = 0.00032
62
62
  K_FACTOR = 5.76 # This is used to convert voltages to energies in L2
63
+ HI_ACQUISITION_TIME = 0.59916
63
64
 
64
65
  # CDF variable names used for lo data products
65
66
  LO_COUNTERS_SINGLES_VARIABLE_NAMES = ["apd_singles"]
@@ -129,31 +130,35 @@ HI_IALIRT_VARIABLE_NAMES = ["h"]
129
130
 
130
131
  # CDF variable names used for direct event data products
131
132
  HI_DE_CDF_FIELDS = [
132
- "NumEvents",
133
- "DataQuality",
134
- "SSDEnergy",
135
- "TOF",
136
- "SSD_ID",
137
- "ERGE",
138
- "MultiFlag",
139
- "Type",
140
- "SpinAngle",
141
- "SpinNumber",
133
+ "num_events",
134
+ "data_quality",
135
+ "ssd_energy",
136
+ "tof",
137
+ "ssd_id",
138
+ "gain",
139
+ "multi_flag",
140
+ "type",
141
+ "spin_sector",
142
+ "spin_number",
143
+ ]
144
+ HI_DIRECT_EVENTS_VARIABLE_NAMES = [
145
+ f"p{n}_{field}" for n in range(6) for field in HI_DE_CDF_FIELDS
142
146
  ]
143
- HI_DE_VARIABLE_NAMES = [f"P{n}_{field}" for n in range(6) for field in HI_DE_CDF_FIELDS]
144
147
  LO_DE_CDF_FIELDS = [
145
- "NumEvents",
146
- "DataQuality",
147
- "APDGain",
148
- "APD_ID",
149
- "APDEnergy",
150
- "TOF",
151
- "MultiFlag",
152
- "PHAType",
153
- "SpinAngle",
154
- "EnergyStep",
148
+ "num_events",
149
+ "data_quality",
150
+ "gain",
151
+ "apd_id",
152
+ "apd_energy",
153
+ "tof",
154
+ "multi_flag",
155
+ "type",
156
+ "spin_sector",
157
+ "energy_step",
158
+ ]
159
+ LO_DIRECT_EVENTS_VARIABLE_NAMES = [
160
+ f"p{n}_{field}" for n in range(8) for field in LO_DE_CDF_FIELDS
155
161
  ]
156
- LO_DE_VARIABLE_NAMES = [f"P{n}_{field}" for n in range(8) for field in LO_DE_CDF_FIELDS]
157
162
 
158
163
  # Final I-ALiRT data product fields
159
164
  CODICE_LO_IAL_DATA_FIELDS = [
@@ -168,37 +173,35 @@ CODICE_HI_IAL_DATA_FIELDS = ["h"]
168
173
 
169
174
  # lo- and hi-counters-aggregated data product variables are dynamically
170
175
  # determined based on the number of active counters
171
- # TODO: Try to convince Joey to move to lower case variable names with
172
- # underscores?
173
176
  LO_COUNTERS_AGGREGATED_ACTIVE_VARIABLES = {
174
- "TCR": True,
175
- "DCR": True,
176
- "TOFPlusAPD": False,
177
- "TOFOnly": False,
178
- "PositionPlusAPD": False,
179
- "PositionOnly": False,
180
- "STAorSTBPlusAPD": False,
181
- "STAorSTBOnly": False,
182
- "Reserved1": False,
183
- "Reserved2": False,
184
- "SPOnly": False,
185
- "APDOnly": False,
186
- "LowTOFCutoff": False,
187
- "STA": True,
188
- "STB": True,
189
- "SP": True,
190
- "TotalPositionCount": True,
191
- "InvalidPositionCount": False,
192
- "ASIC1FlagInvalid": False,
193
- "ASIC2FlagInvalid": False,
194
- "ASIC1ChannelInvalid": False,
195
- "ASIC2ChannelInvalid": False,
196
- "TEC4TimeoutTOFNoPos": False,
197
- "TEC4TimeoutPosNoTOF": False,
198
- "TEC4TimeoutNoPosTOF": False,
199
- "TEC5TimeoutTOFNoPos": False,
200
- "TEC5TimeoutPosNoTOF": False,
201
- "TEC5TimeoutNoPosTOF": False,
177
+ "tcr": True,
178
+ "dcr": True,
179
+ "tof_plus_apd": False,
180
+ "tof_only": False,
181
+ "position_plus_apd": False,
182
+ "position_only": False,
183
+ "sta_or_stb_plus_apd": False,
184
+ "sta_or_stb_only": False,
185
+ "reserved1": False,
186
+ "reserved2": False,
187
+ "sp_only": False,
188
+ "apd_only": False,
189
+ "low_tof_cutoff": False,
190
+ "sta": True,
191
+ "stb": True,
192
+ "sp": True,
193
+ "total_position_count": True,
194
+ "invalid_position_count": False,
195
+ "asic1_flag_invalid": False,
196
+ "asic2_flag_invalid": False,
197
+ "asic1_channel_invalid": False,
198
+ "asic2_channel_invalid": False,
199
+ "tec4_timeout_tof_no_pos": False,
200
+ "tec4_timeout_pos_no_tof": False,
201
+ "tec4_timeout_no_pos_tof": False,
202
+ "tec5_timeout_tof_no_pos": False,
203
+ "tec5_timeout_pos_no_tof": False,
204
+ "tec5_timeout_no_pos_tof": False,
202
205
  }
203
206
  LO_COUNTERS_AGGREGATED_VARIABLE_NAMES = [
204
207
  name
@@ -206,22 +209,22 @@ LO_COUNTERS_AGGREGATED_VARIABLE_NAMES = [
206
209
  if is_active
207
210
  ]
208
211
  HI_COUNTERS_AGGREGATED_ACTIVE_VARIABLES = {
209
- "DCR": True,
210
- "STO": True,
211
- "SPO": True,
212
- "Reserved1": False,
213
- "MST": True,
214
- "Reserved2": False,
215
- "Reserved3": False,
216
- "Reserved4": False,
217
- "Reserved5": False,
218
- "LowTOFCutoff": False,
219
- "Reserved6": False,
220
- "Reserved7": False,
221
- "ASIC1FlagInvalid": True,
222
- "ASIC2FlagInvalid": True,
223
- "ASIC1ChannelInvalid": False,
224
- "ASIC2ChannelInvalid": False,
212
+ "dcr": True,
213
+ "sto": True,
214
+ "spo": True,
215
+ "reserved1": False,
216
+ "mst": True,
217
+ "reserved2": False,
218
+ "reserved3": False,
219
+ "reserved4": False,
220
+ "reserved5": False,
221
+ "low_tof_cutoff": False,
222
+ "reserved6": False,
223
+ "reserved7": False,
224
+ "asic1_flag_invalid": True,
225
+ "asic2_flag_invalid": True,
226
+ "asic1_channel_invalid": False,
227
+ "asic_2_channel_invalid": False,
225
228
  }
226
229
  HI_COUNTERS_AGGREGATED_VARIABLE_NAMES = [
227
230
  name
@@ -229,6 +232,14 @@ HI_COUNTERS_AGGREGATED_VARIABLE_NAMES = [
229
232
  if is_active
230
233
  ]
231
234
 
235
+ # List of data products that require application of despinning algorithm
236
+ REQUIRES_DESPINNING = [
237
+ "imap_codice_l1a_lo-sw-angular",
238
+ "imap_codice_l1a_lo-nsw-angular",
239
+ "imap_codice_l1a_lo-sw-priority",
240
+ "imap_codice_l1a_lo-nsw-priority",
241
+ ]
242
+
232
243
  # Energy tables for CoDICE-Hi data products. These values represent the edges
233
244
  # of the bins, and are used in the CoDICE L1a pipeline to compute the centers
234
245
  # and deltas of the bins, which then get stored in the CDF files for future use.
@@ -426,7 +437,7 @@ DATA_PRODUCT_CONFIGURATIONS: dict[CODICEAPID | int, dict] = {
426
437
  "instrument": "hi",
427
438
  "num_counters": len(
428
439
  HI_COUNTERS_AGGREGATED_VARIABLE_NAMES
429
- ), # The number of counters depends on the number of active counters
440
+ ), # The number of counters depends on the number of *active* counters
430
441
  "support_variables": ["data_quality", "spin_period"],
431
442
  "variable_names": HI_COUNTERS_AGGREGATED_VARIABLE_NAMES,
432
443
  },
@@ -515,7 +526,7 @@ DATA_PRODUCT_CONFIGURATIONS: dict[CODICEAPID | int, dict] = {
515
526
  "instrument": "lo",
516
527
  "num_counters": len(
517
528
  LO_COUNTERS_AGGREGATED_VARIABLE_NAMES
518
- ), # The number of counters depends on the number of active counters
529
+ ), # The number of counters depends on the number of *active* counters
519
530
  "support_variables": [
520
531
  "energy_table",
521
532
  "acquisition_time_per_step",
@@ -677,9 +688,9 @@ L1B_DATA_PRODUCT_CONFIGURATIONS: dict[str, dict] = {
677
688
  "num_spin_sectors": 24,
678
689
  "num_spins": 4,
679
690
  },
680
- "hi-priority": { # TODO: Ask Joey to define these
681
- "num_spin_sectors": 1,
682
- "num_spins": 1,
691
+ "hi-priority": {
692
+ "num_spin_sectors": 24,
693
+ "num_spins": 16,
683
694
  },
684
695
  "hi-sectored": {
685
696
  "num_spin_sectors": 2,
@@ -720,42 +731,42 @@ DE_DATA_PRODUCT_CONFIGURATIONS: dict[Any, dict[str, Any]] = {
720
731
  CODICEAPID.COD_HI_PHA: {
721
732
  "num_priorities": 6,
722
733
  "bit_structure": {
723
- "SSDEnergy": {
734
+ "ssd_energy": {
724
735
  "bit_length": 11,
725
736
  "dtype": np.uint16,
726
737
  "fillval": np.iinfo(np.uint16).max,
727
738
  },
728
- "TOF": {
739
+ "tof": {
729
740
  "bit_length": 10,
730
741
  "dtype": np.uint16,
731
742
  "fillval": np.iinfo(np.uint16).max,
732
743
  },
733
- "SSD_ID": {
744
+ "ssd_id": {
734
745
  "bit_length": 4,
735
746
  "dtype": np.uint8,
736
747
  "fillval": np.iinfo(np.uint8).max,
737
748
  },
738
- "ERGE": {
749
+ "gain": {
739
750
  "bit_length": 2,
740
751
  "dtype": np.uint8,
741
752
  "fillval": np.iinfo(np.uint8).max,
742
753
  },
743
- "MultiFlag": {
754
+ "multi_flag": {
744
755
  "bit_length": 1,
745
756
  "dtype": np.uint8,
746
757
  "fillval": np.iinfo(np.uint8).max,
747
758
  },
748
- "Type": {
759
+ "type": {
749
760
  "bit_length": 2,
750
761
  "dtype": np.uint8,
751
762
  "fillval": np.iinfo(np.uint8).max,
752
763
  },
753
- "SpinAngle": {
764
+ "spin_sector": {
754
765
  "bit_length": 5,
755
766
  "dtype": np.uint8,
756
767
  "fillval": np.iinfo(np.uint8).max,
757
768
  },
758
- "SpinNumber": {
769
+ "spin_number": {
759
770
  "bit_length": 4,
760
771
  "dtype": np.uint8,
761
772
  "fillval": np.iinfo(np.uint8).max,
@@ -776,47 +787,47 @@ DE_DATA_PRODUCT_CONFIGURATIONS: dict[Any, dict[str, Any]] = {
776
787
  CODICEAPID.COD_LO_PHA: {
777
788
  "num_priorities": 8,
778
789
  "bit_structure": {
779
- "APDGain": {
790
+ "gain": {
780
791
  "bit_length": 1,
781
792
  "dtype": np.uint8,
782
793
  "fillval": np.iinfo(np.uint8).max,
783
794
  },
784
- "APD_ID": {
795
+ "apd_id": {
785
796
  "bit_length": 5,
786
797
  "dtype": np.uint8,
787
798
  "fillval": np.iinfo(np.uint8).max,
788
799
  },
789
- "Position": {
800
+ "position": {
790
801
  "bit_length": 5,
791
802
  "dtype": np.uint8,
792
803
  "fillval": np.iinfo(np.uint8).max,
793
804
  },
794
- "APDEnergy": {
805
+ "apd_energy": {
795
806
  "bit_length": 9,
796
807
  "dtype": np.uint16,
797
808
  "fillval": np.iinfo(np.uint16).max,
798
809
  },
799
- "TOF": {
810
+ "tof": {
800
811
  "bit_length": 10,
801
812
  "dtype": np.uint16,
802
813
  "fillval": np.iinfo(np.uint16).max,
803
814
  },
804
- "MultiFlag": {
815
+ "multi_flag": {
805
816
  "bit_length": 1,
806
817
  "dtype": np.uint8,
807
818
  "fillval": np.iinfo(np.uint8).max,
808
819
  },
809
- "PHAType": {
820
+ "type": {
810
821
  "bit_length": 2,
811
822
  "dtype": np.uint8,
812
823
  "fillval": np.iinfo(np.uint8).max,
813
824
  },
814
- "SpinAngle": {
825
+ "spin_sector": {
815
826
  "bit_length": 5,
816
827
  "dtype": np.uint8,
817
828
  "fillval": np.iinfo(np.uint8).max,
818
829
  },
819
- "EnergyStep": {
830
+ "energy_step": {
820
831
  "bit_length": 7,
821
832
  "dtype": np.uint8,
822
833
  "fillval": np.iinfo(np.uint8).max,
@@ -837,7 +848,7 @@ DE_DATA_PRODUCT_CONFIGURATIONS: dict[Any, dict[str, Any]] = {
837
848
  }
838
849
 
839
850
  # Define the packet fields needed to be stored in segmented data and their
840
- # corresponding bit lengths for direct event data products
851
+ # corresponding bit lengths for I-ALiRT data products
841
852
  IAL_BIT_STRUCTURE = {
842
853
  "SHCOARSE": 32,
843
854
  "PACKET_VERSION": 16,
@@ -1508,529 +1519,705 @@ LOSSY_B_TABLE = {
1508
1519
  255: 2151415807,
1509
1520
  }
1510
1521
 
1522
+ # Lookup table for CoDICE-Lo despinning pixel orientations
1523
+ # See section 9.3.4 of the algorithm document for further information
1524
+ PIXEL_ORIENTATIONS = {
1525
+ 0: "A",
1526
+ 1: "B",
1527
+ 2: "A",
1528
+ 3: "B",
1529
+ 4: "A",
1530
+ 5: "A",
1531
+ 6: "B",
1532
+ 7: "B",
1533
+ 8: "A",
1534
+ 9: "A",
1535
+ 10: "B",
1536
+ 11: "B",
1537
+ 12: "A",
1538
+ 13: "A",
1539
+ 14: "A",
1540
+ 15: "B",
1541
+ 16: "B",
1542
+ 17: "B",
1543
+ 18: "A",
1544
+ 19: "A",
1545
+ 20: "A",
1546
+ 21: "B",
1547
+ 22: "B",
1548
+ 23: "B",
1549
+ 24: "A",
1550
+ 25: "A",
1551
+ 26: "A",
1552
+ 27: "A",
1553
+ 28: "B",
1554
+ 29: "B",
1555
+ 30: "B",
1556
+ 31: "B",
1557
+ 32: "A",
1558
+ 33: "A",
1559
+ 34: "A",
1560
+ 35: "A",
1561
+ 36: "B",
1562
+ 37: "B",
1563
+ 38: "B",
1564
+ 39: "B",
1565
+ 40: "A",
1566
+ 41: "A",
1567
+ 42: "A",
1568
+ 43: "A",
1569
+ 44: "A",
1570
+ 45: "B",
1571
+ 46: "B",
1572
+ 47: "B",
1573
+ 48: "B",
1574
+ 49: "B",
1575
+ 50: "A",
1576
+ 51: "A",
1577
+ 52: "A",
1578
+ 53: "A",
1579
+ 54: "A",
1580
+ 55: "B",
1581
+ 56: "B",
1582
+ 57: "B",
1583
+ 58: "B",
1584
+ 59: "B",
1585
+ 60: "A",
1586
+ 61: "A",
1587
+ 62: "A",
1588
+ 63: "A",
1589
+ 64: "A",
1590
+ 65: "B",
1591
+ 66: "B",
1592
+ 67: "B",
1593
+ 68: "B",
1594
+ 69: "B",
1595
+ 70: "A",
1596
+ 71: "A",
1597
+ 72: "A",
1598
+ 73: "A",
1599
+ 74: "A",
1600
+ 75: "B",
1601
+ 76: "B",
1602
+ 77: "B",
1603
+ 78: "B",
1604
+ 79: "B",
1605
+ 80: "A",
1606
+ 81: "A",
1607
+ 82: "A",
1608
+ 83: "A",
1609
+ 84: "A",
1610
+ 85: "A",
1611
+ 86: "B",
1612
+ 87: "B",
1613
+ 88: "B",
1614
+ 89: "B",
1615
+ 90: "B",
1616
+ 91: "B",
1617
+ 92: "A",
1618
+ 93: "A",
1619
+ 94: "A",
1620
+ 95: "A",
1621
+ 96: "A",
1622
+ 97: "A",
1623
+ 98: "B",
1624
+ 99: "B",
1625
+ 100: "B",
1626
+ 101: "B",
1627
+ 102: "B",
1628
+ 103: "B",
1629
+ 104: "A",
1630
+ 105: "A",
1631
+ 106: "A",
1632
+ 107: "A",
1633
+ 108: "A",
1634
+ 109: "A",
1635
+ 110: "B",
1636
+ 111: "B",
1637
+ 112: "B",
1638
+ 113: "B",
1639
+ 114: "B",
1640
+ 115: "B",
1641
+ 116: "A",
1642
+ 117: "A",
1643
+ 118: "A",
1644
+ 119: "A",
1645
+ 120: "A",
1646
+ 121: "A",
1647
+ 122: "B",
1648
+ 123: "B",
1649
+ 124: "B",
1650
+ 125: "B",
1651
+ 126: "B",
1652
+ 127: "B",
1653
+ }
1654
+
1511
1655
  # Derived acquisition times that get stored in CDF data variables in L1a
1512
1656
  # processing. These are taken from the "Acq Time" column in the "Lo Stepping"
1513
1657
  # tab of the "*-SCI-LUT-*.xml" spreadsheet that largely defines CoDICE
1514
1658
  # processing.
1659
+ # TODO: Do away with this lookup table and instead calculate the acquisition
1660
+ # times. See GitHub issue #1945.
1515
1661
  ACQUISITION_TIMES = {
1516
1662
  0: [
1517
- 578.7083,
1518
- 578.7083,
1519
- 578.7083,
1520
- 578.7083,
1521
- 289.35416,
1522
- 289.35416,
1523
- 289.35416,
1524
- 289.35416,
1525
- 289.35416,
1526
- 289.35416,
1527
- 289.35416,
1528
- 289.35416,
1529
- 192.90277,
1530
- 192.90277,
1531
- 192.90277,
1532
- 192.90277,
1533
- 192.90277,
1534
- 192.90277,
1535
- 192.90277,
1536
- 192.90277,
1537
- 192.90277,
1538
- 192.90277,
1539
- 192.90277,
1540
- 192.90277,
1541
- 144.67708,
1542
- 144.67708,
1543
- 144.67708,
1544
- 144.67708,
1545
- 144.67708,
1546
- 144.67708,
1547
- 144.67708,
1548
- 144.67708,
1549
- 144.67708,
1550
- 144.67708,
1551
- 144.67708,
1552
- 144.67708,
1553
- 144.67708,
1554
- 144.67708,
1555
- 144.67708,
1556
- 144.67708,
1557
- 115.74167,
1558
- 115.74167,
1559
- 115.74167,
1560
- 115.74167,
1561
- 115.74167,
1562
- 115.74167,
1563
- 115.74167,
1564
- 115.74167,
1565
- 115.74167,
1566
- 115.74167,
1567
- 115.74167,
1568
- 115.74167,
1569
- 115.74167,
1570
- 115.74167,
1571
- 115.74167,
1572
- 115.74167,
1573
- 115.74167,
1574
- 115.74167,
1575
- 115.74167,
1576
- 115.74167,
1577
- 115.74167,
1578
- 115.74167,
1579
- 115.74167,
1580
- 115.74167,
1581
- 115.74167,
1582
- 115.74167,
1583
- 115.74167,
1584
- 115.74167,
1585
- 115.74167,
1586
- 115.74167,
1587
- 115.74167,
1588
- 115.74167,
1589
- 115.74167,
1590
- 115.74167,
1591
- 115.74167,
1592
- 115.74167,
1593
- 115.74167,
1594
- 115.74167,
1595
- 115.74167,
1596
- 115.74167,
1597
- 95.69444,
1598
- 95.69444,
1599
- 95.69444,
1600
- 95.69444,
1601
- 95.69444,
1602
- 95.69444,
1603
- 95.69444,
1604
- 95.69444,
1605
- 95.69444,
1606
- 95.69444,
1607
- 95.69444,
1608
- 95.69444,
1609
- 95.69444,
1610
- 95.69444,
1611
- 95.69444,
1612
- 95.69444,
1613
- 95.69444,
1614
- 95.69444,
1615
- 95.69444,
1616
- 95.69444,
1617
- 95.69444,
1618
- 95.69444,
1619
- 95.69444,
1620
- 95.69444,
1621
- 95.69444,
1622
- 95.69444,
1623
- 95.69444,
1624
- 95.69444,
1625
- 95.69444,
1626
- 95.69444,
1627
- 95.69444,
1628
- 95.69444,
1629
- 95.69444,
1630
- 95.69444,
1631
- 95.69444,
1632
- 95.69444,
1633
- 95.69444,
1634
- 95.69444,
1635
- 95.69444,
1636
- 95.69444,
1637
- 95.69444,
1638
- 95.69444,
1639
- 95.69444,
1640
- 95.69444,
1641
- 95.69444,
1642
- 95.69444,
1643
- 95.69444,
1644
- 95.69444,
1663
+ 578.70833333,
1664
+ 578.70833333,
1665
+ 578.70833333,
1666
+ 578.70833333,
1667
+ 289.35416667,
1668
+ 289.35416667,
1669
+ 289.35416667,
1670
+ 289.35416667,
1671
+ 289.35416667,
1672
+ 289.35416667,
1673
+ 289.35416667,
1674
+ 289.35416667,
1675
+ 192.90277778,
1676
+ 192.90277778,
1677
+ 192.90277778,
1678
+ 192.90277778,
1679
+ 192.90277778,
1680
+ 192.90277778,
1681
+ 192.90277778,
1682
+ 192.90277778,
1683
+ 192.90277778,
1684
+ 192.90277778,
1685
+ 192.90277778,
1686
+ 192.90277778,
1687
+ 144.67708333,
1688
+ 144.67708333,
1689
+ 144.67708333,
1690
+ 144.67708333,
1691
+ 144.67708333,
1692
+ 144.67708333,
1693
+ 144.67708333,
1694
+ 144.67708333,
1695
+ 144.67708333,
1696
+ 144.67708333,
1697
+ 144.67708333,
1698
+ 144.67708333,
1699
+ 144.67708333,
1700
+ 144.67708333,
1701
+ 144.67708333,
1702
+ 144.67708333,
1703
+ 115.74166667,
1704
+ 115.74166667,
1705
+ 115.74166667,
1706
+ 115.74166667,
1707
+ 115.74166667,
1708
+ 115.74166667,
1709
+ 115.74166667,
1710
+ 115.74166667,
1711
+ 115.74166667,
1712
+ 115.74166667,
1713
+ 115.74166667,
1714
+ 115.74166667,
1715
+ 115.74166667,
1716
+ 115.74166667,
1717
+ 115.74166667,
1718
+ 115.74166667,
1719
+ 115.74166667,
1720
+ 115.74166667,
1721
+ 115.74166667,
1722
+ 115.74166667,
1723
+ 115.74166667,
1724
+ 115.74166667,
1725
+ 115.74166667,
1726
+ 115.74166667,
1727
+ 115.74166667,
1728
+ 115.74166667,
1729
+ 115.74166667,
1730
+ 115.74166667,
1731
+ 115.74166667,
1732
+ 115.74166667,
1733
+ 115.74166667,
1734
+ 115.74166667,
1735
+ 115.74166667,
1736
+ 115.74166667,
1737
+ 115.74166667,
1738
+ 115.74166667,
1739
+ 115.74166667,
1740
+ 115.74166667,
1741
+ 115.74166667,
1742
+ 115.74166667,
1743
+ 96.45138889,
1744
+ 96.45138889,
1745
+ 96.45138889,
1746
+ 96.45138889,
1747
+ 96.45138889,
1748
+ 96.45138889,
1749
+ 96.45138889,
1750
+ 96.45138889,
1751
+ 96.45138889,
1752
+ 96.45138889,
1753
+ 96.45138889,
1754
+ 96.45138889,
1755
+ 96.45138889,
1756
+ 96.45138889,
1757
+ 96.45138889,
1758
+ 96.45138889,
1759
+ 96.45138889,
1760
+ 96.45138889,
1761
+ 96.45138889,
1762
+ 96.45138889,
1763
+ 96.45138889,
1764
+ 96.45138889,
1765
+ 96.45138889,
1766
+ 96.45138889,
1767
+ 96.45138889,
1768
+ 96.45138889,
1769
+ 96.45138889,
1770
+ 96.45138889,
1771
+ 96.45138889,
1772
+ 96.45138889,
1773
+ 96.45138889,
1774
+ 96.45138889,
1775
+ 96.45138889,
1776
+ 96.45138889,
1777
+ 96.45138889,
1778
+ 96.45138889,
1779
+ 96.45138889,
1780
+ 96.45138889,
1781
+ 96.45138889,
1782
+ 96.45138889,
1783
+ 96.45138889,
1784
+ 96.45138889,
1785
+ 96.45138889,
1786
+ 96.45138889,
1787
+ 96.45138889,
1788
+ 96.45138889,
1789
+ 96.45138889,
1790
+ 96.45138889,
1645
1791
  ],
1646
1792
  1: [
1647
- 578.7083,
1648
- 578.7083,
1649
- 578.7083,
1650
- 578.7083,
1651
- 289.35416,
1652
- 289.35416,
1653
- 289.35416,
1654
- 289.35416,
1655
- 289.35416,
1656
- 289.35416,
1657
- 289.35416,
1658
- 289.35416,
1659
- 192.90277,
1660
- 192.90277,
1661
- 192.90277,
1662
- 192.90277,
1663
- 192.90277,
1664
- 192.90277,
1665
- 192.90277,
1666
- 192.90277,
1667
- 192.90277,
1668
- 192.90277,
1669
- 192.90277,
1670
- 192.90277,
1671
- 144.67708,
1672
- 144.67708,
1673
- 144.67708,
1674
- 144.67708,
1675
- 144.67708,
1676
- 144.67708,
1677
- 144.67708,
1678
- 144.67708,
1679
- 144.67708,
1680
- 144.67708,
1681
- 144.67708,
1682
- 144.67708,
1683
- 144.67708,
1684
- 144.67708,
1685
- 144.67708,
1686
- 144.67708,
1687
- 115.74167,
1688
- 115.74167,
1689
- 115.74167,
1690
- 115.74167,
1691
- 115.74167,
1692
- 115.74167,
1693
- 115.74167,
1694
- 115.74167,
1695
- 115.74167,
1696
- 115.74167,
1697
- 115.74167,
1698
- 115.74167,
1699
- 115.74167,
1700
- 115.74167,
1701
- 115.74167,
1702
- 115.74167,
1703
- 115.74167,
1704
- 115.74167,
1705
- 115.74167,
1706
- 115.74167,
1707
- 115.74167,
1708
- 115.74167,
1709
- 115.74167,
1710
- 115.74167,
1711
- 115.74167,
1712
- 115.74167,
1713
- 115.74167,
1714
- 115.74167,
1715
- 115.74167,
1716
- 115.74167,
1717
- 115.74167,
1718
- 115.74167,
1719
- 115.74167,
1720
- 115.74167,
1721
- 115.74167,
1722
- 115.74167,
1723
- 115.74167,
1724
- 115.74167,
1725
- 115.74167,
1726
- 115.74167,
1727
- 95.69444,
1728
- 95.69444,
1729
- 95.69444,
1730
- 95.69444,
1731
- 95.69444,
1732
- 95.69444,
1733
- 95.69444,
1734
- 95.69444,
1735
- 95.69444,
1736
- 95.69444,
1737
- 95.69444,
1738
- 95.69444,
1739
- 95.69444,
1740
- 95.69444,
1741
- 95.69444,
1742
- 95.69444,
1743
- 95.69444,
1744
- 95.69444,
1745
- 95.69444,
1746
- 95.69444,
1747
- 95.69444,
1748
- 95.69444,
1749
- 95.69444,
1750
- 95.69444,
1751
- 95.69444,
1752
- 95.69444,
1753
- 95.69444,
1754
- 95.69444,
1755
- 95.69444,
1756
- 95.69444,
1757
- 95.69444,
1758
- 95.69444,
1759
- 95.69444,
1760
- 95.69444,
1761
- 95.69444,
1762
- 95.69444,
1763
- 95.69444,
1764
- 95.69444,
1765
- 95.69444,
1766
- 95.69444,
1767
- 95.69444,
1768
- 95.69444,
1769
- 95.69444,
1770
- 95.69444,
1771
- 95.69444,
1772
- 95.69444,
1773
- 95.69444,
1774
- 95.69444,
1793
+ 578.70833333,
1794
+ 578.70833333,
1795
+ 578.70833333,
1796
+ 578.70833333,
1797
+ 289.35416667,
1798
+ 289.35416667,
1799
+ 289.35416667,
1800
+ 289.35416667,
1801
+ 289.35416667,
1802
+ 289.35416667,
1803
+ 289.35416667,
1804
+ 289.35416667,
1805
+ 192.90277778,
1806
+ 192.90277778,
1807
+ 192.90277778,
1808
+ 192.90277778,
1809
+ 192.90277778,
1810
+ 192.90277778,
1811
+ 192.90277778,
1812
+ 192.90277778,
1813
+ 192.90277778,
1814
+ 192.90277778,
1815
+ 192.90277778,
1816
+ 192.90277778,
1817
+ 144.67708333,
1818
+ 144.67708333,
1819
+ 144.67708333,
1820
+ 144.67708333,
1821
+ 144.67708333,
1822
+ 144.67708333,
1823
+ 144.67708333,
1824
+ 144.67708333,
1825
+ 144.67708333,
1826
+ 144.67708333,
1827
+ 144.67708333,
1828
+ 144.67708333,
1829
+ 144.67708333,
1830
+ 144.67708333,
1831
+ 144.67708333,
1832
+ 144.67708333,
1833
+ 115.74166667,
1834
+ 115.74166667,
1835
+ 115.74166667,
1836
+ 115.74166667,
1837
+ 115.74166667,
1838
+ 115.74166667,
1839
+ 115.74166667,
1840
+ 115.74166667,
1841
+ 115.74166667,
1842
+ 115.74166667,
1843
+ 115.74166667,
1844
+ 115.74166667,
1845
+ 115.74166667,
1846
+ 115.74166667,
1847
+ 115.74166667,
1848
+ 115.74166667,
1849
+ 115.74166667,
1850
+ 115.74166667,
1851
+ 115.74166667,
1852
+ 115.74166667,
1853
+ 115.74166667,
1854
+ 115.74166667,
1855
+ 115.74166667,
1856
+ 115.74166667,
1857
+ 115.74166667,
1858
+ 115.74166667,
1859
+ 115.74166667,
1860
+ 115.74166667,
1861
+ 115.74166667,
1862
+ 115.74166667,
1863
+ 115.74166667,
1864
+ 115.74166667,
1865
+ 115.74166667,
1866
+ 115.74166667,
1867
+ 115.74166667,
1868
+ 115.74166667,
1869
+ 115.74166667,
1870
+ 115.74166667,
1871
+ 115.74166667,
1872
+ 115.74166667,
1873
+ 96.45138889,
1874
+ 96.45138889,
1875
+ 96.45138889,
1876
+ 96.45138889,
1877
+ 96.45138889,
1878
+ 96.45138889,
1879
+ 96.45138889,
1880
+ 96.45138889,
1881
+ 96.45138889,
1882
+ 96.45138889,
1883
+ 96.45138889,
1884
+ 96.45138889,
1885
+ 96.45138889,
1886
+ 96.45138889,
1887
+ 96.45138889,
1888
+ 96.45138889,
1889
+ 96.45138889,
1890
+ 96.45138889,
1891
+ 96.45138889,
1892
+ 96.45138889,
1893
+ 96.45138889,
1894
+ 96.45138889,
1895
+ 96.45138889,
1896
+ 96.45138889,
1897
+ 96.45138889,
1898
+ 96.45138889,
1899
+ 96.45138889,
1900
+ 96.45138889,
1901
+ 96.45138889,
1902
+ 96.45138889,
1903
+ 96.45138889,
1904
+ 96.45138889,
1905
+ 96.45138889,
1906
+ 96.45138889,
1907
+ 96.45138889,
1908
+ 96.45138889,
1909
+ 96.45138889,
1910
+ 96.45138889,
1911
+ 96.45138889,
1912
+ 96.45138889,
1913
+ 96.45138889,
1914
+ 96.45138889,
1915
+ 96.45138889,
1916
+ 96.45138889,
1917
+ 96.45138889,
1918
+ 96.45138889,
1919
+ 96.45138889,
1920
+ 96.45138889,
1775
1921
  ],
1776
1922
  2: [
1777
- 578.7083,
1778
- 578.7083,
1779
- 578.7083,
1780
- 578.7083,
1781
- 289.35416,
1782
- 289.35416,
1783
- 289.35416,
1784
- 289.35416,
1785
- 289.35416,
1786
- 289.35416,
1787
- 289.35416,
1788
- 289.35416,
1789
- 192.90277,
1790
- 192.90277,
1791
- 192.90277,
1792
- 192.90277,
1793
- 192.90277,
1794
- 192.90277,
1795
- 192.90277,
1796
- 192.90277,
1797
- 192.90277,
1798
- 192.90277,
1799
- 192.90277,
1800
- 192.90277,
1801
- 144.67708,
1802
- 144.67708,
1803
- 144.67708,
1804
- 144.67708,
1805
- 144.67708,
1806
- 144.67708,
1807
- 144.67708,
1808
- 144.67708,
1809
- 144.67708,
1810
- 144.67708,
1811
- 144.67708,
1812
- 144.67708,
1813
- 144.67708,
1814
- 144.67708,
1815
- 144.67708,
1816
- 144.67708,
1817
- 115.74167,
1818
- 115.74167,
1819
- 115.74167,
1820
- 115.74167,
1821
- 115.74167,
1822
- 115.74167,
1823
- 115.74167,
1824
- 115.74167,
1825
- 115.74167,
1826
- 115.74167,
1827
- 115.74167,
1828
- 115.74167,
1829
- 115.74167,
1830
- 115.74167,
1831
- 115.74167,
1832
- 115.74167,
1833
- 115.74167,
1834
- 115.74167,
1835
- 115.74167,
1836
- 115.74167,
1837
- 115.74167,
1838
- 115.74167,
1839
- 115.74167,
1840
- 115.74167,
1841
- 115.74167,
1842
- 115.74167,
1843
- 115.74167,
1844
- 115.74167,
1845
- 115.74167,
1846
- 115.74167,
1847
- 115.74167,
1848
- 115.74167,
1849
- 115.74167,
1850
- 115.74167,
1851
- 115.74167,
1852
- 115.74167,
1853
- 115.74167,
1854
- 115.74167,
1855
- 115.74167,
1856
- 115.74167,
1857
- 95.69444,
1858
- 95.69444,
1859
- 95.69444,
1860
- 95.69444,
1861
- 95.69444,
1862
- 95.69444,
1863
- 95.69444,
1864
- 95.69444,
1865
- 95.69444,
1866
- 95.69444,
1867
- 95.69444,
1868
- 95.69444,
1869
- 95.69444,
1870
- 95.69444,
1871
- 95.69444,
1872
- 95.69444,
1873
- 95.69444,
1874
- 95.69444,
1875
- 95.69444,
1876
- 95.69444,
1877
- 95.69444,
1878
- 95.69444,
1879
- 95.69444,
1880
- 95.69444,
1881
- 95.69444,
1882
- 95.69444,
1883
- 95.69444,
1884
- 95.69444,
1885
- 95.69444,
1886
- 95.69444,
1887
- 95.69444,
1888
- 95.69444,
1889
- 95.69444,
1890
- 95.69444,
1891
- 95.69444,
1892
- 95.69444,
1893
- 95.69444,
1894
- 95.69444,
1895
- 95.69444,
1896
- 95.69444,
1897
- 95.69444,
1898
- 95.69444,
1899
- 95.69444,
1900
- 95.69444,
1901
- 95.69444,
1902
- 95.69444,
1903
- 95.69444,
1904
- 95.69444,
1923
+ 578.70833333,
1924
+ 578.70833333,
1925
+ 578.70833333,
1926
+ 578.70833333,
1927
+ 289.35416667,
1928
+ 289.35416667,
1929
+ 289.35416667,
1930
+ 289.35416667,
1931
+ 289.35416667,
1932
+ 289.35416667,
1933
+ 289.35416667,
1934
+ 289.35416667,
1935
+ 192.90277778,
1936
+ 192.90277778,
1937
+ 192.90277778,
1938
+ 192.90277778,
1939
+ 192.90277778,
1940
+ 192.90277778,
1941
+ 192.90277778,
1942
+ 192.90277778,
1943
+ 192.90277778,
1944
+ 192.90277778,
1945
+ 192.90277778,
1946
+ 192.90277778,
1947
+ 144.67708333,
1948
+ 144.67708333,
1949
+ 144.67708333,
1950
+ 144.67708333,
1951
+ 144.67708333,
1952
+ 144.67708333,
1953
+ 144.67708333,
1954
+ 144.67708333,
1955
+ 144.67708333,
1956
+ 144.67708333,
1957
+ 144.67708333,
1958
+ 144.67708333,
1959
+ 144.67708333,
1960
+ 144.67708333,
1961
+ 144.67708333,
1962
+ 144.67708333,
1963
+ 115.74166667,
1964
+ 115.74166667,
1965
+ 115.74166667,
1966
+ 115.74166667,
1967
+ 115.74166667,
1968
+ 115.74166667,
1969
+ 115.74166667,
1970
+ 115.74166667,
1971
+ 115.74166667,
1972
+ 115.74166667,
1973
+ 115.74166667,
1974
+ 115.74166667,
1975
+ 115.74166667,
1976
+ 115.74166667,
1977
+ 115.74166667,
1978
+ 115.74166667,
1979
+ 115.74166667,
1980
+ 115.74166667,
1981
+ 115.74166667,
1982
+ 115.74166667,
1983
+ 115.74166667,
1984
+ 115.74166667,
1985
+ 115.74166667,
1986
+ 115.74166667,
1987
+ 115.74166667,
1988
+ 115.74166667,
1989
+ 115.74166667,
1990
+ 115.74166667,
1991
+ 115.74166667,
1992
+ 115.74166667,
1993
+ 115.74166667,
1994
+ 115.74166667,
1995
+ 115.74166667,
1996
+ 115.74166667,
1997
+ 115.74166667,
1998
+ 115.74166667,
1999
+ 115.74166667,
2000
+ 115.74166667,
2001
+ 115.74166667,
2002
+ 115.74166667,
2003
+ 96.45138889,
2004
+ 96.45138889,
2005
+ 96.45138889,
2006
+ 96.45138889,
2007
+ 96.45138889,
2008
+ 96.45138889,
2009
+ 96.45138889,
2010
+ 96.45138889,
2011
+ 96.45138889,
2012
+ 96.45138889,
2013
+ 96.45138889,
2014
+ 96.45138889,
2015
+ 96.45138889,
2016
+ 96.45138889,
2017
+ 96.45138889,
2018
+ 96.45138889,
2019
+ 96.45138889,
2020
+ 96.45138889,
2021
+ 96.45138889,
2022
+ 96.45138889,
2023
+ 96.45138889,
2024
+ 96.45138889,
2025
+ 96.45138889,
2026
+ 96.45138889,
2027
+ 96.45138889,
2028
+ 96.45138889,
2029
+ 96.45138889,
2030
+ 96.45138889,
2031
+ 96.45138889,
2032
+ 96.45138889,
2033
+ 96.45138889,
2034
+ 96.45138889,
2035
+ 96.45138889,
2036
+ 96.45138889,
2037
+ 96.45138889,
2038
+ 96.45138889,
2039
+ 96.45138889,
2040
+ 96.45138889,
2041
+ 96.45138889,
2042
+ 96.45138889,
2043
+ 96.45138889,
2044
+ 96.45138889,
2045
+ 96.45138889,
2046
+ 96.45138889,
2047
+ 96.45138889,
2048
+ 96.45138889,
2049
+ 96.45138889,
2050
+ 96.45138889,
1905
2051
  ],
1906
2052
  3: [
1907
- 578.7083,
1908
- 578.7083,
1909
- 578.7083,
1910
- 578.7083,
1911
- 289.35416,
1912
- 289.35416,
1913
- 289.35416,
1914
- 289.35416,
1915
- 289.35416,
1916
- 289.35416,
1917
- 289.35416,
1918
- 289.35416,
1919
- 192.90277,
1920
- 192.90277,
1921
- 192.90277,
1922
- 192.90277,
1923
- 192.90277,
1924
- 192.90277,
1925
- 192.90277,
1926
- 192.90277,
1927
- 192.90277,
1928
- 192.90277,
1929
- 192.90277,
1930
- 192.90277,
1931
- 144.67708,
1932
- 144.67708,
1933
- 144.67708,
1934
- 144.67708,
1935
- 144.67708,
1936
- 144.67708,
1937
- 144.67708,
1938
- 144.67708,
1939
- 144.67708,
1940
- 144.67708,
1941
- 144.67708,
1942
- 144.67708,
1943
- 144.67708,
1944
- 144.67708,
1945
- 144.67708,
1946
- 144.67708,
1947
- 115.74167,
1948
- 115.74167,
1949
- 115.74167,
1950
- 115.74167,
1951
- 115.74167,
1952
- 115.74167,
1953
- 115.74167,
1954
- 115.74167,
1955
- 115.74167,
1956
- 115.74167,
1957
- 115.74167,
1958
- 115.74167,
1959
- 115.74167,
1960
- 115.74167,
1961
- 115.74167,
1962
- 115.74167,
1963
- 115.74167,
1964
- 115.74167,
1965
- 115.74167,
1966
- 115.74167,
1967
- 115.74167,
1968
- 115.74167,
1969
- 115.74167,
1970
- 115.74167,
1971
- 115.74167,
1972
- 115.74167,
1973
- 115.74167,
1974
- 115.74167,
1975
- 115.74167,
1976
- 115.74167,
1977
- 115.74167,
1978
- 115.74167,
1979
- 115.74167,
1980
- 115.74167,
1981
- 115.74167,
1982
- 115.74167,
1983
- 115.74167,
1984
- 115.74167,
1985
- 115.74167,
1986
- 115.74167,
1987
- 95.69444,
1988
- 95.69444,
1989
- 95.69444,
1990
- 95.69444,
1991
- 95.69444,
1992
- 95.69444,
1993
- 95.69444,
1994
- 95.69444,
1995
- 95.69444,
1996
- 95.69444,
1997
- 95.69444,
1998
- 95.69444,
1999
- 95.69444,
2000
- 95.69444,
2001
- 95.69444,
2002
- 95.69444,
2003
- 95.69444,
2004
- 95.69444,
2005
- 95.69444,
2006
- 95.69444,
2007
- 95.69444,
2008
- 95.69444,
2009
- 95.69444,
2010
- 95.69444,
2011
- 95.69444,
2012
- 95.69444,
2013
- 95.69444,
2014
- 95.69444,
2015
- 95.69444,
2016
- 95.69444,
2017
- 95.69444,
2018
- 95.69444,
2019
- 95.69444,
2020
- 95.69444,
2021
- 95.69444,
2022
- 95.69444,
2023
- 95.69444,
2024
- 95.69444,
2025
- 95.69444,
2026
- 95.69444,
2027
- 95.69444,
2028
- 95.69444,
2029
- 95.69444,
2030
- 95.69444,
2031
- 95.69444,
2032
- 95.69444,
2033
- 95.69444,
2034
- 95.69444,
2053
+ 578.70833333,
2054
+ 578.70833333,
2055
+ 578.70833333,
2056
+ 578.70833333,
2057
+ 289.35416667,
2058
+ 289.35416667,
2059
+ 289.35416667,
2060
+ 289.35416667,
2061
+ 289.35416667,
2062
+ 289.35416667,
2063
+ 289.35416667,
2064
+ 289.35416667,
2065
+ 192.90277778,
2066
+ 192.90277778,
2067
+ 192.90277778,
2068
+ 192.90277778,
2069
+ 192.90277778,
2070
+ 192.90277778,
2071
+ 192.90277778,
2072
+ 192.90277778,
2073
+ 192.90277778,
2074
+ 192.90277778,
2075
+ 192.90277778,
2076
+ 192.90277778,
2077
+ 144.67708333,
2078
+ 144.67708333,
2079
+ 144.67708333,
2080
+ 144.67708333,
2081
+ 144.67708333,
2082
+ 144.67708333,
2083
+ 144.67708333,
2084
+ 144.67708333,
2085
+ 144.67708333,
2086
+ 144.67708333,
2087
+ 144.67708333,
2088
+ 144.67708333,
2089
+ 144.67708333,
2090
+ 144.67708333,
2091
+ 144.67708333,
2092
+ 144.67708333,
2093
+ 115.74166667,
2094
+ 115.74166667,
2095
+ 115.74166667,
2096
+ 115.74166667,
2097
+ 115.74166667,
2098
+ 115.74166667,
2099
+ 115.74166667,
2100
+ 115.74166667,
2101
+ 115.74166667,
2102
+ 115.74166667,
2103
+ 115.74166667,
2104
+ 115.74166667,
2105
+ 115.74166667,
2106
+ 115.74166667,
2107
+ 115.74166667,
2108
+ 115.74166667,
2109
+ 115.74166667,
2110
+ 115.74166667,
2111
+ 115.74166667,
2112
+ 115.74166667,
2113
+ 115.74166667,
2114
+ 115.74166667,
2115
+ 115.74166667,
2116
+ 115.74166667,
2117
+ 115.74166667,
2118
+ 115.74166667,
2119
+ 115.74166667,
2120
+ 115.74166667,
2121
+ 115.74166667,
2122
+ 115.74166667,
2123
+ 115.74166667,
2124
+ 115.74166667,
2125
+ 115.74166667,
2126
+ 115.74166667,
2127
+ 115.74166667,
2128
+ 115.74166667,
2129
+ 115.74166667,
2130
+ 115.74166667,
2131
+ 115.74166667,
2132
+ 115.74166667,
2133
+ 96.45138889,
2134
+ 96.45138889,
2135
+ 96.45138889,
2136
+ 96.45138889,
2137
+ 96.45138889,
2138
+ 96.45138889,
2139
+ 96.45138889,
2140
+ 96.45138889,
2141
+ 96.45138889,
2142
+ 96.45138889,
2143
+ 96.45138889,
2144
+ 96.45138889,
2145
+ 96.45138889,
2146
+ 96.45138889,
2147
+ 96.45138889,
2148
+ 96.45138889,
2149
+ 96.45138889,
2150
+ 96.45138889,
2151
+ 96.45138889,
2152
+ 96.45138889,
2153
+ 96.45138889,
2154
+ 96.45138889,
2155
+ 96.45138889,
2156
+ 96.45138889,
2157
+ 96.45138889,
2158
+ 96.45138889,
2159
+ 96.45138889,
2160
+ 96.45138889,
2161
+ 96.45138889,
2162
+ 96.45138889,
2163
+ 96.45138889,
2164
+ 96.45138889,
2165
+ 96.45138889,
2166
+ 96.45138889,
2167
+ 96.45138889,
2168
+ 96.45138889,
2169
+ 96.45138889,
2170
+ 96.45138889,
2171
+ 96.45138889,
2172
+ 96.45138889,
2173
+ 96.45138889,
2174
+ 96.45138889,
2175
+ 96.45138889,
2176
+ 96.45138889,
2177
+ 96.45138889,
2178
+ 96.45138889,
2179
+ 96.45138889,
2180
+ 96.45138889,
2035
2181
  ],
2036
2182
  }
2183
+
2184
+ # TODO: Update EFFICIENCY value when better information is available.
2185
+ # Constant for CoDICE Intensity calculations.
2186
+ EFFICIENCY = 1
2187
+
2188
+ # Lookup table for mapping half-spin (keys) to esa steps (values)
2189
+ # This is used to determine geometry factors L2
2190
+ HALF_SPIN_LUT = {
2191
+ 0: [0],
2192
+ 1: [1],
2193
+ 2: [2],
2194
+ 3: [3],
2195
+ 4: [4, 5],
2196
+ 5: [6, 7],
2197
+ 6: [8, 9],
2198
+ 7: [10, 11],
2199
+ 8: [12, 13, 14],
2200
+ 9: [15, 16, 17],
2201
+ 10: [18, 19, 20],
2202
+ 11: [21, 22, 23],
2203
+ 12: [24, 25, 26, 27],
2204
+ 13: [28, 29, 30, 31],
2205
+ 14: [32, 33, 34, 35],
2206
+ 15: [36, 37, 38, 39],
2207
+ 16: [40, 41, 42, 43, 44],
2208
+ 17: [45, 46, 47, 48, 49],
2209
+ 18: [50, 51, 52, 53, 54],
2210
+ 19: [55, 56, 57, 58, 59],
2211
+ 20: [60, 61, 62, 63, 64],
2212
+ 21: [65, 66, 67, 68, 69],
2213
+ 22: [70, 71, 72, 73, 74],
2214
+ 23: [75, 76, 77, 78, 79],
2215
+ 24: [80, 81, 82, 83, 84, 85],
2216
+ 25: [86, 87, 88, 89, 90, 91],
2217
+ 26: [92, 93, 94, 95, 96, 97],
2218
+ 27: [98, 99, 100, 101, 102, 103],
2219
+ 28: [104, 105, 106, 107, 108, 109],
2220
+ 29: [110, 111, 112, 113, 114, 115],
2221
+ 30: [116, 117, 118, 119, 120, 121],
2222
+ 31: [122, 123, 124, 125, 126, 127],
2223
+ }