An open-source python software for standardized processing, sharing, and analysis of disdrometer data
| Deployment | |
| Activity | |
| Python Versions | |
| Supported Systems | |
| Project Status | |
| Build Status | |
| Linting | |
| Code Coverage | |
| Code Quality | |
| License | |
| Community | |
| Citation |
- 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 disdrodbIf conda-forge is not set up for your system, see the conda-forge installation guide.
Alternatively, install via pip:
pip install disdrodbTo 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.gitOption 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_directoryDownload all available data:
disdrodb_download_archiveDownload from a specific data source:
disdrodb_download_archive --data_sources EPFLDownload 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",
)
dsThe 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:

π Learn more: See the products documentation for detailed information.
Open the metadata archive directory:
disdrodb_open_metadata_archiveLoad 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.