Skip to main content

CMAC: Corrected Precipitation Radar Moments in Antenna Coordinates

CMAC (Corrected Moments in Antenna Coordinates) is a set of algorithms and code that does corrections to Radar data, but also adds fields to the original data. Using fuzzy logic CMAC also calculates gate IDs such as rain, snow and second-trip. Some other examples of the corrections done are velocity dealiasing and attenuation-corrected reflectivity. Example of fields added are rain_rate_A, velocity_texture and filtered_corrected_differential_phase.

More information can be found at https://arm.gov/data/science-data-products/vaps/cmac

The Atmospheric Community Toolkit is installed in this binder and can be used to download data for CMAC from ARM Data Discovery. For an example on how to download ARM datastreams from Data Discovery, click here.

All ARM files are in the format that is needed by CMAC for processing.

Background

In 2010 the Atmospheric Radiation Measurement (ARM) program procured a number of 3 and 5 cm wavelength scanning radars for documenting the macrophysical, microphysical and dynamical structure of precipitating systems. In order to maximize the scientific impact of these instruments, the program supported the development of an application chain to correct for various propagation and measurement issues so that “point” values of the moments of the radar spectrum and polarimetric measurements could be retrieved.

Because these radars operate at shorter wavelengths than the more common 10 cm (S-band) radars, they are more strongly affected by two-way attenuation as the beam propagates through precipitation, and their shorter maximum unambiguous range leads to more frequent Doppler velocity aliasing. CMAC was built to robustly correct for these effects. Rather than have each processing step make its own conditional decision about where to run based on ad-hoc quality measurements, CMAC first performs a gate-by-gate identification of the dominant scattering process at each radar gate (e.g. rain, snow, melting layer, second-trip echo, or no significant scatterer). This gate ID is performed before any corrections are applied, and is used to construct Py-ART gate filters that determine which corrections and retrievals should be applied at each gate — for example, dealiasing is run on every class except “no significant return”, while attenuation correction is only applied to gates classified as rain.

The full application chain includes velocity dealiasing, extraction of propagation differential phase from the measured differential phase, calculation of specific differential phase, calculation and integration of specific attenuation to correct reflectivity, and calculation of rain rate. For the underlying science, motivation and implementation details, see the technical report in documents/technical_document/cmac2p0_technical_report.tex.

Install

CMAC and the required environment can be installed by using the instructions below:

git clone https://github.com/ARM-Development/cmac.git
cd cmac
conda env create -f environment.yml
conda activate cmac_env

If you wish to use the LP phase processing code instead of the CSU code, you will need to set an environment variable to point to the location of the COIN-OR libraries. This can be done by using the following command in the terminal:

export COIN_INSTALL_DIR=/Users/yourusername/youranacondadir/envs/cmac_env

If you are using the Bringi KDP retrieval, method then this is not needed. The Bringi method is the default method for KDP retrieval in CMAC. If you want to use the LP method, then you will need to set the environment variable as described above and then set the kdp_method argument in the config file to ‘lp’.

You will need to install Anaconda Compilers for the installation of CyLP. These compilers can be found here and differ between OS: https://docs.conda.io/projects/conda-build/en/latest/resources/compiler-tools.html

After the compilers are installed, you should be able to install CyLP with:

pip install git+https://github.com/coin-or/CyLP.git

Scripts such as cmac_animation and cmac_dask require additional dependencies:

source activate cmac_env
conda install -c menpo ffmpeg=version
conda install dask ipyparallel

Note: For ffmpeg, depending on the user’s operating system, the version will need to be replaced with corresponding version number found here:

https://anaconda.org/menpo/ffmpeg

Using CMAC

Once downloaded, CMAC can be used in the terminal. The required positional arguments are radar_file, sonde_file and radar_config (the name of a radar configuration, e.g. bnf_csapr2_ppi, that exists in cmac.default_config or in a YAML file passed via --config-file).

An example:

cmac /home/user/cmac2.0/data/radar_file.nc \
     /home/user/cmac2.0/data/sonde_file.cdf \
     bnf_csapr2_ppi

The script also accepts the following optional arguments:

-c, --config-file PATH

Optional YAML config file whose values override the built-in defaults for the given radar_config.

-cf, --clutter-file PATH

Clutter file to use for addition of the clutter gate id.

-o, --out-radar-directory PATH

Output directory for the CMAC radar file. Defaults to the user home directory.

-id, --image-directory PATH

Directory to save CMAC radar quicklook images. Defaults to the user home directory.

-ma, --meta-append SOURCE

Source of metadata for the output file. config (default) uses the per-radar metadata from cmac.default_config / the YAML override. Pass a path to a JSON file to use custom metadata, or default to use the generic global defaults.

--verbose / --no-verbose

Display debugging output. Defaults to off.

For backwards compatibility, the underscore forms of each long option (e.g. --config_file, --clutter_file, --out_radar_directory, --image_directory, --meta_append) are also accepted.

There is currently a default_config.py file with dictionaries for radars. Additional radars can be added there, or supplied through a YAML file passed via --config-file and selected with the radar_config positional argument. See documents/cmac_config_reference.md for a full description of every section and key in that YAML file.

Documentation

Lead Developers

  • Scott Collis

  • Robert Jackson

  • Zach Sherman

  • Max Grover

Credits

The Bringi KDP retrieval method is taken from CSU-RadarTools, which is a collection of radar processing tools developed by Colorado State University. The CSU-RadarTools can be found at https://github.com/CSU-Radarmet/CSU_RadarTools.

Metadata

Release files for cmac 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for cmac 0.2.0
File Size Uploaded
cmac-0.2.0.tar.gz 62.1 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for cmac 0.2.0
File
cmac-0.2.0-cp313-cp313-musllinux_1_2_x86_64.whl CPython 3.13 CPython 3.13 Linux musl 1.2+ x86-64 Details
cmac-0.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 Details
cmac-0.2.0-cp312-cp312-musllinux_1_2_x86_64.whl CPython 3.12 CPython 3.12 Linux musl 1.2+ x86-64 Details
cmac-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 Details
cmac-0.2.0-cp311-cp311-musllinux_1_2_x86_64.whl CPython 3.11 CPython 3.11 Linux musl 1.2+ x86-64 Details
cmac-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 Details
cmac-0.2.0-cp310-cp310-musllinux_1_2_x86_64.whl CPython 3.10 CPython 3.10 Linux musl 1.2+ x86-64 Details
cmac-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 Details

Total release size: 5.1 MB

Release files / cmac-0.2.0.tar.gz

Download URL cmac-0.2.0.tar.gz
Size 62.1 kB
Tags Source
SHA-256 checksum
How to use checksums
b7339669ef5a9e21a28005ca297b05857cc95fa9730c751b5b2ff8aef084ba3c
BLAKE2b-256 checksum
How to use checksums
f63babab62cefd0befcb829666fe420b0b6f277c54f32bdf2799114715c42d0d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 3, 2026.

Transparency log

Release files / cmac-0.2.0-cp313-cp313-musllinux_1_2_x86_64.whl

Download URL cmac-0.2.0-cp313-cp313-musllinux_1_2_x86_64.whl
Size 630.6 kB
Tags CPython 3.13 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
f917bfc23a690f5a4f5195de3484b2d3a36f238a3788b6bcc629c2aab722b9fd
BLAKE2b-256 checksum
How to use checksums
9949b20f08bc6d2ffdc6762eb49c9a34d37f87d64bc54abb981552798d83be20
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 3, 2026.

Transparency log

Release files / cmac-0.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl

Download URL cmac-0.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
Size 624.7 kB
Tags CPython 3.13 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
ede1dca35e6d8f626af26cc27e1d7504d2d7af4efb55a22555b9939a227cb4fe
BLAKE2b-256 checksum
How to use checksums
2f9ca9182bd93b0f1078e3b45c890164eb30f0d3bb0e5d0e8862300e500ee0a3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 3, 2026.

Transparency log

Release files / cmac-0.2.0-cp312-cp312-musllinux_1_2_x86_64.whl

Download URL cmac-0.2.0-cp312-cp312-musllinux_1_2_x86_64.whl
Size 637.6 kB
Tags CPython 3.12 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
6fb338a6f7bbfbb97286cf7b929bcca6cafe65612a3b1e36c750c4d90a1e1bbf
BLAKE2b-256 checksum
How to use checksums
dc10f8faf0cf3c1f2731a246d9ec5ef6bf098f3aa220b42dfbd46ed9d20ec174
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 3, 2026.

Transparency log

Release files / cmac-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl

Download URL cmac-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
Size 637.2 kB
Tags CPython 3.12 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
6b47430f8799c8a49c7f39307f3cfc2436db0293512f8a5cd171f43cad75c25c
BLAKE2b-256 checksum
How to use checksums
118b37e4e2a6c219dca8efa18dbe18267e974eb50ced42a2c322043d9f0a0632
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 3, 2026.

Transparency log

Release files / cmac-0.2.0-cp311-cp311-musllinux_1_2_x86_64.whl

Download URL cmac-0.2.0-cp311-cp311-musllinux_1_2_x86_64.whl
Size 648.7 kB
Tags CPython 3.11 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
d6b72e90521ff20a022b4d172a6a01762d7cb8c4b90f5d614f87c113af718c3b
BLAKE2b-256 checksum
How to use checksums
b8cfba42bbd21506cee5b0d93171376b795014d0e360319d80d83b8f52a442a0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 3, 2026.

Transparency log

Release files / cmac-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl

Download URL cmac-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
Size 639.4 kB
Tags CPython 3.11 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
2c22cb394589bc8782ef805e09f5265c963f56062cfdbe4dcdf65a172bc804fa
BLAKE2b-256 checksum
How to use checksums
1f06b83bdbef74619091df1280fd07f2cf26ba38540ce25f9263876cff9bfb7f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 3, 2026.

Transparency log

Release files / cmac-0.2.0-cp310-cp310-musllinux_1_2_x86_64.whl

Download URL cmac-0.2.0-cp310-cp310-musllinux_1_2_x86_64.whl
Size 625.9 kB
Tags CPython 3.10 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
07b5af0e14938754df3efee7dce8a80e73242725606522f7b70cc003e8eccc8c
BLAKE2b-256 checksum
How to use checksums
027923f847ba8dc35683f64590ada43e630ec92085dea80c2d9d6e8a689e4c0c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 3, 2026.

Transparency log

Release files / cmac-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl

Download URL cmac-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
Size 616.6 kB
Tags CPython 3.10 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
7d626523bea06a78b0d99d1589070aa55974bfac82debe2366850cc760ad61f1
BLAKE2b-256 checksum
How to use checksums
3631825e429e03a50d06f74b262e535f9becaa7879f0bc6492c5b4a10a47ee2e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 3, 2026.

Transparency log

Release history Release notifications | RSS feed

0.3.0

9 release files

This release

0.2.0 This release

9 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page