Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions imap_processing/cdf/config/imap_lo_global_cdf_attrs.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,12 @@ imap_lo_l1c_pset:
Logical_source: imap_lo_l1c_pset
Logical_source_description: IMAP Mission IMAP-Lo Instrument Level-1C Data

imap_lo_l1c_quickmap:
<<: *instrument_base
Data_type: L1C_quickmap>Level-1C QuickMap (Histogram Sky Map)
Logical_source: imap_lo_l1c_quickmap
Logical_source_description: IMAP Mission IMAP-Lo Instrument Level-1C Sky Map

# Global attributes for different sensors and sky tiling types and durations
imap_lo_l2_enamap:
<<: *instrument_base
Expand Down
2 changes: 1 addition & 1 deletion imap_processing/cdf/config/imap_lo_l1b_variable_attrs.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ met:
spin_angle:
CATDESC: Spin angle in degrees
FIELDNAM: Spin Angle
FILLVAL: -1.0e31
FILLVAL: -1.0e+31
FORMAT: F8.3
UNITS: deg
VALIDMAX: 360.0
Expand Down
211 changes: 209 additions & 2 deletions imap_processing/cdf/config/imap_lo_l1c_variable_attrs.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ default_attrs: &default

default_float32_attrs: &default_float32
<<: *default
FILLVAL: -1.0e31
FILLVAL: -1.0e+31
FORMAT: F12.6
VALIDMAX: 3.4028235e+38
VALIDMIN: -3.4028235e+38
Expand Down Expand Up @@ -317,4 +317,211 @@ label_vector_HAE:
CATDESC: Cartesian components (x,y,z)
FIELDNAM: Cartesian components
FORMAT: A5
VAR_TYPE: metadata
VAR_TYPE: metadata

# ---------------------------------------------------------------------------
# imap_lo_l1c_quickmap sky-map variables (dims: esa_level, ecl_lat, ecl_lon).
# NaN in the systematic-error maps is written as the default_float32 FILLVAL
# (-1.0e31); readers should treat that value as fill.
# ---------------------------------------------------------------------------
flux_sys_err:
<<: *default_float32
CATDESC: Hydrogen flux systematic error from asymmetric G-factor bounds (geometric mean)
DEPEND_0: esa_level
DEPEND_1: ecl_lat
DEPEND_2: ecl_lon
FIELDNAM: Hydrogen flux systematic error
LABLAXIS: flux sys err
UNITS: "1/(cm^2 s sr keV)"

flux_sys_err_upper:
<<: *default_float32
CATDESC: Upper Hydrogen flux systematic error from the lower G-factor bound
DEPEND_0: esa_level
DEPEND_1: ecl_lat
DEPEND_2: ecl_lon
FIELDNAM: Hydrogen flux systematic error upper
LABLAXIS: flux sys err hi
UNITS: "1/(cm^2 s sr keV)"

flux_sys_err_lower:
<<: *default_float32
CATDESC: Lower Hydrogen flux systematic error from the upper G-factor bound
DEPEND_0: esa_level
DEPEND_1: ecl_lat
DEPEND_2: ecl_lon
FIELDNAM: Hydrogen flux systematic error lower
LABLAXIS: flux sys err lo
UNITS: "1/(cm^2 s sr keV)"

flux_var_total:
<<: *default_float32
CATDESC: Total Hydrogen flux variance (statistical plus systematic)
DEPEND_0: esa_level
DEPEND_1: ecl_lat
DEPEND_2: ecl_lon
FIELDNAM: Hydrogen total flux variance
LABLAXIS: flux var total
UNITS: "1/(cm^2 s sr keV)^2"

cosalpha:
<<: *default_float32
CATDESC: RAM-direction projection factor sin(pivot) * sin(spin-angle)
DEPEND_0: esa_level
DEPEND_1: ecl_lat
DEPEND_2: ecl_lon
FIELDNAM: RAM projection factor cos alpha
LABLAXIS: cos alpha
UNITS: " "

# imap_lo_l1c_quickmap coordinates
esa_level:
CATDESC: ESA energy level
FIELDNAM: ESA level
FORMAT: I1
LABLAXIS: ESA level
UNITS: " "
VALIDMAX: 7
VALIDMIN: 1
VAR_TYPE: support_data

ecl_lat:
CATDESC: Ecliptic latitude bin center (ECLIPJ2000)
FIELDNAM: Ecliptic latitude
FORMAT: F8.3
LABLAXIS: ecl lat
UNITS: "degrees"
VALIDMAX: 90.0
VALIDMIN: -90.0
VAR_TYPE: support_data

ecl_lon:
CATDESC: Ecliptic longitude bin center (ECLIPJ2000)
FIELDNAM: Ecliptic longitude
FORMAT: F8.3
LABLAXIS: ecl lon
UNITS: "degrees"
VALIDMAX: 360.0
VALIDMIN: 0.0
VAR_TYPE: support_data

# imap_lo_l1c_quickmap sky-map data variables
counts:
<<: *default_float32
CATDESC: Hydrogen counts accumulated per sky-map bin
DEPEND_0: esa_level
DEPEND_1: ecl_lat
DEPEND_2: ecl_lon
FIELDNAM: Hydrogen counts
LABLAXIS: counts
UNITS: " "

exposure:
<<: *default_float32
CATDESC: Exposure time accumulated per sky-map bin
DEPEND_0: esa_level
DEPEND_1: ecl_lat
DEPEND_2: ecl_lon
FIELDNAM: Exposure time
LABLAXIS: exposure
UNITS: "s"

rate:
<<: *default_float32
CATDESC: Hydrogen count rate (counts / exposure)
DEPEND_0: esa_level
DEPEND_1: ecl_lat
DEPEND_2: ecl_lon
FIELDNAM: Hydrogen rate
LABLAXIS: rate
UNITS: "1/s"

rate_var:
<<: *default_float32
CATDESC: Hydrogen count rate variance
DEPEND_0: esa_level
DEPEND_1: ecl_lat
DEPEND_2: ecl_lon
FIELDNAM: Hydrogen rate variance
LABLAXIS: rate var
UNITS: "1/s^2"

flux:
<<: *default_float32
CATDESC: Hydrogen flux (rate / (G-factor * energy))
DEPEND_0: esa_level
DEPEND_1: ecl_lat
DEPEND_2: ecl_lon
FIELDNAM: Hydrogen flux
LABLAXIS: flux
UNITS: "1/(cm^2 s sr keV)"

flux_var:
<<: *default_float32
CATDESC: Hydrogen flux statistical variance
DEPEND_0: esa_level
DEPEND_1: ecl_lat
DEPEND_2: ecl_lon
FIELDNAM: Hydrogen flux variance
LABLAXIS: flux var
UNITS: "1/(cm^2 s sr keV)^2"

background_rate:
<<: *default_float32
CATDESC: Hydrogen background rate
DEPEND_0: esa_level
DEPEND_1: ecl_lat
DEPEND_2: ecl_lon
FIELDNAM: Hydrogen background rate
LABLAXIS: bg rate
UNITS: "1/s"

background_rate_var:
<<: *default_float32
CATDESC: Hydrogen background rate variance
DEPEND_0: esa_level
DEPEND_1: ecl_lat
DEPEND_2: ecl_lon
FIELDNAM: Hydrogen background rate variance
LABLAXIS: bg rate var
UNITS: "1/s^2"

background_flux:
<<: *default_float32
CATDESC: Hydrogen background flux
DEPEND_0: esa_level
DEPEND_1: ecl_lat
DEPEND_2: ecl_lon
FIELDNAM: Hydrogen background flux
LABLAXIS: bg flux
UNITS: "1/(cm^2 s sr keV)"

background_flux_var:
<<: *default_float32
CATDESC: Hydrogen background flux variance
DEPEND_0: esa_level
DEPEND_1: ecl_lat
DEPEND_2: ecl_lon
FIELDNAM: Hydrogen background flux variance
LABLAXIS: bg flux var
UNITS: "1/(cm^2 s sr keV)^2"

signal_to_noise:
<<: *default_float32
CATDESC: Signal-to-noise ratio (Hydrogen rate / background rate)
DEPEND_0: esa_level
DEPEND_1: ecl_lat
DEPEND_2: ecl_lon
FIELDNAM: Signal to noise
LABLAXIS: S/N
UNITS: " "

signal_to_noise_var:
<<: *default_float32
CATDESC: Signal-to-noise ratio variance
DEPEND_0: esa_level
DEPEND_1: ecl_lat
DEPEND_2: ecl_lon
FIELDNAM: Signal to noise variance
LABLAXIS: S/N var
UNITS: " "
52 changes: 35 additions & 17 deletions imap_processing/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -1304,23 +1304,41 @@ def do_processing(

elif self.data_level == "l1c":
data_dict = {}
anc_dependencies: list = dependencies.get_file_paths(
source="lo", data_type="ancillary"
)
science_files = dependencies.get_file_paths(source="lo", descriptor="de")
science_files += dependencies.get_file_paths(
source="lo", data_type="l1b", descriptor="goodtimes"
)
science_files += dependencies.get_file_paths(
source="lo", data_type="l1b", descriptor="bgrates"
)
science_files += dependencies.get_file_paths(
source="lo", data_type="l1b", descriptor="histrates"
)
for file in science_files:
dataset = load_cdf(file)
data_dict[dataset.attrs["Logical_source"]] = dataset
datasets = lo_l1c.lo_l1c(data_dict, anc_dependencies)
if self.descriptor == "pset":
anc_dependencies: list = dependencies.get_file_paths(
source="lo", data_type="ancillary"
)
science_files = dependencies.get_file_paths(
source="lo", descriptor="de"
)
science_files += dependencies.get_file_paths(
source="lo", data_type="l1b", descriptor="goodtimes"
)
science_files += dependencies.get_file_paths(
source="lo", data_type="l1b", descriptor="bgrates"
)
science_files += dependencies.get_file_paths(
source="lo", data_type="l1b", descriptor="histrates"
)
for file in science_files:
dataset = load_cdf(file)
data_dict[dataset.attrs["Logical_source"]] = dataset
datasets = lo_l1c.lo_l1c(data_dict, anc_dependencies)

elif self.descriptor == "quickmap":
science_files = (
dependencies.get_file_paths(source="lo", descriptor="de")
+ dependencies.get_file_paths(source="lo", descriptor="nhk")
+ dependencies.get_file_paths(source="lo", descriptor="histrates")
+ dependencies.get_file_paths(source="lo", descriptor="goodtimes")
+ dependencies.get_file_paths(source="lo", descriptor="bgrates")
)

for file in science_files:
dataset = load_cdf(file)
data_dict[dataset.attrs["Logical_source"]] = dataset

datasets = lo_l1c.lo_l1c_quickmap(data_dict)

elif self.data_level == "l2":
data_dict = {}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
year,doy,counts/s
2026,62,0.0014
2026,64,0.0
2026,65,0.0
2026,91,0.03
45 changes: 43 additions & 2 deletions imap_processing/lo/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,8 @@ class LoConstants:
}

# Default background-rate thresholds [counts/s] when no pivot range matches.
THRESHOLD_BG_RATE_RAM_DEFAULT: float = 0.0175
THRESHOLD_BG_RATE_ANTI_RAM_DEFAULT: float = 0.00875
THRESHOLD_BG_RATE_RAM_DEFAULT: float = 0.028
THRESHOLD_BG_RATE_ANTI_RAM_DEFAULT: float = 0.014

# Maximum time gap [s] between consecutive histogram epochs before treating them as
# separate intervals.
Expand All @@ -76,6 +76,47 @@ class LoConstants:
# cycles are covered at interval edges.
GOODTIME_PADDING: float = 2.0

N_COLAT_BINS: int = 30

# The following are indexed by ESA level (0-indexed, ESA level = index + 1)
ESA_ENERGY: ClassVar[list[float]] = [
0.016,
0.030,
0.056,
0.106,
0.200,
0.405,
0.787,
1.821,
]
GEO_FACTOR: ClassVar[list[float]] = [
7.0e-5,
7.9e-5,
9.7e-5,
11.2e-5,
14.0e-5,
17.7e-5,
22.5e-5,
6.721e-5,
]
GEO_FACTOR_ERR: ClassVar[list[float]] = [
4.9e-5,
5.5e-5,
6.8e-5,
3.0e-5,
4.5e-5,
2.0e-5,
1.4e-5,
6.721e-5,
]

# GEO_FACTOR/GEO_FACTOR_ERR above are the raw, pre-recalibration
# values; the quickmap product multiplies them by GEO_FACTOR_SCALE, and derives the
# asymmetric upper/lower G-factor bounds using the two scale factors below.
GEO_FACTOR_SCALE: float = 0.63529412
GEO_FACTOR_SCALE_UPPER: float = 1.57407407
GEO_FACTOR_SCALE_LOWER: float = 0.36728395

# Star-sensor spin-angle binning offset (fractional bin-index shift used when
# computing sample centers), keyed by the IFB star-sync housekeeping state
# (ifb_ctrl_star_sync). Flight software 4.8 enabled star sync ("EN"),
Expand Down
Loading
Loading