Skip to article frontmatterSkip to article content

Quasi-Vertical Profiles


ARCO Data Access

Canadian data was converted into Analysis-Ready Cloud-Optimized and can be accessed as follows

import xarray as xr
import icechunk

Configure S3 storage for icechunk. In this case we will analyze Calgary Hail Storm event. However, you can change it to Ontario Derecho by uncommenting the other prefix lines

storage = icechunk.s3_storage(
    bucket='pythia',
    prefix='radar/ams2025/CASSM.zarr', # Calgary Hail Storm
    # prefix='radar/ams2025/CASET.zarr', # CASET Ontario Derecho
    # prefix='radar/ams2025/CASKR.zarr', # CASKR Ontario Derecho

    endpoint_url='https://js2.jetstream-cloud.org:8001',
    anonymous=True,
    region='us-east-1',
    force_path_style=True
)

Creating S3 bucket connection and immutable session

repo = icechunk.Repository.open(storage=storage)
session = repo.readonly_session("main")

Opening the Radar datatree using xarray

dtree = xr.open_datatree(
    session.store, 
    engine="zarr",
    consolidated=False,
    chunks={}
)
dtree
Loading...

We have created a python script with additional functions to keep the notebook simple. If you want to check it out click here

import demo_functions as dmf

we can call the compute_qvp function which will help us to compute QVP for each vpol

%%time
ref_qvp = dmf.compute_qvp(dtree["sweep_1"], var="DBZH")
zdr_qvp = dmf.compute_qvp(dtree["sweep_1"], var="ZDR")
rhohv_qvp = dmf.compute_qvp(dtree["sweep_1"], var="RHOHV")
phidp_qvp = dmf.compute_qvp(dtree["sweep_1"], var="PHIDP")
CPU times: user 354 ms, sys: 30.6 ms, total: 385 ms
Wall time: 403 ms

Finally, we can plot it using ryzhkov_figure function

%%time
dmf.ryzhkov_figure(ref_qvp, zdr_qvp, rhohv_qvp, phidp_qvp)
CPU times: user 2.03 s, sys: 130 ms, total: 2.16 s
Wall time: 3.56 s
<Figure size 800x400 with 8 Axes>