From 63bc277736f169c7b70e717e50b1b7e5ee069ec7 Mon Sep 17 00:00:00 2001 From: Tenzin Choedon Date: Tue, 31 Mar 2026 09:10:36 -0600 Subject: [PATCH 1/2] CoDICE: Fixing attrs bugs for CAVA --- .../imap_codice_l1a_variable_attrs.yaml | 24 ++-- ...imap_codice_l2-hi-omni_variable_attrs.yaml | 130 ++++++++---------- ..._codice_l2-hi-sectored_variable_attrs.yaml | 121 ++++++++-------- ...p_codice_l2-lo-species_variable_attrs.yaml | 52 ++++--- imap_processing/codice/codice_l2.py | 115 +++++++++++++--- 5 files changed, 262 insertions(+), 180 deletions(-) diff --git a/imap_processing/cdf/config/imap_codice_l1a_variable_attrs.yaml b/imap_processing/cdf/config/imap_codice_l1a_variable_attrs.yaml index a84984d193..66c03c7bf3 100644 --- a/imap_processing/cdf/config/imap_codice_l1a_variable_attrs.yaml +++ b/imap_processing/cdf/config/imap_codice_l1a_variable_attrs.yaml @@ -491,7 +491,7 @@ hi-species-attrs: SCALETYP: linear UNITS: counts VALIDMAX: *max_uint32 - VALIDMIN: 0 + VALIDMIN: 0.0 VAR_TYPE: data hi-species-unc-attrs: @@ -548,7 +548,7 @@ hi_priorities_attrs: &hi_priorities_default LABLAXIS: "events" UNITS: events VALIDMAX: *real_fillval - VALIDMIN: 0 + VALIDMIN: 0.0 VAR_TYPE: data priority0: @@ -899,32 +899,32 @@ lo-pui-species-unc-attrs: # Data quality and num of events attrs de_2d_attrs: CATDESC: Direct event data - FIELDNAM: Direct Event Data - LABLAXIS: Values DEPEND_0: epoch DEPEND_1: priority + DICT_KEY: SPASE>Support>SupportQuantity:Other + FIELDNAM: Direct Event Data FILLVAL: -9223372036854775808 FORMAT: I5 + LABLAXIS: Values + SCALETYP: linear UNITS: " " - VALIDMIN: 0 VALIDMAX: 65535 + VALIDMIN: 0 VAR_TYPE: support_data - SCALETYP: linear - DICT_KEY: SPASE>Support>SupportQuantity:Other # unpacked 64-bits attrs de_3d_attrs: CATDESC: Direct event data - FIELDNAM: Direct Event Data - LABLAXIS: Values DEPEND_0: epoch DEPEND_1: priority DEPEND_2: event_num + DICT_KEY: SPASE>Support>SupportQuantity:Other + FIELDNAM: Direct Event Data FILLVAL: -9223372036854775808 FORMAT: I{num_digits} + LABLAXIS: Values + SCALETYP: linear UNITS: " " - VALIDMIN: 0 VALIDMAX: "{valid_max}" + VALIDMIN: 0 VAR_TYPE: support_data - SCALETYP: linear - DICT_KEY: SPASE>Support>SupportQuantity:Other diff --git a/imap_processing/cdf/config/imap_codice_l2-hi-omni_variable_attrs.yaml b/imap_processing/cdf/config/imap_codice_l2-hi-omni_variable_attrs.yaml index 82744c0d56..8fc45b0154 100644 --- a/imap_processing/cdf/config/imap_codice_l2-hi-omni_variable_attrs.yaml +++ b/imap_processing/cdf/config/imap_codice_l2-hi-omni_variable_attrs.yaml @@ -10,22 +10,23 @@ max_int: &max_int 9223372036854775807 energy_attrs: &energy_default VAR_TYPE: support_data CATDESC: Geometric mean energy per nucleon + DISPLAY_TYPE: time_series FIELDNAM: Energy Table LABLAXIS: Energy SCALETYP: log UNITS: MeV/nuc - FORMAT: '%f' + FORMAT: F32.1 FILLVAL: *real_fillval VALIDMAX: 200.0 - VALIDMIN: 0.05000000074505806 + VALIDMIN: 0.0 DICT_KEY: SPASE>Particle>ParticleType:Ion,ParticleQuantity:EnergyPerCharge,Qualifier:Characteristic # ------------------------------- Coordinates ------------------------------- epoch_delta_minus: CATDESC: Time from acquisition start to acquisition center FIELDNAM: epoch delta minus - FILLVAL: -9223372036854775808 - FORMAT: I18 + FILLVAL: *min_int + FORMAT: I19 LABLAXIS: Epoch Delta Minus SCALETYP: linear UNITS: ns @@ -37,8 +38,8 @@ epoch_delta_minus: epoch_delta_plus: CATDESC: Time from acquisition center to acquisition end FIELDNAM: epoch delta plus - FILLVAL: -9223372036854775808 - FORMAT: I18 + FILLVAL: *min_int + FORMAT: I19 LABLAXIS: Epoch Delta Plus SCALETYP: linear UNITS: ns @@ -334,11 +335,11 @@ unc_c: VALIDMIN: 0.0 VALIDMAX: 4096.0 UNITS: '# / cm2 s sr MeV/nuc' - FORMAT: '%f' + FORMAT: F32.1 CATDESC: Uncertainties for c (Root 2 spacing) VAR_TYPE: support_data SI_CONVERSION: ' > ' - SCALETYP: linear + SCALETYP: log FILLVAL: *real_fillval DISPLAY_TYPE: time_series DEPEND_0: epoch @@ -351,11 +352,11 @@ unc_fe: VALIDMIN: 0.0 VALIDMAX: 4096.0 UNITS: '# / cm2 s sr MeV/nuc' - FORMAT: '%f' + FORMAT: F32.1 CATDESC: Uncertainties for fe (Root 2 spacing) VAR_TYPE: support_data SI_CONVERSION: ' > ' - SCALETYP: linear + SCALETYP: log FILLVAL: *real_fillval DISPLAY_TYPE: time_series DEPEND_0: epoch @@ -368,11 +369,11 @@ unc_h: VALIDMIN: 0.0 VALIDMAX: 4096.0 UNITS: '# / cm2 s sr MeV/nuc' - FORMAT: '%f' + FORMAT: F32.1 CATDESC: Uncertainties for h (Root 2 spacing) VAR_TYPE: support_data SI_CONVERSION: ' > ' - SCALETYP: linear + SCALETYP: log FILLVAL: *real_fillval DISPLAY_TYPE: time_series DEPEND_0: epoch @@ -385,11 +386,11 @@ unc_he3: VALIDMIN: 0.0 VALIDMAX: 4096.0 UNITS: '# / cm2 s sr MeV/nuc' - FORMAT: '%f' + FORMAT: F32.1 CATDESC: Uncertainties for he3 (Root 2 spacing) VAR_TYPE: support_data SI_CONVERSION: ' > ' - SCALETYP: linear + SCALETYP: log FILLVAL: *real_fillval DISPLAY_TYPE: time_series DEPEND_0: epoch @@ -402,11 +403,11 @@ unc_he4: VALIDMIN: 0.0 VALIDMAX: 4096.0 UNITS: '# / cm2 s sr MeV/nuc' - FORMAT: '%f' + FORMAT: F32.1 CATDESC: Uncertainties for he4 (Root 2 spacing) VAR_TYPE: support_data SI_CONVERSION: ' > ' - SCALETYP: linear + SCALETYP: log FILLVAL: *real_fillval DISPLAY_TYPE: time_series DEPEND_0: epoch @@ -419,11 +420,11 @@ unc_junk: VALIDMIN: 0.0 VALIDMAX: 4096.0 UNITS: '# / cm2 s sr MeV/nuc' - FORMAT: '%f' + FORMAT: F32.1 CATDESC: Uncertainties for junk (Root 2 spacing) VAR_TYPE: support_data SI_CONVERSION: ' > ' - SCALETYP: linear + SCALETYP: log FILLVAL: *real_fillval DISPLAY_TYPE: time_series DEPEND_0: epoch @@ -436,11 +437,11 @@ unc_ne_mg_si: VALIDMIN: 0.0 VALIDMAX: 4096.0 UNITS: '# / cm2 s sr MeV/nuc' - FORMAT: '%f' + FORMAT: F32.1 CATDESC: Uncertainties for ne-mg-si (Root 2 spacing) VAR_TYPE: support_data SI_CONVERSION: ' > ' - SCALETYP: linear + SCALETYP: log FILLVAL: *real_fillval DISPLAY_TYPE: time_series DEPEND_0: epoch @@ -453,11 +454,11 @@ unc_o: VALIDMIN: 0.0 VALIDMAX: 4096.0 UNITS: '# / cm2 s sr MeV/nuc' - FORMAT: '%f' + FORMAT: F32.1 CATDESC: Uncertainties for o (Root 2 spacing) VAR_TYPE: support_data SI_CONVERSION: ' > ' - SCALETYP: linear + SCALETYP: log FILLVAL: *real_fillval DISPLAY_TYPE: time_series DEPEND_0: epoch @@ -470,11 +471,11 @@ unc_uh: VALIDMIN: 0.0 VALIDMAX: 4096.0 UNITS: '# / cm2 s sr MeV/nuc' - FORMAT: '%f' + FORMAT: F32.1 CATDESC: Uncertainties for uh (Root 2 spacing) VAR_TYPE: support_data SI_CONVERSION: ' > ' - SCALETYP: linear + SCALETYP: log FILLVAL: *real_fillval DISPLAY_TYPE: time_series DEPEND_0: epoch @@ -484,12 +485,11 @@ unc_uh: c: VAR_TYPE: data DEPEND_0: epoch - DISPLAY_TYPE: spectrogram - FIELDNAM: c + DISPLAY_TYPE: time_series + FIELDNAM: Diff. Intensity - c FILLVAL: *real_fillval - FORMAT: '%f' - LABLAXIS: Diff. Intensity - SCALETYP: linear + FORMAT: F32.1 + SCALETYP: log UNITS: '# / cm2 s sr MeV/nuc' VALIDMAX: 16777216.0 VALIDMIN: 0.0 @@ -501,12 +501,11 @@ c: fe: VAR_TYPE: data DEPEND_0: epoch - DISPLAY_TYPE: spectrogram - FIELDNAM: fe + DISPLAY_TYPE: time_series + FIELDNAM: Diff. Intensity - fe FILLVAL: *real_fillval - FORMAT: '%f' - LABLAXIS: Diff. Intensity - SCALETYP: linear + FORMAT: F32.1 + SCALETYP: log UNITS: '# / cm2 s sr MeV/nuc' VALIDMAX: 16777216.0 VALIDMIN: 0.0 @@ -518,12 +517,11 @@ fe: h: VAR_TYPE: data DEPEND_0: epoch - DISPLAY_TYPE: spectrogram - FIELDNAM: h + DISPLAY_TYPE: time_series + FIELDNAM: Diff. Intensity - h FILLVAL: *real_fillval - FORMAT: '%f' - LABLAXIS: Diff. Intensity - SCALETYP: linear + FORMAT: F32.1 + SCALETYP: log UNITS: '# / cm2 s sr MeV/nuc' VALIDMAX: 16777216.0 VALIDMIN: 0.0 @@ -535,12 +533,11 @@ h: he3: VAR_TYPE: data DEPEND_0: epoch - DISPLAY_TYPE: spectrogram - FIELDNAM: he3 + DISPLAY_TYPE: time_series + FIELDNAM: Diff. Intensity - he3 FILLVAL: *real_fillval - FORMAT: '%f' - LABLAXIS: Diff. Intensity - SCALETYP: linear + FORMAT: F32.1 + SCALETYP: log UNITS: '# / cm2 s sr MeV/nuc' VALIDMAX: 16777216.0 VALIDMIN: 0.0 @@ -552,12 +549,11 @@ he3: he4: VAR_TYPE: data DEPEND_0: epoch - DISPLAY_TYPE: spectrogram - FIELDNAM: he4 + DISPLAY_TYPE: time_series + FIELDNAM: Diff. Intensity - he4 FILLVAL: *real_fillval - FORMAT: '%f' - LABLAXIS: Diff. Intensity - SCALETYP: linear + FORMAT: F32.1 + SCALETYP: log UNITS: '# / cm2 s sr MeV/nuc' VALIDMAX: 16777216.0 VALIDMIN: 0.0 @@ -569,12 +565,11 @@ he4: junk: VAR_TYPE: data DEPEND_0: epoch - DISPLAY_TYPE: spectrogram - FIELDNAM: junk + DISPLAY_TYPE: time_series + FIELDNAM: Diff. Intensity - junk FILLVAL: *real_fillval - FORMAT: '%f' - LABLAXIS: Diff. Intensity - SCALETYP: linear + FORMAT: F32.1 + SCALETYP: log UNITS: '# / cm2 s sr MeV/nuc' VALIDMAX: 16777216.0 VALIDMIN: 0.0 @@ -586,12 +581,11 @@ junk: ne_mg_si: VAR_TYPE: data DEPEND_0: epoch - DISPLAY_TYPE: spectrogram - FIELDNAM: ne-mg-si + DISPLAY_TYPE: time_series + FIELDNAM: Diff. Intensity - ne-mg-si FILLVAL: *real_fillval - FORMAT: '%f' - LABLAXIS: Diff. Intensity - SCALETYP: linear + FORMAT: F32.1 + SCALETYP: log UNITS: '# / cm2 s sr MeV/nuc' VALIDMAX: 16777216.0 VALIDMIN: 0.0 @@ -603,12 +597,11 @@ ne_mg_si: o: VAR_TYPE: data DEPEND_0: epoch - DISPLAY_TYPE: spectrogram - FIELDNAM: o + DISPLAY_TYPE: time_series + FIELDNAM: Diff. Intensity - o FILLVAL: *real_fillval - FORMAT: '%f' - LABLAXIS: Diff. Intensity - SCALETYP: linear + FORMAT: F32.1 + SCALETYP: log UNITS: '# / cm2 s sr MeV/nuc' VALIDMAX: 16777216.0 VALIDMIN: 0.0 @@ -620,12 +613,11 @@ o: uh: VAR_TYPE: data DEPEND_0: epoch - DISPLAY_TYPE: spectrogram - FIELDNAM: uh + DISPLAY_TYPE: time_series + FIELDNAM: Diff. Intensity - uh FILLVAL: *real_fillval - FORMAT: '%f' - LABLAXIS: Diff. Intensity - SCALETYP: linear + FORMAT: F32.1 + SCALETYP: log UNITS: '# / cm2 s sr MeV/nuc' VALIDMAX: 16777216.0 VALIDMIN: 0.0 diff --git a/imap_processing/cdf/config/imap_codice_l2-hi-sectored_variable_attrs.yaml b/imap_processing/cdf/config/imap_codice_l2-hi-sectored_variable_attrs.yaml index 20b302e421..682d9f886a 100644 --- a/imap_processing/cdf/config/imap_codice_l2-hi-sectored_variable_attrs.yaml +++ b/imap_processing/cdf/config/imap_codice_l2-hi-sectored_variable_attrs.yaml @@ -1,6 +1,5 @@ # ----------------------------- Useful variables ----------------------------- uint8_fillval: &uint8_fillval 255 -uint32_fillval: &uint32_fillval 4294967295 real_fillval: &real_fillval -1.0e+31 min_int: &min_int -9223372036854775808 @@ -12,20 +11,20 @@ energy_attrs: &energy_default CATDESC: Geometric mean energy per nucleon FIELDNAM: Energy Table LABLAXIS: Energy - SCALETYP: log + SCALETYP: linear UNITS: MeV/nuc - FORMAT: '%f' + FORMAT: F32.1 FILLVAL: *real_fillval VALIDMAX: 200.0 - VALIDMIN: 0.05000000074505806 + VALIDMIN: 0.0 DICT_KEY: SPASE>Particle>ParticleType:Ion,ParticleQuantity:EnergyPerCharge,Qualifier:Characteristic # ------------------------------- Coordinates ------------------------------- epoch_delta_minus: CATDESC: Time from acquisition start to acquisition center FIELDNAM: epoch delta minus - FILLVAL: -9223372036854775808 - FORMAT: I18 + FILLVAL: *min_int + FORMAT: I19 LABLAXIS: Epoch Delta Minus SCALETYP: linear UNITS: ns @@ -37,8 +36,8 @@ epoch_delta_minus: epoch_delta_plus: CATDESC: Time from acquisition center to acquisition end FIELDNAM: epoch delta plus - FILLVAL: -9223372036854775808 - FORMAT: I18 + FILLVAL: *min_int + FORMAT: I19 LABLAXIS: Epoch Delta Plus SCALETYP: linear UNITS: ns @@ -50,7 +49,8 @@ epoch_delta_plus: elevation_angle: CATDESC: Elevation Angle FIELDNAM: Elevation Angle - FORMAT: '%f' + FORMAT: F32.1 + FILLVAL: *real_fillval LABLAXIS: Elevation Angle SCALETYP: linear UNITS: degrees @@ -61,8 +61,8 @@ elevation_angle: spin_sector: CATDESC: Spin Sector Index FIELDNAM: Spin Sector Index - FILLVAL: -1 - FORMAT: I2 + FILLVAL: *uint8_fillval + FORMAT: I3 LABLAXIS: " " SCALETYP: linear UNITS: " " @@ -166,12 +166,13 @@ data_quality: species_dim_attrs: &species_dim_attrs DEPEND_0: epoch - DEPEND_1: energy_cno + DEPEND_1: energy_{species} DEPEND_2: spin_sector DEPEND_3: elevation_angle - LABL_PTR_1: energy_cno_label + LABL_PTR_1: energy_{species}_label LABL_PTR_2: spin_sector_label LABL_PTR_3: elevation_angle_label + # species: cno: <<: *species_dim_attrs @@ -179,12 +180,12 @@ cno: DISPLAY_TYPE: spectrogram CATDESC: cno (x2 spacing) FIELDNAM: cno - FILLVAL: *uint32_fillval - FORMAT: '%f' - SCALETYP: linear + FILLVAL: *real_fillval + FORMAT: E14.7 + SCALETYP: log UNITS: '# / cm2 s sr MeV/nuc' - VALIDMAX: 16777216 - VALIDMIN: 0 + VALIDMAX: 16777216.0 + VALIDMIN: 0.0 DICT_KEY: SPASE>Particle>ParticleType:Ion,ParticleQuantity:NumberFlux,Qualifier:Differential fe: @@ -193,12 +194,12 @@ fe: DISPLAY_TYPE: spectrogram CATDESC: fe (x2 spacing) FIELDNAM: fe - FILLVAL: *uint32_fillval - FORMAT: '%f' - SCALETYP: linear + FILLVAL: *real_fillval + FORMAT: F32.1 + SCALETYP: log UNITS: '# / cm2 s sr MeV/nuc' - VALIDMAX: 16777216 - VALIDMIN: 0 + VALIDMAX: 16777216.0 + VALIDMIN: 0.0 DICT_KEY: SPASE>Particle>ParticleType:Ion,ParticleQuantity:NumberFlux,Qualifier:Differential h: @@ -207,12 +208,12 @@ h: DISPLAY_TYPE: spectrogram CATDESC: h (x2 spacing) FIELDNAM: h - FILLVAL: *uint32_fillval - FORMAT: '%f' - SCALETYP: linear + FILLVAL: *real_fillval + FORMAT: F32.1 + SCALETYP: log UNITS: '# / cm2 s sr MeV/nuc' - VALIDMAX: 16777216 - VALIDMIN: 0 + VALIDMAX: 16777216.0 + VALIDMIN: 0.0 DICT_KEY: SPASE>Particle>ParticleType:Ion,ParticleQuantity:NumberFlux,Qualifier:Differential he3he4: @@ -221,12 +222,12 @@ he3he4: DISPLAY_TYPE: spectrogram CATDESC: he3he4 (x2 spacing) FIELDNAM: he3he4 - FILLVAL: *uint32_fillval - FORMAT: '%f' - SCALETYP: linear + FILLVAL: *real_fillval + FORMAT: F32.1 + SCALETYP: log UNITS: '# / cm2 s sr MeV/nuc' - VALIDMAX: 16777216 - VALIDMIN: 0 + VALIDMAX: 16777216.0 + VALIDMIN: 0.0 DICT_KEY: SPASE>Particle>ParticleType:Ion,ParticleQuantity:NumberFlux,Qualifier:Differential # uncertainties: @@ -236,13 +237,13 @@ unc_cno: VALIDMIN: 0.0 VALIDMAX: 4096.0 UNITS: '# / cm2 s sr MeV/nuc' - FORMAT: '%f' + FORMAT: F32.1 CATDESC: Uncertainties for cno (x2 spacing) VAR_TYPE: data SI_CONVERSION: ' > ' - SCALETYP: linear + SCALETYP: log FILLVAL: *real_fillval - DISPLAY_TYPE: time_series + DISPLAY_TYPE: spectrogram COORDINATE_SYSTEM: instrument frame unc_fe: @@ -251,11 +252,11 @@ unc_fe: VALIDMIN: 0.0 VALIDMAX: 4096.0 UNITS: '# / cm2 s sr MeV/nuc' - FORMAT: '%f' + FORMAT: F32.1 CATDESC: Uncertainties for fe (x2 spacing) VAR_TYPE: data SI_CONVERSION: ' > ' - SCALETYP: linear + SCALETYP: log FILLVAL: *real_fillval DISPLAY_TYPE: spectrogram COORDINATE_SYSTEM: instrument frame @@ -266,11 +267,11 @@ unc_h: VALIDMIN: 0.0 VALIDMAX: 4096.0 UNITS: '# / cm2 s sr MeV/nuc' - FORMAT: '%f' + FORMAT: F32.1 CATDESC: Uncertainties for h (x2 spacing) VAR_TYPE: data SI_CONVERSION: ' > ' - SCALETYP: linear + SCALETYP: log FILLVAL: *real_fillval DISPLAY_TYPE: spectrogram DEPEND_0: epoch @@ -282,11 +283,11 @@ unc_he3he4: VALIDMIN: 0.0 VALIDMAX: 4096.0 UNITS: '# / cm2 s sr MeV/nuc' - FORMAT: '%f' + FORMAT: F32.1 CATDESC: Uncertainties for he3he4 (x2 spacing) VAR_TYPE: data SI_CONVERSION: ' > ' - SCALETYP: linear + SCALETYP: log FILLVAL: *real_fillval DISPLAY_TYPE: spectrogram COORDINATE_SYSTEM: instrument frame @@ -299,10 +300,10 @@ energy_cno_minus: LABLAXIS: Energy SCALETYP: log UNITS: MeV/nuc - FORMAT: '%f' + FORMAT: F32.1 FILLVAL: *real_fillval VALIDMAX: 200.0 - VALIDMIN: 0.05000000074505806 + VALIDMIN: 0.0 DICT_KEY: SPASE>Particle>ParticleType:Ion,ParticleQuantity:EnergyPerCharge,Qualifier:Uncertainty DEPEND_1: energy_cno @@ -313,10 +314,10 @@ energy_cno_plus: LABLAXIS: Energy SCALETYP: log UNITS: MeV/nuc - FORMAT: '%f' + FORMAT: F32.1 FILLVAL: *real_fillval VALIDMAX: 200.0 - VALIDMIN: 0.05000000074505806 + VALIDMIN: 0.0 DICT_KEY: SPASE>Particle>ParticleType:Ion,ParticleQuantity:EnergyPerCharge,Qualifier:Uncertainty DEPEND_1: energy_cno @@ -327,10 +328,10 @@ energy_fe_minus: LABLAXIS: Energy SCALETYP: log UNITS: MeV/nuc - FORMAT: '%f' + FORMAT: F32.1 FILLVAL: *real_fillval VALIDMAX: 200.0 - VALIDMIN: 0.05000000074505806 + VALIDMIN: 0.0 DICT_KEY: SPASE>Particle>ParticleType:Ion,ParticleQuantity:EnergyPerCharge,Qualifier:Uncertainty DEPEND_1: energy_fe @@ -341,10 +342,10 @@ energy_fe_plus: LABLAXIS: Energy SCALETYP: log UNITS: MeV/nuc - FORMAT: '%f' + FORMAT: F32.1 FILLVAL: *real_fillval VALIDMAX: 200.0 - VALIDMIN: 0.05000000074505806 + VALIDMIN: 0.0 DICT_KEY: SPASE>Particle>ParticleType:Ion,ParticleQuantity:EnergyPerCharge,Qualifier:Uncertainty DEPEND_1: energy_fe @@ -355,10 +356,10 @@ energy_h_minus: LABLAXIS: Energy SCALETYP: log UNITS: MeV/nuc - FORMAT: '%f' + FORMAT: F32.1 FILLVAL: *real_fillval VALIDMAX: 200.0 - VALIDMIN: 0.05000000074505806 + VALIDMIN: 0.0 DICT_KEY: SPASE>Particle>ParticleType:Ion,ParticleQuantity:EnergyPerCharge,Qualifier:Uncertainty DEPEND_1: energy_h @@ -369,10 +370,10 @@ energy_h_plus: LABLAXIS: Energy SCALETYP: log UNITS: MeV/nuc - FORMAT: '%f' + FORMAT: F32.1 FILLVAL: *real_fillval VALIDMAX: 200.0 - VALIDMIN: 0.05000000074505806 + VALIDMIN: 0.0 DICT_KEY: SPASE>Particle>ParticleType:Ion,ParticleQuantity:EnergyPerCharge,Qualifier:Uncertainty DEPEND_1: energy_h @@ -383,10 +384,10 @@ energy_he3he4_minus: LABLAXIS: Energy SCALETYP: log UNITS: MeV/nuc - FORMAT: '%f' + FORMAT: F32.1 FILLVAL: *real_fillval VALIDMAX: 200.0 - VALIDMIN: 0.05000000074505806 + VALIDMIN: 0.0 DICT_KEY: SPASE>Particle>ParticleType:Ion,ParticleQuantity:EnergyPerCharge,Qualifier:Uncertainty DEPEND_1: energy_he3he4 @@ -397,10 +398,10 @@ energy_he3he4_plus: LABLAXIS: Energy SCALETYP: log UNITS: MeV/nuc - FORMAT: '%f' + FORMAT: F32.1 FILLVAL: *real_fillval VALIDMAX: 200.0 - VALIDMIN: 0.05000000074505806 + VALIDMIN: 0.0 DICT_KEY: SPASE>Particle>ParticleType:Ion,ParticleQuantity:EnergyPerCharge,Qualifier:Uncertainty DEPEND_1: energy_he3he4 @@ -409,12 +410,12 @@ spin_angle: VAR_TYPE: support_data CATDESC: Spin Angle FIELDNAM: Spin Angle - SCALETYP: linear + SCALETYP: log UNITS: degrees FILLVAL: *real_fillval VALIDMAX: 360.0 VALIDMIN: 0.0 - FORMAT: '%f' + FORMAT: F32.1 DICT_KEY: SPASE>Particle>ParticleType:Ion,ParticleQuantity:ArrivalDirection,Qualifier:DirectionAngle.AzimuthAngle DEPEND_1: spin_sector DEPEND_2: elevation_angle diff --git a/imap_processing/cdf/config/imap_codice_l2-lo-species_variable_attrs.yaml b/imap_processing/cdf/config/imap_codice_l2-lo-species_variable_attrs.yaml index 90c22568fa..87f46be289 100644 --- a/imap_processing/cdf/config/imap_codice_l2-lo-species_variable_attrs.yaml +++ b/imap_processing/cdf/config/imap_codice_l2-lo-species_variable_attrs.yaml @@ -1,12 +1,14 @@ # ----------------------------- Useful variables ----------------------------- real_fillval: &real_fillval -1.0e+31 max_float: &max_float 3.4028235e+38 +species_valid_max: &species_valid_max 1e20 # ------------------------------- Coordinates ------------------------------- elevation_angle: CATDESC: Elevation Angle FIELDNAM: Elevation Angle - FORMAT: I8 + FORMAT: F32.1 + FILLVAL: *real_fillval LABLAXIS: Elevation Angle SCALETYP: linear UNITS: degrees @@ -17,13 +19,13 @@ elevation_angle: spin_sector: CATDESC: Spin Sector Index FIELDNAM: Spin Sector Index - FILLVAL: -1 - FORMAT: I2 + FILLVAL: *uint8_fillval + FORMAT: I3 LABLAXIS: " " SCALETYP: linear UNITS: " " VALIDMIN: 0 - VALIDMAX: 24 + VALIDMAX: 12 VAR_TYPE: support_data # ------------------------------- labels ------------------------------- @@ -40,15 +42,16 @@ lo-species-attrs: DEPEND_0: epoch DEPEND_1: esa_step DEPEND_2: spin_sector - DISPLAY_TYPE: time_series + DISPLAY_TYPE: spectrogram FIELDNAM: "Non-sunward - {species}" FILLVAL: *real_fillval - FORMAT: F13.4 + FORMAT: F32.1 LABL_PTR_1: esa_step_label LABL_PTR_2: spin_sector_label + SCALETYP: log UNITS: "#/(cm^2-s-sr-keV/q)" VALIDMIN: 0.0 - VALIDMAX: 16777216.0 + VALIDMAX: *species_valid_max VAR_TYPE: data DICT_KEY: SPASE>Particle>ParticleType:Ion,ParticleQuantity:NumberFlux,Qualifier:Differential @@ -57,15 +60,16 @@ lo-pui-species-attrs: DEPEND_0: epoch DEPEND_1: esa_step DEPEND_2: spin_sector - DISPLAY_TYPE: time_series + DISPLAY_TYPE: spectrogram FIELDNAM: "Sunward - {species}" FILLVAL: *real_fillval - FORMAT: F13.4 + FORMAT: F32.1 LABL_PTR_1: esa_step_label LABL_PTR_2: spin_sector_label + SCALETYP: log UNITS: "#/(cm^2-s-sr-keV/q)" VALIDMIN: 0.0 - VALIDMAX: 16777216.0 + VALIDMAX: *species_valid_max VAR_TYPE: data DICT_KEY: SPASE>Particle>ParticleType:Ion,ParticleQuantity:NumberFlux,Qualifier:Differential @@ -74,15 +78,16 @@ lo-sw-species-attrs: DEPEND_0: epoch DEPEND_1: esa_step DEPEND_2: spin_sector - DISPLAY_TYPE: time_series + DISPLAY_TYPE: spectrogram FIELDNAM: "Sunward - {species}" FILLVAL: *real_fillval - FORMAT: F13.4 + FORMAT: F32.1 LABL_PTR_1: esa_step_label LABL_PTR_2: spin_sector_label + SCALETYP: log UNITS: "#/(cm^2-s-sr-keV/q)" VALIDMIN: 0.0 - VALIDMAX: 16777216.0 + VALIDMAX: *species_valid_max VAR_TYPE: data DICT_KEY: SPASE>Particle>ParticleType:Ion,ParticleQuantity:NumberFlux,Qualifier:Differential @@ -91,15 +96,16 @@ lo-species-unc-attrs: DEPEND_0: epoch DEPEND_1: esa_step DEPEND_2: spin_sector - DISPLAY_TYPE: time_series + DISPLAY_TYPE: spectrogram FIELDNAM: "Non-sunward - {species}" FILLVAL: *real_fillval - FORMAT: F20.9 + FORMAT: F32.1 LABL_PTR_1: esa_step_label LABL_PTR_2: spin_sector_label + SCALETYP: log UNITS: "#/(cm^2-s-sr-keV/q)" VALIDMIN: 0.0 - VALIDMAX: 16777216.0 + VALIDMAX: *species_valid_max VAR_TYPE: data DICT_KEY: SPASE>Particle>ParticleType:Ion,ParticleQuantity:NumberFlux,Qualifier:Uncertainty @@ -108,15 +114,16 @@ lo-pui-species-unc-attrs: DEPEND_0: epoch DEPEND_1: esa_step DEPEND_2: spin_sector - DISPLAY_TYPE: time_series + DISPLAY_TYPE: spectrogram FIELDNAM: "Sunward - {species}" FILLVAL: *real_fillval - FORMAT: F20.9 + FORMAT: F32.1 LABL_PTR_1: esa_step_label LABL_PTR_2: spin_sector_label + SCALETYP: log UNITS: "#/(cm^2-s-sr-keV/q)" VALIDMIN: 0.0 - VALIDMAX: 16777216.0 + VALIDMAX: *species_valid_max VAR_TYPE: data DICT_KEY: SPASE>Particle>ParticleType:Ion,ParticleQuantity:NumberFlux,Qualifier:Uncertainty @@ -125,14 +132,15 @@ lo-sw-species-unc-attrs: DEPEND_0: epoch DEPEND_1: esa_step DEPEND_2: spin_sector - DISPLAY_TYPE: time_series + DISPLAY_TYPE: spectrogram FIELDNAM: "Sunward - {species}" FILLVAL: *real_fillval - FORMAT: F20.9 + FORMAT: F32.1 LABL_PTR_1: esa_step_label LABL_PTR_2: spin_sector_label + SCALETYP: log UNITS: "#/(cm^2-s-sr-keV/q)" VALIDMIN: 0.0 - VALIDMAX: 16777216.0 + VALIDMAX: *species_valid_max VAR_TYPE: data DICT_KEY: SPASE>Particle>ParticleType:Ion,ParticleQuantity:NumberFlux,Qualifier:Uncertainty \ No newline at end of file diff --git a/imap_processing/codice/codice_l2.py b/imap_processing/codice/codice_l2.py index 8876d6bf2f..a965438891 100644 --- a/imap_processing/codice/codice_l2.py +++ b/imap_processing/codice/codice_l2.py @@ -815,7 +815,11 @@ def process_hi_omni(dependencies: ProcessingInputCollection) -> xr.Dataset: # Add these new coordinates new_coords = { - "energy_h": l1b_dataset["energy_h"], + "energy_h": xr.DataArray( + l1b_dataset["energy_h"].values, + dims=("energy_h",), + attrs=cdf_attrs.get_variable_attributes("energy_h", check_schema=False), + ), "energy_h_label": xr.DataArray( l1b_dataset["energy_h"].values.astype(str), dims=("energy_h",), @@ -823,7 +827,11 @@ def process_hi_omni(dependencies: ProcessingInputCollection) -> xr.Dataset: "energy_h_label", check_schema=False ), ), - "energy_he3": l1b_dataset["energy_he3"], + "energy_he3": xr.DataArray( + l1b_dataset["energy_he3"].values, + dims=("energy_he3",), + attrs=cdf_attrs.get_variable_attributes("energy_he3", check_schema=False), + ), "energy_he3_label": xr.DataArray( l1b_dataset["energy_he3"].values.astype(str), dims=("energy_he3",), @@ -831,7 +839,11 @@ def process_hi_omni(dependencies: ProcessingInputCollection) -> xr.Dataset: "energy_he3_label", check_schema=False ), ), - "energy_he4": l1b_dataset["energy_he4"], + "energy_he4": xr.DataArray( + l1b_dataset["energy_he4"].values, + dims=("energy_he4",), + attrs=cdf_attrs.get_variable_attributes("energy_he4", check_schema=False), + ), "energy_he4_label": xr.DataArray( l1b_dataset["energy_he4"].values.astype(str), dims=("energy_he4",), @@ -839,7 +851,11 @@ def process_hi_omni(dependencies: ProcessingInputCollection) -> xr.Dataset: "energy_he4_label", check_schema=False ), ), - "energy_c": l1b_dataset["energy_c"], + "energy_c": xr.DataArray( + l1b_dataset["energy_c"].values, + dims=("energy_c",), + attrs=cdf_attrs.get_variable_attributes("energy_c", check_schema=False), + ), "energy_c_label": xr.DataArray( l1b_dataset["energy_c"].values.astype(str), dims=("energy_c",), @@ -847,7 +863,11 @@ def process_hi_omni(dependencies: ProcessingInputCollection) -> xr.Dataset: "energy_c_label", check_schema=False ), ), - "energy_o": l1b_dataset["energy_o"], + "energy_o": xr.DataArray( + l1b_dataset["energy_o"].values, + dims=("energy_o",), + attrs=cdf_attrs.get_variable_attributes("energy_o", check_schema=False), + ), "energy_o_label": xr.DataArray( l1b_dataset["energy_o"].values.astype(str), dims=("energy_o",), @@ -855,7 +875,13 @@ def process_hi_omni(dependencies: ProcessingInputCollection) -> xr.Dataset: "energy_o_label", check_schema=False ), ), - "energy_ne_mg_si": l1b_dataset["energy_ne_mg_si"], + "energy_ne_mg_si": xr.DataArray( + l1b_dataset["energy_ne_mg_si"].values, + dims=("energy_ne_mg_si",), + attrs=cdf_attrs.get_variable_attributes( + "energy_ne_mg_si", check_schema=False + ), + ), "energy_ne_mg_si_label": xr.DataArray( l1b_dataset["energy_ne_mg_si"].values.astype(str), dims=("energy_ne_mg_si",), @@ -863,7 +889,11 @@ def process_hi_omni(dependencies: ProcessingInputCollection) -> xr.Dataset: "energy_ne_mg_si_label", check_schema=False ), ), - "energy_fe": l1b_dataset["energy_fe"], + "energy_fe": xr.DataArray( + l1b_dataset["energy_fe"].values, + dims=("energy_fe",), + attrs=cdf_attrs.get_variable_attributes("energy_fe", check_schema=False), + ), "energy_fe_label": xr.DataArray( l1b_dataset["energy_fe"].values.astype(str), dims=("energy_fe",), @@ -871,7 +901,11 @@ def process_hi_omni(dependencies: ProcessingInputCollection) -> xr.Dataset: "energy_fe_label", check_schema=False ), ), - "energy_uh": l1b_dataset["energy_uh"], + "energy_uh": xr.DataArray( + l1b_dataset["energy_uh"].values, + dims=("energy_uh",), + attrs=cdf_attrs.get_variable_attributes("energy_uh", check_schema=False), + ), "energy_uh_label": xr.DataArray( l1b_dataset["energy_uh"].values.astype(str), dims=("energy_uh",), @@ -879,7 +913,11 @@ def process_hi_omni(dependencies: ProcessingInputCollection) -> xr.Dataset: "energy_uh_label", check_schema=False ), ), - "energy_junk": l1b_dataset["energy_junk"], + "energy_junk": xr.DataArray( + l1b_dataset["energy_junk"].values, + dims=("energy_junk",), + attrs=cdf_attrs.get_variable_attributes("energy_junk", check_schema=False), + ), "energy_junk_label": xr.DataArray( l1b_dataset["energy_junk"].values.astype(str), dims=("energy_junk",), @@ -892,7 +930,13 @@ def process_hi_omni(dependencies: ProcessingInputCollection) -> xr.Dataset: dims=("epoch",), attrs=cdf_attrs.get_variable_attributes("epoch", check_schema=False), ), + "epoch_delta_plus": l1b_dataset["epoch_delta_plus"], + "epoch_delta_minus": l1b_dataset["epoch_delta_minus"], } + + l1b_dataset["epoch"].attrs["DELTA_MINUS_VAR"] = "epoch_delta_minus" + l1b_dataset["epoch"].attrs["DELTA_PLUS_VAR"] = "epoch_delta_plus" + l1b_dataset = l1b_dataset.assign_coords(new_coords) return l1b_dataset @@ -942,7 +986,11 @@ def process_hi_sectored(dependencies: ProcessingInputCollection) -> xr.Dataset: "spin_sector_label", check_schema=False ), ), - "energy_h": l1b_dataset["energy_h"], + "energy_h": xr.DataArray( + l1b_dataset["energy_h"].values, + dims=("energy_h",), + attrs=cdf_attrs.get_variable_attributes("energy_h", check_schema=False), + ), "energy_h_label": xr.DataArray( l1b_dataset["energy_h"].values.astype(str), dims=("energy_h",), @@ -950,7 +998,13 @@ def process_hi_sectored(dependencies: ProcessingInputCollection) -> xr.Dataset: "energy_h_label", check_schema=False ), ), - "energy_he3he4": l1b_dataset["energy_he3he4"], + "energy_he3he4": xr.DataArray( + l1b_dataset["energy_he3he4"].values, + dims=("energy_he3he4",), + attrs=cdf_attrs.get_variable_attributes( + "energy_he3he4", check_schema=False + ), + ), "energy_he3he4_label": xr.DataArray( l1b_dataset["energy_he3he4"].values.astype(str), dims=("energy_he3he4",), @@ -958,7 +1012,13 @@ def process_hi_sectored(dependencies: ProcessingInputCollection) -> xr.Dataset: "energy_he3he4_label", check_schema=False ), ), - "energy_cno": l1b_dataset["energy_cno"], + "energy_cno": xr.DataArray( + l1b_dataset["energy_cno"].values, + dims=("energy_cno",), + attrs=cdf_attrs.get_variable_attributes( + "energy_cno", check_schema=False + ), + ), "energy_cno_label": xr.DataArray( l1b_dataset["energy_cno"].values.astype(str), dims=("energy_cno",), @@ -966,7 +1026,13 @@ def process_hi_sectored(dependencies: ProcessingInputCollection) -> xr.Dataset: "energy_cno_label", check_schema=False ), ), - "energy_fe": l1b_dataset["energy_fe"], + "energy_fe": xr.DataArray( + l1b_dataset["energy_fe"].values, + dims=("energy_fe",), + attrs=cdf_attrs.get_variable_attributes( + "energy_fe", check_schema=False + ), + ), "energy_fe_label": xr.DataArray( l1b_dataset["energy_fe"].values.astype(str), dims=("energy_fe",), @@ -975,6 +1041,8 @@ def process_hi_sectored(dependencies: ProcessingInputCollection) -> xr.Dataset: ), ), "epoch": l1b_dataset["epoch"], + "epoch_delta_plus": l1b_dataset["epoch_delta_plus"], + "epoch_delta_minus": l1b_dataset["epoch_delta_minus"], "elevation_angle": xr.DataArray( HI_L2_ELEVATION_ANGLE, dims=("elevation_angle",), @@ -993,6 +1061,9 @@ def process_hi_sectored(dependencies: ProcessingInputCollection) -> xr.Dataset: attrs=cdf_attrs.get_global_attributes("imap_codice_l2_hi-sectored"), ) + l1b_dataset["epoch"].attrs["DELTA_MINUS_VAR"] = "epoch_delta_minus" + l1b_dataset["epoch"].attrs["DELTA_PLUS_VAR"] = "epoch_delta_plus" + efficiencies_file = dependencies.get_file_paths( descriptor="l2-hi-sectored-efficiency" )[0] @@ -1046,10 +1117,14 @@ def process_hi_sectored(dependencies: ProcessingInputCollection) -> xr.Dataset: ) # Replace existing species data with omni-directional intensities + species_attrs = cdf_attrs.get_variable_attributes(species, check_schema=False) + # Replace {species} in attributes with actual species name + species_attrs = apply_replacements_to_attrs(species_attrs, {"species": species}) + l2_dataset[species] = xr.DataArray( sectored_intensities.data, dims=("epoch", f"energy_{species}", "spin_sector", "elevation_angle"), - attrs=cdf_attrs.get_variable_attributes(species, check_schema=False), + attrs=species_attrs, ) # Calculate uncertainty if available species_uncertainty = f"unc_{species}" @@ -1057,12 +1132,18 @@ def process_hi_sectored(dependencies: ProcessingInputCollection) -> xr.Dataset: sectored_uncertainties = l1b_dataset[species_uncertainty] / ( geometric_factor_da * species_efficiencies * energy_passbands ) + unc_species_attrs = cdf_attrs.get_variable_attributes( + species_uncertainty, check_schema=False + ) + # Replace {species} in attributes with actual species name + unc_species_attrs = apply_replacements_to_attrs( + unc_species_attrs, {"species": species} + ) + l2_dataset[species_uncertainty] = xr.DataArray( sectored_uncertainties.data, dims=("epoch", f"energy_{species}", "spin_sector", "elevation_angle"), - attrs=cdf_attrs.get_variable_attributes( - species_uncertainty, check_schema=False - ), + attrs=unc_species_attrs, ) # Calculate spin angle From 234466a085987c9b0ff115d6643da27afbce6032 Mon Sep 17 00:00:00 2001 From: Tenzin Choedon Date: Tue, 31 Mar 2026 11:43:06 -0600 Subject: [PATCH 2/2] test fixes --- .../cdf/config/imap_codice_l2-lo-species_variable_attrs.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/imap_processing/cdf/config/imap_codice_l2-lo-species_variable_attrs.yaml b/imap_processing/cdf/config/imap_codice_l2-lo-species_variable_attrs.yaml index 87f46be289..d6f44a8748 100644 --- a/imap_processing/cdf/config/imap_codice_l2-lo-species_variable_attrs.yaml +++ b/imap_processing/cdf/config/imap_codice_l2-lo-species_variable_attrs.yaml @@ -1,4 +1,5 @@ # ----------------------------- Useful variables ----------------------------- +uint8_fillval: &uint8_fillval 255 real_fillval: &real_fillval -1.0e+31 max_float: &max_float 3.4028235e+38 species_valid_max: &species_valid_max 1e20