Skip to main content

Quick Look Content (QLC): An Automated Model–Observation Comparison Suite Optimized for CAMS

Project description

QLC - Quick Look Content

An Automated Model-Observation Comparison Suite Optimized for CAMS

v1.0.2: Major feature release — 25 observation networks (incl. Brazilian networks), 7,855 variables, AERONET AOD mapping, and enhanced workflows.

PyPI


Overview

QLC (Quick Look Content) is a powerful command-line suite for automated model-observation comparisons, designed for climate and air quality model evaluation. Optimized for CAMS (Copernicus Atmospheric Monitoring Service) datasets, it streamlines the entire workflow from data retrieval to publication-quality reports.

Key Features:

  • 7,855 accessible variables (IFS parameters + GHOST networks + CSV observations)
  • 25 observation networks (EBAS, AirNow, AERONET, Brazil networks, GHOST harmonized, CSV-based, and more)
  • Automated MARS data retrieval and processing
  • Statistical analysis with comprehensive metrics
  • Publication-quality maps, time series, and reports
  • Native GRIB support with forecast step preservation
  • One-command installation with automatic tool setup

Installation

See qlc/doc/QuickStart.md. For complete installation instructions, see INSTALL.md.

Quick Install:

One-Command Installation (using qlc_install.sh)

The qlc_install.sh script performs four tasks:

  • a) Creates a QLC virtual environment (~/venv/qlc)
  • b) Installs QLC from latest PyPI release (pip install rc-qlc)
  • c) Installs all required tools (cartopy data, evaltools, etc.)
  • d) Sets up QLC runtime environment with links to shared directories ($SCRATCH, $HPCPERM, $PERM)
curl -sSL https://raw.githubusercontent.com/researchConcepts/qlc/main/qlc/bin/tools/qlc_install.sh | bash -s -- --mode test --tools essential

Quick Start:

Activate QLC environment

source ~/venv/qlc/bin/activate

Verify installation

cd ~/qlc/run
pwd -P
qlc --version
qlc --help

Run test analysis (example data from 01-21 December 2018)

  • one or more experiments using workflow 'test' configuration
qlc exp1 exp2 2018-12-01 2018-12-21 test
  • batch submission (same options as qlc)
sqlc exp1 exp2 2018-12-01 2018-12-21 test

View results

  • GRIB data downloaded from MARS:
ls -lrth ~/qlc/Results
  • NetCDF data processed (converted from GRIB):
ls -lrth ~/qlc/Analysis
  • Plot results for active workflow:
ls -lrth ~/qlc/Plots/exp1-exp2*
  • Reports produced (one PDF per variable, region):
ls -lrth ~/qlc/Presentations

What's New in v1.0.2

Major Enhancements

Observation Network Expansion (25 networks)

  • Three new Brazilian networks: INMET meteorological (620 stations), State AQ (483 stations), São Paulo CETESB (72 stations)
  • AERONET AOD mapping: od550aero → aod550 for AERONET Level 1.5 and Level 2.0
  • Central network registry (obs_networks.conf) defines all 25 networks in one place
  • All region definitions centralised in qlc.conf — no per-workflow repetition

CLI Overhaul

  • Named arguments: --myvar=, --network=, --region=, --station_file=, --exp_labels=, --param=, --user=
  • --network= (station collection) and --region= (map extent) are now separate options
  • Per-experiment MARS class: -class=nl,nl maps one class to each experiment
  • --obs-only and --mod-only produce distinct output directories

Variable Mapping System

  • Finalized pipe-format spec: userVAR|modVAR[,op,val]|obsVAR[,op,val]|targetUNIT[,unitFAC]
  • Arithmetic transforms (*, /, +, -) applied independently on model or obs side at load time
  • unitFAC field as an alternative to automatic unit conversion — useful for variables not in qlc's built-in unit table, custom model diagnostics, or quick scaling tests
  • A single --myvar= CLI override applies the chosen spec across all active regions in one run, with no workflow file changes required
  • qlc-vars --exact flag for precise IFS variable lookup

Plot and Analysis Fixes

  • K-guard for log scale: temperature in °C automatically converted to K before log computation
  • PyFerret percentage difference plots (DIFF_MODE=percent) with configurable white zone
  • Degenerate zero-range diff plot guard; additive K↔°C differences handled correctly
  • South America map projection corrected (Lambert Conformal center and standard parallels)

Complete Changelog

For detailed release notes, see: docs.researchconcepts.io/qlc/latest/reference/changelog


Documentation

Complete documentation available at: docs.researchconcepts.io/qlc/latest

Getting Started

User Guide

Advanced Topics

Developer Guide


Basic Usage

Command Syntax

# Standard workflow
qlc <exp1> <expN> <start_date> <end_date> <workflow>

# Run test analysis (example data from 01-21 December 2018)
qlc exp1      2018-12-01 2018-12-21 test # one experiment vs observations
qlc exp1 exp2 2018-12-01 2018-12-21 test # two or more experiments vs observations

# Examples (AIFS data available from June 2025):
qlc aifs1 aifs2 2025-11-01 2025-11-07 mars # only data retrieval (no processing)
qlc aifs1 aifs2 2025-11-01 2025-11-07 aifs # workflows support multi-region processing
qlc aifs1 aifs2 2025-11-01 2025-11-07 aifs --station_file=~/qlc/config/station_locations/ver0d_airnow_stations-test.csv

Variable Discovery

# Search for variables
qlc-vars search ozone

# List available sources
qlc-vars list --sources

# Get variable details
qlc-vars info O3

# Validate configuration
qlc-vars validate ~/qlc/config/workflows/aifs/qlc_aifs.conf

Processing Modes

# Observation-only (no model data)
qlc None None 2025-11-01 2025-11-07 aifs --obs-only

# Model-only (no observations)
qlc aifs1 aifs2 2025-11-01 2025-11-07 aifs --mod-only

# Collocation (default - both model and observations)
qlc aifs1 aifs2 2025-11-01 2025-11-07 aifs

Help Commands

All QLC tools have built-in help:

qlc -h                     # Main driver help
sqlc -h                    # Batch job help
qlc-py -h                  # Python standalone help
qlc-vars -h                # Variable discovery help
qlc-install -h             # Installation help
qlc-install-tools -h       # Optional tools help

System Requirements

Operating Systems:

  • macOS (Apple Silicon & Intel)
  • Linux (Ubuntu 20.04+, RHEL 8+)
  • Windows (via WSL2)
  • HPC systems (ATOS/ECMWF, SLURM clusters)

Python:

  • Python 3.10 or 3.11 (Python 3.10 recommended; Python 3.12+ is not yet supported)

Dependencies:

  • Core dependencies automatically installed via pip
  • Optional tools: evaltools, pyferret, cfgrib (installed automatically / reinstall separately if neeed)

Configuration

QLC uses workflow-based configurations stored in ~/qlc/config/workflows/:

Available Workflows:

  • mars - MARS retrieval only (no conversion or analysis)
  • qpy - Station collocation and analysis via qlc-py (QPY chain)
  • aifs - AI-Integrated Forecasting System (AIFS), e.g., AI vs o-suite analysis
  • eac5 - ECMWF Atmospheric Composition (EAC5), multi-region/species batch processing
  • evaltools - Compute and plot model scores (based on Météo-France software)
  • pyferret - 3D quick-look plots (model comparison based on NOAA/PMEL software)
  • test - Testing and development (and template for user-specific workflows)

Example workflow configuration at ~/qlc/config/workflows/aifs/qlc_aifs.conf.

For detailed configuration options, see: docs.researchconcepts.io/qlc/latest/user-guide/workflows/


Examples

Using Auto-Generated JSON Configs

QLC automatically generates JSON configuration files that can be reused with qlc-py for quick parameter adjustments:

# Run initial analysis
qlc aifs1 aifs2 2025-11-01 2025-11-03 aifs

# Reuse the generated config with modifications
qlc-py --config=~/qlc/Plots/9191_20251101-20251103/US_AIRNOW/qlc_D1-ANAL_config.json

The JSON config allows quick experimentation with different qlc-py options (which is used in various workflows):

  • show_stations: Individual station plots
  • use_log_scale: Logarithmic scale for maps/timeseries
  • enable_diff_plots: Difference plots in collocation mode
  • plot_type: Map types (map, burden, zonal, meridional, scatter, taylor)
  • time_average: Time averaging (raw, hourly, 3hourly, daily, monthly)
  • plot_region: Different regions (Globe, US, EU, Asia)
  • map_projection: Global map projections (Robinson, PlateCarree, EqualEarth)
  • publication_style: Higher quality plots (300 DPI)
  • plot_dpi: Explicit DPI control (100=fast, 150=balanced, 300+=publication)
  • map_colormap: Map colormap (turbo, viridis, plasma)
  • And many more options

Troubleshooting

Common Issues

QLC commands not found After Installation

# Activate virtual environment (see [INSTALL.md](INSTALL.md) for details)
source ~/venv/qlc/bin/activate

Import Errors After Installation

# Fix dependency compatibility
qlc-fix-dependencies

Evaltools NumPy 2.x Issues

# Patch evaltools for NumPy 2.x
qlc-fix-evaltools

Missing Natural Earth Data

# Download cartography data
qlc-install-extras --cartopy_downloads

Get Help


License

MIT License - Copyright (c) 2018-2026 ResearchConcepts io GmbH

See LICENSE file for details.

Third-party licenses: THIRD_PARTY_LICENSES.md


Acknowledgments

Developed by ResearchConcepts io GmbH for the atmospheric science community, supported through CAMS2_35_bis_KNMI https://atmosphere.copernicus.eu/developments-reactive-gases-and-aerosol-global-system-0.

Optimized for use with CAMS (Copernicus Atmospheric Monitoring Service) and ECMWF data.


For complete documentation, tutorials, and examples, visit: docs.researchconcepts.io/qlc/latest

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

qlc-1.0.3-cp311-cp311-win_amd64.whl (78.4 MB view details)

Uploaded CPython 3.11Windows x86-64

qlc-1.0.3-cp311-cp311-win32.whl (78.1 MB view details)

Uploaded CPython 3.11Windows x86

qlc-1.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (99.4 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

qlc-1.0.3-cp311-cp311-macosx_11_0_arm64.whl (78.6 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

qlc-1.0.3-cp310-cp310-win_amd64.whl (78.4 MB view details)

Uploaded CPython 3.10Windows x86-64

qlc-1.0.3-cp310-cp310-win32.whl (78.1 MB view details)

Uploaded CPython 3.10Windows x86

qlc-1.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (97.9 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

qlc-1.0.3-cp310-cp310-macosx_11_0_arm64.whl (78.7 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

Details for the file qlc-1.0.3-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: qlc-1.0.3-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 78.4 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for qlc-1.0.3-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 0b9933a6af2d708d5603bdfb85bc2af71f0222138c837c44919affbc89ca4648
MD5 afef452a26d92c9e3ffdde952a2dd764
BLAKE2b-256 72bc250e2c3f0b8b8f6cf8f8f7e8032d492de52c222c83fb7de8895ab960394b

See more details on using hashes here.

File details

Details for the file qlc-1.0.3-cp311-cp311-win32.whl.

File metadata

  • Download URL: qlc-1.0.3-cp311-cp311-win32.whl
  • Upload date:
  • Size: 78.1 MB
  • Tags: CPython 3.11, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for qlc-1.0.3-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 60e28d3ae4bb4b52c13402a38cdf2d81fa14e9f082eda53bdde662b8ec742074
MD5 87190084915b5e5af6613b1a5685ee17
BLAKE2b-256 631b5fa0c3f75b0f488ec9e73346a642ee651163b031200c82ff10c650ad6be1

See more details on using hashes here.

File details

Details for the file qlc-1.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for qlc-1.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a1da2eafe0fb7b8fb0a9d36f9edd2b7d11e10c426a41f394b7ec0bca3434702b
MD5 4c117d307d5e042bcc8e4d1f33471857
BLAKE2b-256 8be74b4bfadef65d3ed3f8047ad658a54ccd1967341b564b3a5b0e2bddfbf0f1

See more details on using hashes here.

File details

Details for the file qlc-1.0.3-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

  • Download URL: qlc-1.0.3-cp311-cp311-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 78.6 MB
  • Tags: CPython 3.11, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for qlc-1.0.3-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 76b881410472aaf57f57a9d0b25de0c589aee28144c75322ba7ad3383d034eca
MD5 8d67b3e22be21723c2246f2e4011b3d5
BLAKE2b-256 7d6d523902f0a6372711b3ae537737ca77d309dc36bcf18fae715f78238c78d3

See more details on using hashes here.

File details

Details for the file qlc-1.0.3-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: qlc-1.0.3-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 78.4 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for qlc-1.0.3-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 0f4285f0e347a7fb4e0f9a42045a86b2b98215a30e2648ab7451cc6bd8ebdd54
MD5 8114c5965372c58554472a881a28900d
BLAKE2b-256 95a4bc58bc91e95e5f8605930af38ca49f8a4be8fdb7c1b90932e04cd31dd7a7

See more details on using hashes here.

File details

Details for the file qlc-1.0.3-cp310-cp310-win32.whl.

File metadata

  • Download URL: qlc-1.0.3-cp310-cp310-win32.whl
  • Upload date:
  • Size: 78.1 MB
  • Tags: CPython 3.10, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for qlc-1.0.3-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 4b139aab1f281a0f7f12ceea4fe25c1344006b9242c5e2cdc1b6d1cafcac947d
MD5 a72626b553d523d76f91dee7ea83c4b7
BLAKE2b-256 3ad2e72e2f68c30d54c71310f3ed2524f3717afdb10c03d8691e24a6d224e256

See more details on using hashes here.

File details

Details for the file qlc-1.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for qlc-1.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3ca31e05eabe3035c502affe9fe215d31d5e10404158864b5dea058903d32230
MD5 4e321b0e52257ed10e276924d75879fa
BLAKE2b-256 a1ff3b970700943e2930e8adcdc07a7ec3c4a9f78a0a287786657f50a902b4ab

See more details on using hashes here.

File details

Details for the file qlc-1.0.3-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

  • Download URL: qlc-1.0.3-cp310-cp310-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 78.7 MB
  • Tags: CPython 3.10, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for qlc-1.0.3-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4d12a82305619b3f6bfeb48166ea7cad51ff538910fc9eb0d53c08c72da0746f
MD5 283f6039659860a241d59814cffac92a
BLAKE2b-256 c6b00953a7b057a668461b229d2800b61054a9e6b3c97996734055015521ffbd

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page