Instrument Extension

JSON Schema ยท Example

This extension records the instruments that may produce each file and lists its bands in file order. For known instruments, the writer embeds metadata from Awesome Earth Observation Instruments (AEOI). TACO ships a copy under its MIT license.

Collection fields

Field Type Description
instrument:files object Instruments and ordered bands for each structure declaration
instrument:instruments object Metadata for every referenced instrument, limited to the bands in use
instrument:catalogue object Name, version and link of the bundled AEOI catalogue
{
  "instrument:files": {
    "s2.tif": {
      "instruments": ["MSI_S2A"],
      "bands": ["B4"]
    }
  },
  "instrument:instruments": {
    "MSI_S2A": {
      "name": "MultiSpectral Instrument",
      "type": "multispectral",
      "platform": ["Sentinel-2A"],
      "bands": {
        "B4": {
          "center_wavelength": 664.6,
          "bandwidth": 30,
          "common_name": "red",
          "gsd": 10
        }
      }
    }
  },
  "instrument:catalogue": {
    "name": "Awesome Earth Observation Instruments",
    "version": "0.4.0",
    "link": "https://github.com/awesome-spectral-indices/awesome-earth-observation-instruments/raw/refs/heads/main/catalogue/catalogue.json"
  }
}

A declaration may name several compatible instruments. For example, the same band stack may come from Sentinel-2A or Sentinel-2B. Every listed instrument MUST provide every listed band. This does not describe a file assembled from instruments with different band sets.

Each key in instrument:files MUST match a declaration in taco:structure. The writer resolves known identifiers from AEOI, copies only the bands in use and records the catalogue version. A custom instrument needs a non-empty name, type and bands. Each band needs a positive center_wavelength and bandwidth, both in nm.

Level fields

None.

Writer

from taco.extensions.collection.instrument import Instrument

taco.Collection(
    ...,
    instrument=Instrument(
        files={
            "s2.tif": {"instruments": ["MSI_S2A", "MSI_S2B"], "bands": ["B2", "B3", "B4", "B8"]},
            "cam.tif": {"instruments": ["MY_CAMERA"], "bands": ["B1"]},
        },
        instruments={
            "MY_CAMERA": {
                "name": "My camera",
                "type": "multispectral",
                "bands": {"B1": {"center_wavelength": 560, "bandwidth": 40}},
            }
        },
    ),
)

Use instruments only for identifiers missing from AEOI. Pass an Instrument object, not a plain mapping, so the writer can resolve the catalogue records. Writing and validation work offline.