Skip to main content

shachen (沙尘)

Infrared satellite dust storm detection in Python — an open implementation of DEBRA-Dust, the Dynamic Enhancement with Background Reduction Algorithm (Miller et al. 2017, doi:10.1002/2017JD027365), for GOES ABI and Himawari AHI.

shachen (沙尘) is Chinese for "sand and dust". The package is a home for infrared-channel dust algorithms; DEBRA-Dust is the first one.

This appears to be the first public implementation of DEBRA.

All equations follow the erratum published 26 February 2020, not the figures as originally printed.

DEBRA-Dust enhanced imagery from GOES-16 ABI and Himawari-8 AHI

Dust is the yellow modulation; everything else stays in greyscale infrared. Left is the case from the paper's Figure 6. Both panels come straight out of scripts/run_case.py, one per sensor.

What it does

DEBRA turns the split-window infrared signal that is specific to mineral dust into a per-pixel confidence field, by comparing each pixel against a dynamically estimated clear-sky background rather than a fixed threshold. That background is what lets it work over bright, emissivity-heterogeneous desert surfaces where fixed thresholds produce false alarms.

io.satellite.load_scene   L1b → bt_* / refl_* on the 2 km fixed grid (satpy)
        │
        ▼
pipeline.run_debra
├─ geo.regrid_latlon      MERRA-2 / CAMEL → satellite grid
├─ solar                  per-pixel solar zenith (day / twilight / night mix)
├─ background             scheme A: CAMEL emissivity × Planck(MERRA-2 skin T)
│    or composite         scheme B: 14-day cloud-cleared same-hour composite
├─ cloudmask              Eqs. 1–12, including the dust restoral term
├─ dust_tests             DT1–DT3, Eqs. 13–15, normalised per-pixel
├─ confidence             Eqs. 16–22 → cf_comb
├─ imagery                Eqs. 23–29, CF-modulated RGB
└─ render                 georeferenced PNG with coastlines (cartopy)

Only one background scheme is used at a time: run_debra requires exactly one of emissivity= or background=. The composite scheme carries the split-window water-vapour depression that the semi-analytic one lacks.

Documentation

https://ringsaturn.github.io/shachen/ — user guide, all 29 equations as implemented, full API reference, and the deviations page.

make -C docs html      # → docs/_build/html/index.html
make -C docs latexpdf  # → docs/_build/latex/shachen.pdf (needs a TeX install)

Install

The core install is small — it runs the entire algorithm on fields you already have in memory, and pulls in no I/O or plotting stack:

pip install shachen

Add what you need on top:

pip install "shachen[satellite]"   # satpy: read and calibrate ABI/AHI L1b
pip install "shachen[data]"        # earthaccess/s3fs: fetch MERRA-2, CAMEL, L1b
pip install "shachen[render]"      # cartopy/matplotlib: georeferenced PNG
pip install "shachen[all]"         # everything, for the reproduction scripts

import shachen pulls in none of the extras.

Usage

import shachen

result = shachen.run_debra(scene, emissivity=camel, skin_temperature=merra_ts)
result["cf_comb"]        # combined dust confidence, 0–1

What scene must contain, the two background schemes, and the imagery chain are covered in the user guide.

Reproducing a reference case end to end needs [all] plus an Earthdata login in ~/.netrc (MERRA-2 and CAMEL are authenticated downloads; GOES L1b on AWS S3 is anonymous):

python scripts/fetch_case.py 2017-03-23-swus   # the paper's Figure 6 case
python scripts/run_case.py   2017-03-23-swus   # → netCDF + PNG

Deviations from the paper

Three printed equations are inconsistent with the paper's own prose and figures even after the erratum, and are implemented per the prose:

Equation Deviation
Eq. 4 (CM2) Magnitude reversed — as printed it saturates the cloud mask over clear sky
Eq. 11 (CM_day) Uses CM3, not the misprinted CM4 (the 3.9 µm test is night-only)
Eq. 15 (DT3) Magnitude reversed — the printed form contradicts the stated intent

Plus one substitution (CAMEL emissivity for the registration-walled UWBF) and one opt-in per-sensor retune.

All of it, with the reasoning and the numbers, is in docs/deviations.md. Read that before changing any of it. constants.py is the single source of every calibration bound, offset and weight from the paper, unit-tested against an independent transcription.

Citation

If you use this software, please cite the original algorithm:

Miller, S. D., Bankert, R. L., Grasso, L. D., Lindsey, D. T., Kuciauskas, A. P., & Combs, C. L. (2017). A dynamic enhancement with background reduction algorithm: Overview and application to satellite-based dust storm detection. Journal of Geophysical Research: Atmospheres, 122, 12,938–12,959. https://doi.org/10.1002/2017JD027365

and, for the implementation, the metadata in CITATION.cff.

This is an independent implementation. It is not produced, endorsed, or verified by the paper's authors, by CIRA, or by NOAA.

License

Apache-2.0. See NOTICE for attribution requirements.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

shachen-0.1.0.tar.gz (29.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

shachen-0.1.0-py3-none-any.whl (37.6 kB view details)

Uploaded Python 3

File details

Details for the file shachen-0.1.0.tar.gz.

File metadata

  • Download URL: shachen-0.1.0.tar.gz
  • Upload date:
  • Size: 29.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for shachen-0.1.0.tar.gz
Algorithm Hash digest
SHA256 e691ddf0589b6f502aaeba9c829bdb249a506d141f7c6651c4f9e0edbf86892a
MD5 b48189fdbbcc8f2bcc50d4a42db9e10c
BLAKE2b-256 113638b019d8d8edfcfe49037a29d8b0ffb7e1d5bcef4538952ba71ab334cb6f

See more details on using hashes here.

Provenance

The following attestation bundles were made for shachen-0.1.0.tar.gz:

Publisher: release.yml on ringsaturn/shachen

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file shachen-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: shachen-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 37.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for shachen-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3a5ad66bbd012c337ac2c058ecf6c9b2c363145fbe9da2c7bf6e1818f1f7e2e2
MD5 3868c26f88a78b73854b9e122e0bbb26
BLAKE2b-256 73939ab459d390bf68dc0960e157bf4c07d4e4dbc34f8aec0d58f2e6fa977c41

See more details on using hashes here.

Provenance

The following attestation bundles were made for shachen-0.1.0-py3-none-any.whl:

Publisher: release.yml on ringsaturn/shachen

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.2.3

2 files

0.2.2

2 files

0.2.1

2 files

0.2.0

2 files

This release

0.1.0 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page