JPSS_CRIS#
- class earth2studio.data.JPSS_CRIS(
- satellites=None,
- subsample=1,
- apodize=True,
- time_tolerance=numpy.timedelta64(10, 'm'),
- cache=True,
- verbose=True,
- async_timeout=600,
- max_workers=24,
- retries=3,
- Global
JPSS CrIS (Cross-track Infrared Sounder) Full Spectral Resolution (FSR) Level 1 brightness temperature observations served from NOAA Open Data on AWS.
Raw spectral radiance from the HDF5 SDR files is converted to brightness temperature (K) via the inverse Planck function so that the
observationcolumn is directly comparable withUFSObsSat.By default, Hamming apodization is applied to the unapodized (sinc ILS) radiance before the Planck inversion. This matches the processing used by NCEP/GSI (which receives Hamming-apodized CrIS radiance via BUFR) and produces brightness temperatures consistent with
UFSObsSat. The 2 guard channels at each end of each band (4 per band, 12 total) are trimmed during apodization, yielding 2211 science channels. Setapodize=Falseto retain the full 2223 unapodized channels (including 12 guard channels withchannel_index=0).Each HDF5 granule contains a small number of scan lines, each with 30 Fields of Regard (FOR) and 9 Fields of View (FOV) per FOR (3x3 detector array). In FSR mode the instrument produces 2223 spectral channels:
LWIR (9.14–15.38 µm, 650–1095 cm^-1): 717 channels at 0.625 cm^-1
MWIR (5.71–8.26 µm, 1210–1750 cm^-1): 869 channels at 0.625 cm^-1
SWIR (3.92–4.64 µm, 2155–2550 cm^-1): 637 channels at 0.625 cm^-1
When
apodize=True(default), guard channels are trimmed and the output has 2211 channels with contiguouschannel_index1–2211.When
apodize=False, the returnedDataFramehas one row per FOV per channel including guard channels. Thechannel_indexcolumn uses the GSIsensor_channumbering convention:LWIR channels 0–1 (0-based) → sensor_chan 0 (guard; not in GSI)
LWIR channels 2–714 (0-based) → sensor_chan 1–713
LWIR channels 715–716 (0-based) → sensor_chan 0 (guard; not in GSI)
MWIR channels 717–718 (0-based) → sensor_chan 0 (guard; not in GSI)
MWIR channels 719–1583 (0-based) → sensor_chan 714–1578
MWIR channels 1584–1585 (0-based) → sensor_chan 0 (guard; not in GSI)
SWIR channels 1586–1587 (0-based) → sensor_chan 0 (guard; not in GSI)
SWIR channels 1588–2220 (0-based) → sensor_chan 1579–2211
SWIR channels 2221–2222 (0-based) → sensor_chan 0 (guard; not in GSI)
Data is stored as paired HDF5 files on S3:
SDR (
SCRIF_*.h5): spectral radiance arraysGEO (
GCRSO_*.h5): geolocation (lat, lon, angles, time)
- Parameters:
satellites (list[str] | None, optional) – Satellite short-names to query. Valid values are
"n20"(NOAA-20),"n21"(NOAA-21), and"npp"(Suomi NPP). By defaultNone, which queries all valid satellites.subsample (int, optional) – Temporal sub-sampling factor applied at the granule level. Each CrIS granule covers roughly 32 seconds of observations; setting
subsample=Nselects every N-th granule from the time-ordered list, reducing data volume by approximately that factor. By default 1 (no sub-sampling).apodize (bool, optional) –
Apply Hamming apodization to the unapodized SDR radiance before converting to brightness temperature. When
True(default), the 3-tap Hamming kernel[0.23, 0.54, 0.23]is convolved per-band in radiance space and the 2 guard channels at each end of each band are trimmed, yielding 2211 science channels that are directly comparable withUFSObsSat. Set toFalseto retain the unapodized spectra with all 2223 channels (including 12 guard channels withchannel_index=0).Note
The spectral-domain 3-tap kernel matches interferogram-domain Hamming for smooth spectral regions (window channels,
sensor_chan≥ 200: agreement < 0.5 K with UFS/GSI). Channels on sharp CO₂ Q-branch features near 667 cm⁻¹ and 720 cm⁻¹ may show residuals of 5–20 K because the 3-tap discrete convolution does not fully replicate the interferogram-domain apodization applied by NESDIS upstream of GSI.time_tolerance (TimeTolerance, optional) – Time tolerance window for filtering observations. Accepts a single value (symmetric +/- window) or a tuple (lower, upper) for asymmetric windows, by default, np.timedelta64(10, ‘m’).
cache (bool, optional) – Cache downloaded HDF5 files locally, by default True
verbose (bool, optional) – Show download progress bars, by default True
async_timeout (int, optional) – Total timeout in seconds for the async fetch, by default 600
max_workers (int, optional) – Maximum number of concurrent S3 fetch tasks, by default 24
retries (int, optional) – Per-file retry count on transient I/O failures, by default 3
Warning
This is a remote data source and can potentially download a large amount of data to your local machine for large requests. Each CrIS granule pair (SDR + GEO) is approximately 16 MB.
Note
Additional information on the data repository:
- __call__(time, variable, fields=None)[source]#
Fetch CrIS FSR brightness temperature observations.
- Parameters:
time (datetime | list[datetime] | TimeArray) – Timestamps to return data for (UTC).
variable (str | list[str] | VariableArray) – Variable names to return (e.g.
["crisfsr"]).fields (str | list[str] | pa.Schema | None, optional) – Subset of schema fields to include, by default None (all).
- Returns:
Long-format DataFrame with one row per FOV per channel.
- Return type:
pd.DataFrame
- async fetch(time, variable, fields=None)[source]#
Async implementation of the data fetch.
- Parameters:
time (datetime | list[datetime] | TimeArray) – Timestamps to return data for (UTC).
variable (str | list[str] | VariableArray) – Variable names to return.
fields (str | list[str] | pa.Schema | None, optional) – Subset of schema fields to include, by default None.
- Returns:
Long-format DataFrame.
- Return type:
pd.DataFrame