Predicting liquid droplets in mixed-phase clouds beyond lidar attenuation using artificial neural nets and Doppler cloud radar spectra
VOODOO is a machine learning approach based convolutional neural networks (CNN) to relate Doppler spectra morphologies to the presence of (supercooled) liquid cloud droplets in mixed-phase clouds.
VoodooNet requires Python 3.10.
Before installing VoodooNet, install PyTorch according to your infrastructure. For example on a Linux machine without GPU you might run:
pip3 install torch --extra-index-url https://download.pytorch.org/whl/cpu
pip3 install voodoonet
pip3 install -e .[dev]
If you wish to acknowledge VoodooNet in your publication, please cite:
Schimmel et al. (2022). Identifying cloud droplets beyond lidar attenuation from vertically pointing cloud radar observations using artificial neural networks. Atmos. Meas. Tech., 15(18), 5343–5366. https://doi.org/10.5194/amt-15-5343-2022
import glob
import voodoonet
rpg_files = glob.glob('/path/to/rpg/files/*.LV0')
probability_liquid = voodoonet.infer(rpg_files)
You can for example plot the resulting liquid probability:
import matplotlib.pyplot as plt
plt.pcolor(probability_liquid.T)
plt.show()
Download some RPG-FMCW-94 raw files and corresponding classification files from the Cloudnet data portal API. For example, for Leipzig LIM between 2021-01-10 and 2021-01-15:
curl "https://cloudnet.fmi.fi/api/raw-files?dateFrom=2021-01-10&dateTo=2021-01-15&site=leipzig-lim&instrument=rpg-fmcw-94&filenameSuffix=.LV0" | jq '.[]["downloadUrl"]' | xargs -n1 curl -O
curl "https://cloudnet.fmi.fi/api/files?dateFrom=2021-01-10&dateTo=2021-01-15&site=leipzig-lim&product=classification" | jq '.[]["downloadUrl"]' | xargs -n1 curl -O
import glob
import voodoonet
rpg_files = glob.glob('*.LV0')
classification_files = glob.glob('*classification.nc')
voodoonet.generate_training_data(rpg_files, classification_files, 'training-data-set.pt')
Alternatively, just use N random days:
import voodoonet
voodoonet.generate_training_data_for_cloudnet('leipzig-lim', 'training-data-set.pt', n_days=5)
import voodoonet
pre_computed_training_data_set = 'training-data-set.pt'
voodoonet.train(pre_computed_training_data_set, 'trained-model.pt')
import glob
import voodoonet
from voodoonet.utils import VoodooOptions
rpg_files = glob.glob('/path/to/rpg/files/*.LV0')
options = VoodooOptions(trained_model='new_model.pt')
probability_liquid = voodoonet.infer(rpg_files, options=options)