ceil-feature-detection
Ceilometer feature detection from NetCDF files: clouds, precipitation, fog, and boundary-layer detection.
Features
- A-trous (stationary) wavelet transform: multi‑scale analysis of attenuated backscatter.
- Automated thresholding: blockwise Otsu on combined wavelet/remnant field.
- Denoising: remove erroneous regions/artifacts prior to layer extraction
- Cloud/precip/fog flags: per-time-step boolean indicators.
- Layer extraction: Thresholded PBL/Residual Layer/other stored in a multidimensional ndarray.
- NetCDF I/O: read/write with atomic file replacement.
- Command-line & Python API
Installation
pip install ceilfeat
To install the latest version from GitHub:
pip install git+https://github.com/DanielWefer/ceil-feature-detection.git
For development (editable) install with tests:
git clone https://github.com/DanielWefer/ceil-feature-detection.git
cd ceil-feature-detection
env=".venv"
python -m venv "$env"
source "$env/bin/activate"
pip install -e '.[dev]'
pytest -q
Quickstart CLI
Process one or more NetCDF files via the built-in pipeline:
python -m ceilfeat.pipeline --in /path/to/input1.nc /path/to/input2.nc \
--out /path/to/output_dir -vv
--in: input file(s) or glob(s).--out: output file or directory. If a directory, filenames are auto-generated.-v, -vv: increase verbosity.
Python API
import xarray as xr
import ceilfeat as cf
# 1. Open dataset
ds = xr.open_dataset("input.nc").sortby("time")
# 2. Compute wavelet transforms
row_wt, col_wt, remnant = cf.get_wavelets(ds.copy(), ds.range.values, ds.time.values)
# 3. Detect clouds & precip
clouds, precip = cf.get_clouds_and_precip(
ds.beta_att.T.values, ds.range.values, ds.time.values
)
# 4. Flags and threshold
fog, cloud, rain, clear = cf.get_flags(
ds.beta_att.T.values, ds.range.values, ds.time.values
)
thresh = cf.get_thresh(remnant, row_wt, col_wt)
# 5. Denoise & extract layers
clean = cf.remove_noisy_regions(
ds.beta_att.T.values, thresh, ds.range.values, ds.time.values
)
layers = cf.get_layers(clean.values, clean.range.values)
# 6. Write results
cf.create_file(
ds, row_wt, col_wt, remnant,
clouds, precip, fog, rain, cloud, clear,
clean, layers, ds.overlap_function,
output_path="output.nc",
overwrite=True
)
Contributing
- Fork the repo and create a feature branch.
- Write code, tests, and update docs.
- Follow style:
ruff,mypy,pytest. - Submit a pull request.
License
This project is licensed under the GNU Lesser General Public License v2.1 or later. See LICENSE for details.
Metadata
Release files for ceilfeat 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ceilfeat-0.1.2.tar.gz | 32.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ceilfeat-0.1.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 68.9 kB
Release files / ceilfeat-0.1.2.tar.gz
| Download URL | ceilfeat-0.1.2.tar.gz |
|---|---|
| Size | 32.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
42aa227292a992a33f6f52b7b05a3840e18f07af1f6b6d5d18d7b0800226edf1
|
|
BLAKE2b-256 checksum How to use checksums |
10f16f87dbcf5d492cb47f09e5ca8fc655612e514cad9b20d20b80a7628a21ee
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.10.12
|
Release files / ceilfeat-0.1.2-py3-none-any.whl
| Download URL | ceilfeat-0.1.2-py3-none-any.whl |
|---|---|
| Size | 36.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
cf92910539a230c1024f168470c5c92c996a39decadcf03a5c53f483ffbe8bb3
|
|
BLAKE2b-256 checksum How to use checksums |
15aa948be12358cacfc1861cfcb06388233d6bec0acd3b9b62abf6e617969ea2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.10.12
|