# Instruments / Sensors
#
# Active or passive sensors mounted on platforms (platforms.yaml).
# Each instrument declares either:
#   - spectral_bands: [spyndex IDs from spectral-bands.yaml]  (multispectral)
#   - spectral_grid: <id from spectral-grids.yaml>            (hyperspectral)
#
# Spec: docs/spec/SENSOR_CATALOG.md
# Crosswalks: STAC `instruments[]`, WMO OSCAR Instruments, CEOS MIM-DB.
#
# Types (controlled vocabulary):
#   passive_optical_multispectral | passive_optical_hyperspectral
#   passive_optical_ultraspectral | thermal_ir
#   sar | lidar
#   passive_microwave_radiometer | radar_altimeter | gravimetry

schema_version: "1.0"

instruments:

  # ─── LANDSAT INSTRUMENTS ────────────────────────────────────────

  mss:
    name: "MSS"
    full_name: "Multispectral Scanner (Landsat 1-5)"
    type: passive_optical_multispectral
    measurement: surface_reflectance
    spectral_bands: [G, R, N, N2]
    swath_km: 185
    spatial_resolution_m:
      optical: 60

  tm:
    name: "TM"
    full_name: "Thematic Mapper (Landsat 4/5)"
    type: passive_optical_multispectral
    measurement: surface_reflectance
    spectral_bands: [B, G, R, N, S1, S2, T]
    swath_km: 185
    spatial_resolution_m:
      optical: 30
      thermal: 120

  etm-plus:
    name: "ETM+"
    full_name: "Enhanced Thematic Mapper Plus (Landsat 7)"
    type: passive_optical_multispectral
    measurement: surface_reflectance
    spectral_bands: [B, G, R, N, S1, S2, T, P]
    swath_km: 185
    spatial_resolution_m:
      optical: 30
      panchromatic: 15
      thermal: 60

  oli:
    name: "OLI"
    full_name: "Operational Land Imager (Landsat 8)"
    type: passive_optical_multispectral
    measurement: surface_reflectance
    spectral_bands: [CA, B, G, R, N, S1, S2, P, WV]
    swath_km: 185
    spatial_resolution_m:
      visible: 30
      nir: 30
      swir: 30
      panchromatic: 15

  tirs:
    name: "TIRS"
    full_name: "Thermal Infrared Sensor (Landsat 8)"
    type: thermal_ir
    measurement: brightness_temperature
    spectral_bands: [T1, T2]
    swath_km: 185
    spatial_resolution_m:
      thermal: 100

  oli-2:
    name: "OLI-2"
    full_name: "Operational Land Imager 2 (Landsat 9)"
    type: passive_optical_multispectral
    measurement: surface_reflectance
    spectral_bands: [CA, B, G, R, N, S1, S2, P, WV]
    swath_km: 185
    spatial_resolution_m:
      visible: 30
      nir: 30
      swir: 30
      panchromatic: 15
    notes: >
      Near-identical to OLI on Landsat 8; 14-bit radiometry (vs 12-bit on OLI).

  tirs-2:
    name: "TIRS-2"
    full_name: "Thermal Infrared Sensor 2 (Landsat 9)"
    type: thermal_ir
    measurement: brightness_temperature
    spectral_bands: [T1, T2]
    swath_km: 185
    spatial_resolution_m:
      thermal: 100

  # ─── SENTINEL ───────────────────────────────────────────────────

  msi:
    name: "MSI"
    full_name: "MultiSpectral Instrument (Sentinel-2)"
    type: passive_optical_multispectral
    measurement: surface_reflectance
    spectral_bands: [CA, B, G, R, RE1, RE2, RE3, N, N2, WV, S1, S2]
    swath_km: 290
    spatial_resolution_m:
      visible: 10
      red_edge: 20
      swir: 20
      atmospheric: 60

  c-sar:
    name: "C-SAR"
    full_name: "C-band Synthetic Aperture Radar (Sentinel-1)"
    type: sar
    measurement: backscatter
    frequency_ghz: 5.405
    band_letter: C
    polarizations: [VV, VH, HH, HV]
    modes: [SM, IW, EW, WV]
    swath_km: 250                       # IW mode default
    spatial_resolution_m:
      iw_grd: 10
      iw_slc: 5
      ew_grd: 40
    notes: >
      All-weather, day/night imaging. IW (Interferometric Wide) is the
      default land mode; EW (Extra Wide) for maritime; SM for emergency.

  # ─── MODIS ──────────────────────────────────────────────────────

  modis:
    name: "MODIS"
    full_name: "Moderate Resolution Imaging Spectroradiometer (Terra/Aqua)"
    type: passive_optical_multispectral
    measurement: surface_reflectance + brightness_temperature
    spectral_bands_count: 36           # 36 bands across VIS-LWIR; not all map to spyndex
    swath_km: 2330
    spatial_resolution_m:
      land_visible: 250
      land_swir: 500
      thermal_atmospheric: 1000
    notes: >
      Daily global at 250m-1km. Produces 40+ standard data products
      (NDVI, LST, fire, snow, ocean colour). Spectral coverage spans
      visible through LWIR (~14 μm) — broader than spyndex multispectral
      registry. See product-specific docs for band mapping.

  # ─── HYPERSPECTRAL ──────────────────────────────────────────────

  emit-spectrometer:
    name: "EMIT Spectrometer"
    full_name: "EMIT Imaging Spectrometer (ISS)"
    type: passive_optical_hyperspectral
    measurement: surface_reflectance
    spectral_grid: emit-grid
    swath_km: 75
    spatial_resolution_m: 60
    notes: >
      285-band hyperspectral 381-2493 nm. Mounted on ISS as a hosted
      payload. Daytime acquisitions only. See spectral-grids.yaml.

  aviris-ng:
    name: "AVIRIS-NG"
    full_name: "Airborne Visible/Infrared Imaging Spectrometer - Next Generation"
    type: passive_optical_hyperspectral
    measurement: surface_reflectance
    spectral_grid: aviris-ng-grid
    swath_dependent_on_platform: true
    spatial_resolution_m_range: [0.4, 20]
    notes: >
      Airborne hyperspectral, 425 bands 380-2510 nm at 5 nm sampling.
      Resolution scales with flight altitude (~1m low; ~20m ER-2).

  firefly-hsi:
    name: "Pixxel Firefly HSI"
    full_name: "Pixxel Firefly Hyperspectral Imager"
    type: passive_optical_hyperspectral
    measurement: surface_reflectance
    spectral_grid: firefly-grid
    swath_km: 40
    spatial_resolution_m: 5
    notes: >
      Commercial hyperspectral, ~150 bands 450-900 nm. VNIR only (no SWIR),
      so limited utility for CH4/CO2 vs EMIT/AVIRIS.
    provenance:
      spec_source: spec_sheet
      verified: false

  # ─── COMMERCIAL OPTICAL ─────────────────────────────────────────

  planetscope-sd-imager:
    name: "PlanetScope SuperDove Imager"
    full_name: "PlanetScope SuperDove Optical Imager (PSB.SD)"
    type: passive_optical_multispectral
    measurement: surface_reflectance
    spectral_bands: [CA, B, G, R, RE1, N]   # 8-band SuperDove; spyndex partial mapping
    spectral_bands_count: 8
    swath_km: 24
    spatial_resolution_m: 3
    notes: >
      8-band SuperDove sensor. Older 4-band Doves co-exist in archive;
      band-count varies — recipes should filter on PSB.SD vintage.
    provenance:
      spec_source: spec_sheet
      verified: false

  skysat-optical:
    name: "SkySat Optical"
    full_name: "SkySat Optical Imager"
    type: passive_optical_multispectral
    measurement: surface_reflectance
    spectral_bands: [B, G, R, N, P]
    swath_km: 8
    spatial_resolution_m:
      multispectral: 1.0
      panchromatic: 0.5
    notes: >
      Sub-meter tasking. 5 bands (no SWIR, no red-edge).
    provenance:
      spec_source: spec_sheet
      verified: false

  wv-3-vnir-swir:
    name: "WV-3 VNIR+SWIR"
    full_name: "WorldView-3 VNIR + SWIR Imager"
    type: passive_optical_multispectral
    measurement: surface_reflectance
    spectral_bands: [CA, B, G, Y, R, RE1, N, N2, S1, S2]   # 8 VNIR + 8 SWIR; spyndex partial
    spectral_bands_count: 16
    swath_km: 13.1
    spatial_resolution_m:
      panchromatic: 0.31
      multispectral: 1.24
      swir: 3.7
    notes: >
      8-band VNIR + 8-band SWIR. Highest open-commercial resolution
      globally. Operated by Vantor (formerly Maxar Intelligence).
    provenance:
      spec_source: spec_sheet
      verified: false

  cavis:
    name: "CAVIS"
    full_name: "Clouds, Aerosols, Vapors, Ice, Snow (WorldView-3)"
    type: passive_optical_multispectral
    measurement: atmospheric_correction_aux
    spectral_bands_count: 12
    swath_km: 13.1
    spatial_resolution_m: 30
    notes: >
      Atmospheric-correction support sensor on WV-3. 12 bands optimized
      for aerosol/water-vapour/cirrus retrieval.

  # ─── COMMERCIAL SAR ─────────────────────────────────────────────

  capella-x-sar:
    name: "Capella X-SAR"
    full_name: "Capella X-band Synthetic Aperture Radar"
    type: sar
    measurement: backscatter
    frequency_ghz: 9.6
    band_letter: X
    polarizations: [HH, HV, VV, VH]
    modes: [spotlight, stripmap, sliding-spotlight]
    swath_km: 5                          # spotlight default
    spatial_resolution_m:
      spotlight: 0.5
      stripmap: 1.2
    notes: >
      X-band SAR — different physics from C-band Sentinel-1 (less
      foliage penetration, higher resolution). Tasking-only.
    provenance:
      spec_source: spec_sheet
      verified: false

  # ─── SECONDARY ISS / TERRA / AQUA INSTRUMENTS (placeholders) ────
  #
  # Declared as references for downstream products but not fully
  # specified in this v1; populate per use case.

  ecostress:
    name: "ECOSTRESS"
    full_name: "ECOsystem Spaceborne Thermal Radiometer Experiment (ISS)"
    type: thermal_ir
    measurement: land_surface_temperature
    spectral_bands: [T, T1, T2]
    swath_km: 53
    spatial_resolution_m: 70

  gedi:
    name: "GEDI"
    full_name: "Global Ecosystem Dynamics Investigation (ISS)"
    type: lidar
    measurement: vegetation_height_canopy_structure
    swath_km: 4.2
    spatial_resolution_m: 25
    notes: "Sampling lidar (not imaging); ~25m footprints along track."

  aster:
    name: "ASTER"
    full_name: "Advanced Spaceborne Thermal Emission and Reflection Radiometer (Terra)"
    type: passive_optical_multispectral
    measurement: surface_reflectance + brightness_temperature
    spectral_bands_count: 14
    swath_km: 60
    spatial_resolution_m:
      vnir: 15
      swir: 30
      tir: 90

  misr:
    name: "MISR"
    full_name: "Multi-angle Imaging SpectroRadiometer (Terra)"
    type: passive_optical_multispectral
    measurement: surface_reflectance_multi_angle
    spectral_bands: [B, G, R, N]
    spatial_resolution_m: 275

  mopitt:
    name: "MOPITT"
    full_name: "Measurements of Pollution in the Troposphere (Terra)"
    type: passive_optical_multispectral
    measurement: trace_gas_co_ch4
    notes: "Atmospheric chemistry — CO and CH4 vertical profiles."

  ceres:
    name: "CERES"
    full_name: "Clouds and the Earth's Radiant Energy System (Terra/Aqua)"
    type: passive_optical_multispectral
    measurement: earth_radiation_budget

  airs:
    name: "AIRS"
    full_name: "Atmospheric Infrared Sounder (Aqua)"
    type: passive_optical_ultraspectral
    measurement: temperature_humidity_profile
    spectral_bands_count: 2378

  amsu-a:
    name: "AMSU-A"
    full_name: "Advanced Microwave Sounding Unit-A (Aqua)"
    type: passive_microwave_radiometer
    measurement: temperature_profile

  hytes:
    name: "HyTES"
    full_name: "Hyperspectral Thermal Emission Spectrometer (NASA ER-2)"
    type: passive_optical_hyperspectral
    measurement: brightness_temperature_thermal_hyperspectral
    notes: "256-band thermal hyperspectral, 7.5-12 μm. Airborne."

  mastr:
    name: "MASTER"
    full_name: "MODIS/ASTER Airborne Simulator (NASA ER-2)"
    type: passive_optical_multispectral
    measurement: surface_reflectance + brightness_temperature
    spectral_bands_count: 50
    notes: "Simulator instrument for MODIS/ASTER cal-val campaigns."

  wyvern-vnir-hsi:
    name: "Wyvern VNIR HSI"
    full_name: "Wyvern VNIR Hyperspectral Imaging Sensor"
    type: passive_optical_hyperspectral
    measurement: surface_reflectance
    spectral_bands_count: 31
    spatial_resolution_m: 5.3
    notes: >
      Commercial VNIR hyperspectral, 23-31 bands 459-902 nm. Flying on
      Dragonette-001/002/003/004. VNIR only (no SWIR), so limited utility
      for CH4/CO2 retrieval vs EMIT/AVIRIS/Tanager.

  # ─── VIIRS ─────────────────────────────────────────────────────────────

  viirs:
    name: "VIIRS"
    full_name: "Visible Infrared Imaging Radiometer Suite"
    type: passive_optical_multispectral
    measurement: radiance
    spectral_bands_count: 22
    spatial_resolution_m: 375
    notes: >
      22-band multispectral radiometer (0.41–12.01 µm). Flies on Suomi-NPP
      and NOAA-20. Ocean color bands at 750m (I-band) and 375m (M-band).
      Operational successor to MODIS for ocean color, land surface temperature,
      and cloud/aerosol retrieval.

  # ─── NWP Models (not physical instruments) ────────────────────────────

  nwp-hrrr:
    name: "HRRR NWP Model"
    full_name: "High-Resolution Rapid Refresh (NOAA NCEP)"
    type: nwp-model
    measurement: atmospheric_state
    spatial_resolution_m: 3000
    notes: >
      3km convection-allowing model. Assimilates radar, surface obs, GPS-RO,
      and aircraft data. 18-hour surface + 48-hour extended forecasts, 24 runs/day.

  nwp-wrfhydro:
    name: "WRF-Hydro (NWM)"
    full_name: "National Water Model (NOAA WRF-Hydro)"
    type: nwp-model
    measurement: hydrological_state
    spatial_resolution_m: 1000
    notes: >
      Continental-scale coupled atmospheric-hydrological model. Produces
      streamflow, soil moisture, and snow products for ~2.7M NHD+ reaches.

  tanager-imaging-spectrometer:
    name: "Tanager Imaging Spectrometer"
    full_name: "Planet Tanager Hyperspectral Imaging Spectrometer"
    type: passive_optical_hyperspectral
    measurement: surface_reflectance
    spectral_bands_count: 426
    spatial_resolution_m: 30
    notes: >
      Commercial VSWIR hyperspectral, 426 contiguous bands 380-2500 nm
      (similar coverage to EMIT). Flying on Tanager-1; constellation
      planned. Designed in part for methane / GHG plume detection — open
      sample products include orthorectified CH4 quick-look (`ortho_ql_ch4`)
      and per-plume GeoJSON.

  nwp-ifs:
    name: "IFS NWP Model (ERA5)"
    full_name: "ECMWF Integrated Forecasting System (Cy41r2, ERA5 reanalysis)"
    type: nwp-model
    measurement: atmospheric_state
    spatial_resolution_m: 31000
    notes: >
      4D-Var data-assimilation + forecast system that produces the ERA5
      reanalysis. Assimilates satellite, radiosonde, surface, aircraft, buoy,
      and ocean observations into a physically consistent 0.25 degree hourly
      record spanning 1940 to near-present.
