An open-source python software for standardized processing, sharing, and analysis of disdrometer data
| Deployment | PyPI Conda |
| Activity | PyPI Downloads Conda Downloads |
| Python Versions | Python Versions |
| Supported Systems | Linux macOS Windows |
| Project Status | Project Status |
| Build Status | Tests Lint Docs |
| Linting | Black Ruff Codespell |
| Code Coverage | Coveralls Codecov |
| Code Quality | Codefactor Codacy Codescene |
| License | License |
| Community | Slack GitHub Discussions |
| Citation | DOI |
- About DISDRODB
- Key Features
- Installation
- Quick Start
- Documentation
- Contributing
- Contributors
- Citation
- License
DISDRODB is an international collaborative initiative to index, collect, and homogenize drop size distribution (DSD) data from disdrometers worldwide. Our mission is to establish a global standard for sharing disdrometer observations, making precipitation microphysics data accessible and interoperable.
Built on FAIR data principles (Findable, Accessible, Interoperable, Reusable) and adhering to Climate & Forecast (CF) conventions, DISDRODB provides:
- π A decentralized data archive for raw disdrometer data
- π Standardized NetCDF products for seamless analysis
- π¬ Quality-controlled datasets ready for scientific research
- π€ An open community for collaboration and knowledge sharing
- Download raw disdrometer data from the DISDRODB Decentralized Data Archive
- Upload your own disdrometer station data to contribute to the global archive
- Explore metadata from stations worldwide through standardized formats
- L0 Product: Convert raw data into standardized NetCDF format
- L1 Product: Generate quality-checked, homogenized measurements at multiple time resolutions
- L2 Product: Compute DSD parameters and derive radar variables (reflectivity, differential reflectivity, etc.)
- Lazy loading: Efficiently work with large datasets using Dask/Xarray
- Event detection: Automatically identify and analyze precipitation events
- Visualization: Built-in plotting functions for DSD quick-looks and data exploration
- xarray accessor: Extended functionality for disdrometer-specific operations
- Open-source and community-maintained
- Active Slack workspace for support and collaboration
- Regular updates and new features based on user feedback
DISDRODB can be installed via conda on Linux, macOS, and Windows:
conda install -c conda-forge disdrodb
If conda-forge is not set up for your system, see the conda-forge installation guide.
Alternatively, install via pip:
pip install disdrodb
To install the latest development version, see the documentation.
Get started with DISDRODB in three simple steps: download metadata, configure paths, and start analyzing data.
The Metadata Archive contains information about all disdrometer stations in DISDRODB (location, sensor type, data availability, etc.).
Option A: Clone with Git (recommended for staying up-to-date):
git clone https://github.com/ltelab/DISDRODB-METADATA.git
Option B: Download a static snapshot:
disdrodb_download_metadata_archive <path/to/DISDRODB-METADATA>
Configure DISDRODB by specifying two directories:
metadata_archive_dir: Path to your local DISDRODB Metadata Archive (the cloned repository)data_archive_dir: Path where DISDRODB will store downloaded raw data and processing products
Note: Paths must end with
\DISDRODB(Windows) or/DISDRODB(macOS/Linux).
import disdrodb # Define your local paths metadata_archive_dir = "<path_to>/DISDRODB-METADATA/DISDRODB" data_archive_dir = "<path_to>/DISDRODB" # Create configuration file disdrodb.define_configs( metadata_archive_dir=metadata_archive_dir, data_archive_dir=data_archive_dir )
This creates a .config_disdrodb.yml file in your home directory.
Verify your configuration:
import disdrodb print("Metadata Archive:", disdrodb.get_metadata_archive_dir()) print("Data Archive:", disdrodb.get_data_archive_dir())
Or via command line:
disdrodb_metadata_archive_directory disdrodb_data_archive_directory
Download all available data:
disdrodb_download_archive
Download from a specific data source:
disdrodb_download_archive --data_sources EPFL
Download a specific station:
disdrodb_download_station EPFL EPFL_2009 10
π‘ Tip: Use
disdrodb_download_archive --helpfor all available options.
Process raw data into standardized NetCDF products (L0, L1, L2) for a specific station:
disdrodb_run_station EPFL EPFL_2009 10 --parallel True --force True
π‘ Tip: Use
disdrodb_run_station --helpto explore processing options.
The L0C product contains raw disdrometer data in standardized NetCDF format. Use open_dataset() to efficiently load data with lazy evaluation (data is only loaded into memory when needed):
import disdrodb ds = disdrodb.open_dataset( product="L0C", data_source="EPFL", campaign_name="HYMEX_LTE_SOP3", station_name="10", ) ds
The L1 product provides quality-controlled measurements at multiple temporal resolutions (1MIN, 5MIN, 10MIN, etc.), including hydrometeor classification and quality flags. This is the recommended product for precipitation analysis.
import disdrodb import matplotlib.pyplot as plt # Load L1 product at 1-minute resolution ds = disdrodb.open_dataset( product="L1", data_source="EPFL", campaign_name="EPFL_2009", station_name="10", temporal_resolution="1MIN", ) # Compute particle counts for event detection ds["n_particles"] = ds["n_particles"].compute() # Identify and visualize precipitation events for ds_event in ds.disdrodb.split_into_events( variable="n_particles", threshold=10, neighbor_min_size=2, neighbor_time_interval="5MIN", event_max_time_gap="2H", event_min_duration="20MIN", event_min_size=5, sortby=lambda ds_event: ds_event["n_particles"].sum(dim="time").max(), sortby_order="decreasing", ): # Generate DSD quick-look plots ds_event.disdrodb.plot_dsd_quicklook( hours_per_slice=3, max_rows=6, ) plt.show()
You should see quick-look plots of the PSD for the identified precipitation events, similar to this: alt text
π Learn more: See the products documentation for detailed information.
Open the metadata archive directory:
disdrodb_open_metadata_archive
Load all station metadata into a pandas DataFrame:
import disdrodb df = disdrodb.read_metadata_archive() df.head()
This README provides a quick overview. For comprehensive information, visit our documentation:
π https://disdrodb.readthedocs.io/en/latest/
- π Detailed product specifications (L0, L1, L2)
- π§ Advanced processing options and customization
- π€ Guide to contributing your own data
- π» API reference and code examples
- π Jupyter notebook tutorials
- β FAQs and troubleshooting
We welcome contributions and feedback from the community! Here's how to get involved:
- Slack Workspace : Join discussions, ask questions, and collaborate
- GitHub Discussions : Share ideas and start conversations
- GitHub Issues : Report bugs or request features
- π Share your data: Contribute disdrometer observations to the archive
- π» Improve code: Submit bug fixes or new features via pull requests
- π Enhance documentation: Help improve guides and examples
- π§ͺ Develop algorithms: Propose new analysis methods or quality control procedures
- π Spread the word: Tell others about DISDRODB
See CONTRIBUTING.rst for detailed guidelines.
If you use DISDRODB in your research, please cite:
Gionata Ghiggi, Kim Candolfi, RΓ©gis Longchamp, Charlotte Weil, Alexis Berne (2023). ltelab/disdrodb. Zenodo. https://doi.org/10.5281/zenodo.7680581
For version-specific citations, visit the Zenodo record.
This project is licensed under the GPL 3.0 License.