rc-qlc 0.3.24__cp310-cp310-win32.whl → 0.3.27__cp310-cp310-win32.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- qlc/cli/__init__.py +100 -9
- qlc/cli/installer.py +23 -5
- qlc/cli/qlc_main.py +54 -32
- qlc/cli/qlc_py_main.py +43 -38
- qlc/config/json/qlc_config.json +94 -10
- qlc/config/nml/mars_A1_sfc.nml +4 -5
- qlc/config/nml/mars_A3_sfc.nml +0 -1
- qlc/config/nml/mars_B1_pl.nml +2 -2
- qlc/{examples/cams_case_1/config/nml/mars_A3_sfc.nml → config/nml/mars_B1_sfc.nml} +7 -8
- qlc/config/nml/mars_C1_pl.nml +1 -1
- qlc/{examples/cams_case_1/config/nml/mars_C1_pl.nml → config/nml/mars_C1_sfc.nml} +7 -8
- qlc/config/nml/mars_C2_pl.nml +1 -1
- qlc/{examples/cams_case_1/config/qlc_cams.conf → config/qlc.conf} +80 -18
- qlc/{examples/cams_case_1/mod/b2ro/2018/b2ro_20181215-20181231_A3_sfc.grb → doc/CAMS_b2ro-b2rn_20181201-20181221_qlc_Z1-png_202509090814.pdf} +0 -0
- qlc/doc/README.md +213 -49
- qlc/doc/USAGE.md +266 -29
- qlc/examples/cams_case_1/mod/b2rn/2018/b2rn_20181201-20181221_B1_pl.grb +0 -0
- qlc/examples/cams_case_1/mod/b2rn/2018/b2rn_20181201-20181221_C1_sfc.grb +0 -0
- qlc/examples/cams_case_1/mod/b2ro/2018/b2ro_20181201-20181221_B1_pl.grb +0 -0
- qlc/examples/cams_case_1/mod/b2ro/2018/b2ro_20181201-20181221_C1_sfc.grb +0 -0
- qlc/install.py +272 -107
- qlc/py/__main__.cp310-win32.pyd +0 -0
- qlc/py/averaging.cp310-win32.pyd +0 -0
- qlc/py/bias_plots.cp310-win32.pyd +0 -0
- qlc/py/control.cp310-win32.pyd +0 -0
- qlc/py/io.cp310-win32.pyd +0 -0
- qlc/py/loadmod.cp310-win32.pyd +0 -0
- qlc/py/loadobs.cp310-win32.pyd +0 -0
- qlc/py/logging_utils.cp310-win32.pyd +0 -0
- qlc/py/map_plots.cp310-win32.pyd +0 -0
- qlc/py/matched.cp310-win32.pyd +0 -0
- qlc/py/plot_config.cp310-win32.pyd +0 -0
- qlc/py/plotting.cp310-win32.pyd +0 -0
- qlc/py/plugin_loader.cp310-win32.pyd +0 -0
- qlc/py/processing.cp310-win32.pyd +0 -0
- qlc/py/scatter_plots.cp310-win32.pyd +0 -0
- qlc/py/stations.cp310-win32.pyd +0 -0
- qlc/py/statistics.cp310-win32.pyd +0 -0
- qlc/py/style.cp310-win32.pyd +0 -0
- qlc/py/timeseries_plots.cp310-win32.pyd +0 -0
- qlc/py/utils.cp310-win32.pyd +0 -0
- qlc/py/version.cp310-win32.pyd +0 -0
- qlc/sh/qlc_A1.sh +30 -11
- qlc/sh/qlc_B1a.sh +1 -18
- qlc/sh/qlc_B2.sh +8 -1
- qlc/sh/qlc_C5.sh +90 -65
- qlc/sh/qlc_D1.sh +287 -56
- qlc/sh/qlc_Z1.sh +6 -6
- qlc/sh/qlc_batch.sh +61 -0
- qlc/sh/qlc_common_functions.sh +17 -29
- qlc/sh/qlc_main.sh +49 -26
- qlc/sh/tex_template/beamercolorthemeCAMS2_35.sty +51 -0
- qlc/sh/tex_template/beamerfontthemeCAMS2_35.sty +166 -0
- qlc/sh/tex_template/beamerthemeCAMS2_35.sty +25 -0
- qlc/sh/tex_template/subcaption.sty +170 -0
- qlc/sh/tex_template/template.tex +109 -0
- rc_qlc-0.3.27.dist-info/METADATA +309 -0
- rc_qlc-0.3.27.dist-info/RECORD +103 -0
- qlc/config/json/qlc_config_example_1a_all-obs.json +0 -237
- qlc/config/json/qlc_config_example_1b_all-mod.json +0 -353
- qlc/config/json/qlc_config_example_1c_all-coll.json +0 -266
- qlc/config/json/qlc_config_example_2a_all-obs.json +0 -237
- qlc/config/json/qlc_config_example_2b_all-mod.json +0 -353
- qlc/config/json/qlc_config_example_2c_all-coll.json +0 -265
- qlc/config/json/qlc_config_example_3a-us_obs.json +0 -82
- qlc/config/json/qlc_config_example_3b-us_mod.json +0 -122
- qlc/config/json/qlc_config_example_3c-us_coll.json +0 -46
- qlc/config/json/qlc_config_example_4a_eu-obs.json +0 -41
- qlc/config/json/qlc_config_example_4b_eu-mod.json +0 -122
- qlc/config/json/qlc_config_example_4c_eu-coll.json +0 -45
- qlc/config/qlc_cams.conf +0 -26
- qlc/config/qlc_test.conf +0 -26
- qlc/config/qlc_tex.conf +0 -107
- qlc/examples/cams_case_1/config/json/qlc_config.json +0 -41
- qlc/examples/cams_case_1/config/nml/mars_B1_pl.nml +0 -19
- qlc/examples/cams_case_1/mod/iqi9/2018/iqi9_20181215-20181231_A3_sfc.grb +0 -0
- qlc/sh/qlc_start.sh +0 -23
- qlc/sh/qlc_start_batch.sh +0 -46
- rc_qlc-0.3.24.dist-info/METADATA +0 -142
- rc_qlc-0.3.24.dist-info/RECORD +0 -113
- {rc_qlc-0.3.24.dist-info → rc_qlc-0.3.27.dist-info}/WHEEL +0 -0
- {rc_qlc-0.3.24.dist-info → rc_qlc-0.3.27.dist-info}/entry_points.txt +0 -0
- {rc_qlc-0.3.24.dist-info → rc_qlc-0.3.27.dist-info}/licenses/LICENSE +0 -0
- {rc_qlc-0.3.24.dist-info → rc_qlc-0.3.27.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,170 @@
|
|
1
|
+
%%
|
2
|
+
%% This is file `subcaption.sty',
|
3
|
+
%% generated with the docstrip utility.
|
4
|
+
%%
|
5
|
+
%% The original source files were:
|
6
|
+
%%
|
7
|
+
%% subcaption.dtx (with options: `package')
|
8
|
+
%%
|
9
|
+
%% Copyright (C) 1994-2020 Axel Sommerfeldt (axel.sommerfeldt@f-m.fm)
|
10
|
+
%%
|
11
|
+
%% https://gitlab.com/axelsommerfeldt/caption
|
12
|
+
%%
|
13
|
+
%% --------------------------------------------------------------------------
|
14
|
+
%%
|
15
|
+
%% This work may be distributed and/or modified under the
|
16
|
+
%% conditions of the LaTeX Project Public License, either version 1.3
|
17
|
+
%% of this license or (at your option) any later version.
|
18
|
+
%% The latest version of this license is in
|
19
|
+
%% http://www.latex-project.org/lppl.txt
|
20
|
+
%% and version 1.3 or later is part of all distributions of LaTeX
|
21
|
+
%% version 2003/12/01 or later.
|
22
|
+
%%
|
23
|
+
%% This work has the LPPL maintenance status "maintained".
|
24
|
+
%%
|
25
|
+
%% This Current Maintainer of this work is Axel Sommerfeldt.
|
26
|
+
%%
|
27
|
+
%% This work consists of the files
|
28
|
+
%% caption.ins, caption.dtx, caption2.dtx, caption3.dtx,
|
29
|
+
%% bicaption.dtx, ltcaption.dtx, subcaption.dtx, totalcount.dtx,
|
30
|
+
%% the derived files
|
31
|
+
%% caption.sty, caption2.sty, caption3.sty,
|
32
|
+
%% bicaption.sty, ltcaption.sty, subcaption.sty, totalcount.sty,
|
33
|
+
%% and the user manuals
|
34
|
+
%% caption-deu.tex, caption-eng.tex, caption-rus.tex.
|
35
|
+
%%
|
36
|
+
\NeedsTeXFormat{LaTeX2e}[1994/12/01]
|
37
|
+
\ProvidesPackage{subcaption}[2020/01/22 v1.3d Sub-captions (AR)]
|
38
|
+
\RequirePackage{caption}[2020/01/03] % needs v3.4h or newer
|
39
|
+
\newcommand\subcaption@CheckCompatibility{%
|
40
|
+
\@ifundefined{caption@ifcompatibility}{}{%
|
41
|
+
\caption@ifcompatibility{%
|
42
|
+
\caption@Error{%
|
43
|
+
The `subcaption' package does not work correctly\MessageBreak
|
44
|
+
in compatibility mode}}{}}%
|
45
|
+
\@ifpackageloaded{subfigure}{%
|
46
|
+
\PackageError{subcaption}%
|
47
|
+
{This package can't be used in cooperation\MessageBreak
|
48
|
+
with the subfigure package}%
|
49
|
+
{\subcaption@EH}%
|
50
|
+
\endinput}{}%
|
51
|
+
\@ifpackageloaded{subfig}{%
|
52
|
+
\PackageError{subcaption}%
|
53
|
+
{This package can't be used in cooperation\MessageBreak
|
54
|
+
with the subfig package}%
|
55
|
+
{\subcaption@EH}%
|
56
|
+
\endinput}{}%
|
57
|
+
}
|
58
|
+
\newcommand*\subcaption@EH{%
|
59
|
+
If you do not understand this error, please take a closer look\MessageBreak
|
60
|
+
at the documentation of the `subcaption' package, especially the\MessageBreak
|
61
|
+
section about errors.\MessageBreak\@ehc}
|
62
|
+
\subcaption@CheckCompatibility
|
63
|
+
\caption@AtBeginDocument{%
|
64
|
+
\subcaption@CheckCompatibility
|
65
|
+
\let\subcaption@CheckCompatibility\@undefined
|
66
|
+
\let\subcaption@EH\@undefined
|
67
|
+
}
|
68
|
+
\caption@ForEachType{\DeclareCaptionSubType{#1}}
|
69
|
+
\caption@ifundefined\newsubfloat{}{%
|
70
|
+
\renewcommand*\newsubfloat{\DeclareCaptionSubType}}
|
71
|
+
\def\subcaption{%
|
72
|
+
\caption@iftype
|
73
|
+
{\setcaptionsubtype*\caption}%
|
74
|
+
{\caption@Error{\noexpand\subcaption outside float}%
|
75
|
+
\caption@gobble}}%
|
76
|
+
\g@addto@macro\caption@subtypehook{%
|
77
|
+
\let\subcaption\caption}
|
78
|
+
\newcommand*\phantomsubcaption{%
|
79
|
+
\caption@iftype
|
80
|
+
{\setcaptionsubtype*\phantomcaption}%
|
81
|
+
{\caption@Error{\noexpand\phantomsubcaption outside float}}}%
|
82
|
+
\g@addto@macro\caption@subtypehook{%
|
83
|
+
\let\phantomsubcaption\phantomcaption}
|
84
|
+
\caption@For{subtypelist}{%
|
85
|
+
\newenvironment{sub#1}%
|
86
|
+
{\@ifnextchar[%]
|
87
|
+
\subcaption@iminipage
|
88
|
+
{\subcaption@iminipage[c]}}%
|
89
|
+
{\subcaption@endminipage
|
90
|
+
\endminipage}}%
|
91
|
+
\def\subcaption@iminipage[#1]{%
|
92
|
+
\caption@withoptargs{\subcaption@iiminipage{#1}}}
|
93
|
+
\newcommand*\subcaption@iiminipage[3]{%
|
94
|
+
\let\subcaption@endminipage\@empty
|
95
|
+
\if#1B%
|
96
|
+
\minipage[b]#2{#3}%
|
97
|
+
\def\subcaption@endminipage{\vspace{0pt}}%
|
98
|
+
\else\if#1T%
|
99
|
+
\minipage[t]#2{#3}%
|
100
|
+
\vspace{0pt}%
|
101
|
+
\else
|
102
|
+
\minipage[#1]#2{#3}%
|
103
|
+
\fi\fi
|
104
|
+
\@subfloatboxreset
|
105
|
+
\setcaptionsubtype\relax}
|
106
|
+
\providecommand*\@subfloatboxreset{}
|
107
|
+
\newcommand*\subcaptionbox{%
|
108
|
+
\caption@withoptargs{\caption@ibox\setcaptionsubtype}}
|
109
|
+
\g@addto@macro\caption@subtypehook{%
|
110
|
+
\ifx\label\subcaption@label \else
|
111
|
+
\let\subcaption@ORI@label\label
|
112
|
+
\let\label\subcaption@label
|
113
|
+
\fi}
|
114
|
+
\newcommand*\subcaption@label{%
|
115
|
+
\caption@withoptargs\subcaption@@label}
|
116
|
+
\newcommand*\subcaption@@label[2]{%
|
117
|
+
\@bsphack\begingroup
|
118
|
+
\subcaption@ORI@label#1{#2}%
|
119
|
+
\let\SK@\@gobbletwo
|
120
|
+
\protected@edef\@currentlabel{\csname thesub\@captype\endcsname}%
|
121
|
+
\subcaption@ORI@label#1{sub@#2}%
|
122
|
+
\endgroup\@esphack}
|
123
|
+
\DeclareRobustCommand*\subref{%
|
124
|
+
\@ifstar
|
125
|
+
{\caption@withoptargs\subcaption@ref*}%
|
126
|
+
{\caption@withoptargs\@subref}}
|
127
|
+
\newcommand*\@subref[2]{%
|
128
|
+
\caption@ifundefined\hyperref
|
129
|
+
{\subcaption@ref{#1}{#2}}%
|
130
|
+
{\hyperref[{#2}]{\subcaption@ref{*#1}{#2}}}}
|
131
|
+
\newcommand*\subcaption@ref[2]{%
|
132
|
+
\begingroup
|
133
|
+
\caption@setoptions{sub}%
|
134
|
+
\subcaption@reffmt\p@subref{\ref#1{sub@#2}}%
|
135
|
+
\endgroup}
|
136
|
+
\newcommand*\p@subref{}
|
137
|
+
\DeclareCaptionOption{subrefformat}{\subcaption@setrefformat{#1}}
|
138
|
+
\newcommand*\subcaption@setrefformat[1]{%
|
139
|
+
\@ifundefined{caption@lfmt@#1}%
|
140
|
+
{\caption@Error{Undefined label format `#1'}}%
|
141
|
+
{\expandafter\let\expandafter\subcaption@reffmt\csname caption@lfmt@#1\endcsname}}
|
142
|
+
\subcaption@setrefformat{simple}
|
143
|
+
\caption@SetupOptions{subcaption}{\captionsetup[sub]{#2}}%
|
144
|
+
\caption@ExecuteOptions{subcaption}{%
|
145
|
+
size=smaller,labelformat=parens,labelsep=space,skip=6pt,list=0,hypcap=0}
|
146
|
+
\caption@ProcessOptions*{subcaption}
|
147
|
+
\def\subfloat{%
|
148
|
+
\@ifnextchar[\@subfloat\subfloat@}
|
149
|
+
\long\def\@subfloat[#1]{%
|
150
|
+
\@ifnextchar[{\@@subfloat{#1}}{\@@@subfloat\subcaptionbox{#1}}}
|
151
|
+
\long\def\@@subfloat#1[#2]{%
|
152
|
+
\@@@subfloat{\subcaptionbox[{#1}]}{#2}}
|
153
|
+
\long\def\@@@subfloat#1#2#3{%
|
154
|
+
\caption@getlabel#3\label{}\@nil
|
155
|
+
#1{#2\caption@thelabel}{\let\label\caption@gobble#3}%
|
156
|
+
\global\let\caption@thelabel\relax
|
157
|
+
\ignorespaces}
|
158
|
+
\def\subfloat@#1{%
|
159
|
+
\setbox\@tempboxa\hbox{#1}%
|
160
|
+
\caption@iiiibox
|
161
|
+
\setcaptionsubtype
|
162
|
+
{\phantomcaption\@gobble}{\phantomcaption\@gobble}% no box with \caption
|
163
|
+
{}% no optional arguments for \caption
|
164
|
+
{}% no sub-caption
|
165
|
+
[\wd\@tempboxa][\caption@hj@default]%
|
166
|
+
{\unhbox\@tempboxa}%
|
167
|
+
\ignorespaces}
|
168
|
+
\endinput
|
169
|
+
%%
|
170
|
+
%% End of file `subcaption.sty'.
|
@@ -0,0 +1,109 @@
|
|
1
|
+
\documentclass{beamer}
|
2
|
+
%\documentclass[slidestop,usepdftitle=false]{beamer}
|
3
|
+
%\usetheme{Frankfurt}
|
4
|
+
%\usetheme{Szeged}
|
5
|
+
\usetheme{CAMS2_35}
|
6
|
+
%\usecolortheme{CAMS2_35}\usefonttheme{CAMS2_35}
|
7
|
+
%\usetheme{Boadilla}\usecolortheme{rose}\usefonttheme{professionalfonts}
|
8
|
+
%\usetheme{AnnArbor}\usecolortheme{albatross}\usefonttheme{default}
|
9
|
+
%\usetheme{Frankfurt}\usecolortheme{default}\usefonttheme{default}
|
10
|
+
%\usetheme{Darmstadt}\usecolortheme{default}\usefonttheme{default}
|
11
|
+
%\usetheme{Boadilla}\usecolortheme{sidebartab}\usefonttheme{professionalfonts}
|
12
|
+
% Theme to: AnnArbor Antibes Bergen Berkeley Berlin Boadilla boxes CambridgeUS Copenhagen Darmstadt default Dresden Frankfurt Goettingen Hannover Ilmenau JuanLesPins Luebeck Madrid Malmoe Marburg Montpellier PaloAlto Pittsburgh Rochester Singapore Szeged Warsaw
|
13
|
+
%Color to: albatross beaver beetle crane default dolphin dove fly lily orchid rose seagull seahorse sidebartab structure whale wolverine
|
14
|
+
%Font to: default professionalfonts serif structurebold structureitalicserif structuresmallcapsserif
|
15
|
+
\usepackage{graphicx}
|
16
|
+
\usepackage{epstopdf}
|
17
|
+
\epstopdfDeclareGraphicsRule{.gif}{png}{.png}{%
|
18
|
+
convert #1 \OutputFile
|
19
|
+
}
|
20
|
+
\AppendGraphicsExtensions{.gif}
|
21
|
+
%\epstopdfDeclareGraphicsRule{.gif}{png}{.png}{convert gif:#1 png:\OutputFile}
|
22
|
+
%\epstopdfDeclareGraphicsRule{.gif}{png}{.png}{`convert #1 `dirname #1`/`basename #1 .gif`.png}
|
23
|
+
%\AppendGraphicsExtensions{.gif}
|
24
|
+
\usepackage{float}
|
25
|
+
\useoutertheme{infolines}
|
26
|
+
\usepackage{sidecap}
|
27
|
+
\usepackage[font={scriptsize,it}]{caption}
|
28
|
+
\usepackage{tikz}
|
29
|
+
%\usepackage{subcaption}
|
30
|
+
%\makeatletter
|
31
|
+
%\@cons\caption@subtypelist{{figure}}
|
32
|
+
%\makeatother
|
33
|
+
\usepackage{color,colortbl}
|
34
|
+
\definecolor{Gray}{gray}{0.9}
|
35
|
+
%\usepackage{mathptmx}
|
36
|
+
%\usepackage[T1]{fontenc}
|
37
|
+
\usepackage{tabularx}
|
38
|
+
\usepackage{cancel}
|
39
|
+
\usepackage{multirow}
|
40
|
+
\usepackage{supertabular}
|
41
|
+
\usepackage{amsthm}
|
42
|
+
\usepackage{lscape}
|
43
|
+
\usepackage{xr}
|
44
|
+
\usepackage{booktabs}
|
45
|
+
\pdfminorversion=5
|
46
|
+
\pdfcompresslevel=9
|
47
|
+
\pdfobjcompresslevel=2
|
48
|
+
%===============================================================================
|
49
|
+
%===============================================================================
|
50
|
+
\newcommand\mytext{XTEAM-XXUSR \hfill \insertpagenumber}
|
51
|
+
%\newcommand\mytext{Swen Metzger, ResearchConcepts io GmbH\hfill \insertpagenumber}
|
52
|
+
\makeatother
|
53
|
+
\setbeamertemplate{footline}
|
54
|
+
{%
|
55
|
+
\leavevmode%
|
56
|
+
\hbox{\begin{beamercolorbox}[wd=.5\paperwidth,ht=2.5ex,dp=1.125ex,leftskip=.3cm,rightskip=.3cm]{author in head/foot}%
|
57
|
+
\mytext
|
58
|
+
\end{beamercolorbox}%
|
59
|
+
\begin{beamercolorbox}[wd=.5\paperwidth,ht=2.5ex,dp=1.125ex,leftskip=.3cm,rightskip=.3cm plus1fil]{author in head/foot}%
|
60
|
+
\usebeamerfont{author in head/foot} XXTIT results \hfill \insertdate
|
61
|
+
\end{beamercolorbox}}%
|
62
|
+
\vskip0pt%
|
63
|
+
}
|
64
|
+
\makeatletter
|
65
|
+
%===============================================================================
|
66
|
+
%===============================================================================
|
67
|
+
%\addtobeamertemplate{title page}{\vspace{0mm}\hspace{0mm}\includegraphics[clip=true,trim = 0cm 0mm 0mm 0mm, width=0.2\textwidth]{./Figures/hygeos-logo} \hspace{75mm} \includegraphics[clip=true,trim = 0cm 0mm 0mm 0mm, width=0.15\textwidth]{./tex_template/Figures/CAMS-logo}} {}
|
68
|
+
|
69
|
+
\vspace{-300mm}
|
70
|
+
|
71
|
+
\title{CAMS XXTIT results (XXRES) \\ XEXP1 vs XEXP2 (XXDAT, XXAVG)}
|
72
|
+
\vspace{-20mm}
|
73
|
+
\author{{XTEAM Team -- XXUSR
|
74
|
+
}}
|
75
|
+
\vspace{-10mm}
|
76
|
+
%\date{May 1, 2021}
|
77
|
+
\date{\today}
|
78
|
+
|
79
|
+
%\vspace{-10mm}
|
80
|
+
%===============================================================================
|
81
|
+
%\makeatletter
|
82
|
+
%\***@addto@macro\***@extensions{,.gif}
|
83
|
+
%\makeatother
|
84
|
+
%\DeclareGraphicsRule{.gif}{png}{.png}{%
|
85
|
+
%`giftopnm '#1'|pnmtopng>`dirname '#1'`/`basename '#1' .gif`.png%
|
86
|
+
%}
|
87
|
+
%===============================================================================
|
88
|
+
\begin{document}
|
89
|
+
%===============================================================================
|
90
|
+
\frame{\titlepage}
|
91
|
+
%===============================================================================
|
92
|
+
\section[Outline]{}
|
93
|
+
\frame{\tableofcontents}
|
94
|
+
%===============================================================================
|
95
|
+
%\section{Simulations}
|
96
|
+
%\input{./Simulations}
|
97
|
+
%===============================================================================
|
98
|
+
\section{Results}
|
99
|
+
\input{./CAMS_PLOTS.tex}
|
100
|
+
%===============================================================================
|
101
|
+
%\section{Summary}
|
102
|
+
%\input{./Summary}
|
103
|
+
%===============================================================================
|
104
|
+
%\section{References}
|
105
|
+
%\input{./References}
|
106
|
+
%===============================================================================
|
107
|
+
%\fontsize{15}{18}\selectfont .
|
108
|
+
%===============================================================================
|
109
|
+
\end{document}
|
@@ -0,0 +1,309 @@
|
|
1
|
+
Metadata-Version: 2.4
|
2
|
+
Name: rc-qlc
|
3
|
+
Version: 0.3.27
|
4
|
+
Summary: Quick Look Content (QLC): Model–Observation Comparison Suite for Use with CAMS
|
5
|
+
Home-page: https://pypi.org/project/qlc/
|
6
|
+
Author-email: ResearchConcepts io GmbH <contact@researchconcepts.io>
|
7
|
+
License: MIT
|
8
|
+
Requires-Python: >=3.10
|
9
|
+
Description-Content-Type: text/markdown
|
10
|
+
License-File: LICENSE
|
11
|
+
Requires-Dist: numpy
|
12
|
+
Requires-Dist: pandas
|
13
|
+
Requires-Dist: matplotlib
|
14
|
+
Requires-Dist: xarray
|
15
|
+
Requires-Dist: netCDF4
|
16
|
+
Requires-Dist: scipy
|
17
|
+
Requires-Dist: cartopy
|
18
|
+
Requires-Dist: tqdm
|
19
|
+
Requires-Dist: adjustText
|
20
|
+
Provides-Extra: build
|
21
|
+
Requires-Dist: tomli; extra == "build"
|
22
|
+
Provides-Extra: test
|
23
|
+
Requires-Dist: pytest; extra == "test"
|
24
|
+
Provides-Extra: ferret
|
25
|
+
Requires-Dist: pyferret; extra == "ferret"
|
26
|
+
Provides-Extra: cams
|
27
|
+
Dynamic: home-page
|
28
|
+
Dynamic: license-file
|
29
|
+
|
30
|
+
# Quick Look Content (QLC): An Automated Model–Observation Comparison Suite
|
31
|
+
|
32
|
+
**Quick Look Content (QLC)** is a powerful, command-line driven suite for model–observation comparisons, designed to automate the evaluation of climate and air quality model data. It is optimized for use with CAMS (Cop Copernicus Atmospheric Monitoring Service) datasets but is flexible enough for general use cases.
|
33
|
+
|
34
|
+
The suite streamlines the entire post-processing workflow, from data retrieval and collocation to statistical analysis and the generation of publication-quality figures and reports.
|
35
|
+
|
36
|
+
| Package | Status |
|
37
|
+
|---------|--------|
|
38
|
+
| [rc-qlc on PyPI](https://pypi.org/project/rc-qlc/) |  |
|
39
|
+
|
40
|
+
---
|
41
|
+
|
42
|
+
## What's New in v0.3.27
|
43
|
+
|
44
|
+
This release focuses on improving the out-of-the-box installation experience, especially for HPC environments, and significantly expanding the user documentation.
|
45
|
+
|
46
|
+
- **Installer Overhaul**: The `qlc-install` script is now more robust.
|
47
|
+
- It automatically creates the `qlc` -> `qlc_latest` -> `qlc_vX.Y.Z/<mode>` symlink structure, removing the need for manual setup.
|
48
|
+
- It now provides clear, actionable instructions on how to update your `PATH` if needed.
|
49
|
+
- **Enhanced HPC & Batch Job Support**:
|
50
|
+
- The batch submission script (`sqlc`) is more reliable, no longer using hardcoded paths.
|
51
|
+
- Shell scripts are now more compatible with typical HPC environments that may only have a `python3` executable.
|
52
|
+
- **Expanded Documentation**:
|
53
|
+
- The `USAGE.md` guide now includes comprehensive, exhaustive lists of currently available plotting regions, observation datasets, and supported chemical/meteorological variables.
|
54
|
+
- A new "Advanced Workflow" section has been added to `USAGE.md`, explaining the underlying shell script pipeline, the `param/ncvar/myvar` variable mapping system, and how to use your own data with the `qlc-py` engine.
|
55
|
+
- Added a note on the future integration with the GHOST database.
|
56
|
+
- **Dependency Fix**: The `adjustText` library is now included as a core dependency.
|
57
|
+
|
58
|
+
---
|
59
|
+
|
60
|
+
## What's New in v0.3.26
|
61
|
+
|
62
|
+
This version introduces a completely new, high-performance Python processing engine and a more robust installation system.
|
63
|
+
- **New Python Engine (`qlc-py`)**: The core data processing and plotting is now handled by a powerful Python-based tool, compiled with Cython for maximum performance. This replaces much of the previous shell-script-based logic.
|
64
|
+
- **Standalone `qlc-py` Tool**: In addition to being used by the main `qlc` pipeline, `qlc-py` can be run as a standalone tool for rapid, iterative analysis using a simple JSON configuration.
|
65
|
+
- **New `cams` Installation Mode**: A dedicated installation mode for operational CAMS environments that automatically links to standard data directories.
|
66
|
+
- **Simplified and Robust Installation**: The installer now uses a consistent directory structure based in `$HOME/qlc`, with a smart two-stage symlink system to manage data-heavy directories for different modes (`test` vs. `cams`).
|
67
|
+
- **Dynamic Variable Discovery**: The shell pipeline now automatically discovers which variables to process based on the available NetCDF files, simplifying configuration.
|
68
|
+
- **Flexible Model Level Handling**: The Python engine can intelligently select the correct vertical model level for each variable or use a user-defined default.
|
69
|
+
|
70
|
+
---
|
71
|
+
|
72
|
+
## Core Features
|
73
|
+
|
74
|
+
- **Automated End-to-End Workflow**: A single `qlc` command can drive the entire pipeline: MARS data retrieval, data processing, statistical analysis, plotting, and final PDF report generation.
|
75
|
+
- **High-Performance Engine**: The core data processing logic is written in Python and compiled with Cython into native binary modules, ensuring high performance for large datasets.
|
76
|
+
- **Publication-Ready Outputs**: Automatically generates a suite of plots (time series, bias, statistics, maps) and integrates them into a final, professionally formatted PDF presentation using a LaTeX backend.
|
77
|
+
- **Flexible Installation Modes**: The `qlc-install` script supports multiple, co-existing modes:
|
78
|
+
- `--mode test`: A standalone mode with bundled example data, perfect for new users. All data is stored locally in `$HOME/qlc_v<version>/test/`.
|
79
|
+
- `--mode cams`: An operational mode that links to standard CAMS data directories and uses environment variables like `$SCRATCH` and `$PERM` for data storage in shared HPC environments.
|
80
|
+
- **Simplified Configuration**: The entire suite is controlled by a single, well-documented configuration file (`$HOME/qlc/config/qlc.conf`) where you can set paths, experiment labels, and plotting options.
|
81
|
+
|
82
|
+
---
|
83
|
+
|
84
|
+
## Quickstart
|
85
|
+
|
86
|
+
**1. Install the Package**
|
87
|
+
```bash
|
88
|
+
pip install rc-qlc
|
89
|
+
```
|
90
|
+
|
91
|
+
**2. Set Up the Test Environment**
|
92
|
+
This creates a local runtime environment in `$HOME/qlc_v<version>/test` and links `$HOME/qlc` to it. It includes all necessary configurations and example data.
|
93
|
+
```bash
|
94
|
+
qlc-install --mode test
|
95
|
+
```
|
96
|
+
|
97
|
+
**3. Run the Full Pipeline**
|
98
|
+
Navigate to the working directory and run the `qlc` command. This will process the example data (comparing experiments `b2ro` and `b2rn`) and generate a full PDF report in `$HOME/qlc/Presentations`.
|
99
|
+
```bash
|
100
|
+
cd $(readlink -f $HOME/qlc)
|
101
|
+
qlc b2ro b2rn 2018-12-01 2018-12-21
|
102
|
+
```
|
103
|
+
|
104
|
+
---
|
105
|
+
|
106
|
+
## Prerequisites
|
107
|
+
|
108
|
+
Before running the QLC suite, please ensure the following system-level software is installed and accessible in your environment's `PATH`:
|
109
|
+
|
110
|
+
- **`pdflatex`**: Required for generating the final PDF reports. It is part of the **TeX Live** distribution.
|
111
|
+
- **`CDO` (Climate Data Operators)**: Used for processing NetCDF data.
|
112
|
+
- **`eccodes`**: The ECMWF library for decoding and encoding GRIB files.
|
113
|
+
- **`netcdf`**: The core NetCDF libraries.
|
114
|
+
|
115
|
+
On HPC systems, these tools are typically made available by loading the appropriate modules (e.g., `module load cdo`). On personal machines, they can be installed using system package managers like `apt-get` (Debian/Ubuntu), `yum` (Red Hat/CentOS), or `brew` (macOS).
|
116
|
+
|
117
|
+
---
|
118
|
+
|
119
|
+
## Installation and Configuration
|
120
|
+
|
121
|
+
### Standard Installation
|
122
|
+
|
123
|
+
QLC is installed from PyPI. After the `pip install`, you **must** run `qlc-install` to set up the necessary local directory structure.
|
124
|
+
|
125
|
+
**First-Time Installation**
|
126
|
+
```bash
|
127
|
+
pip install rc-qlc
|
128
|
+
```
|
129
|
+
|
130
|
+
**Upgrading an Existing Installation**
|
131
|
+
To ensure you have the latest version, always use the `--upgrade` flag:
|
132
|
+
```bash
|
133
|
+
pip install --upgrade rc-qlc
|
134
|
+
```
|
135
|
+
|
136
|
+
After installing, set up your desired environment:
|
137
|
+
```bash
|
138
|
+
# For a standalone test environment with example data
|
139
|
+
qlc-install --mode test
|
140
|
+
|
141
|
+
# For an operational CAMS environment
|
142
|
+
qlc-install --mode cams
|
143
|
+
```
|
144
|
+
|
145
|
+
### Installation in Restricted Environments (HPC/ATOS)
|
146
|
+
|
147
|
+
In environments where you do not have root permissions, `pip` will install packages into your local user directory. You may need to take a couple of extra steps.
|
148
|
+
|
149
|
+
**1. Update your PATH (Recommended)**
|
150
|
+
The executable scripts (`qlc`, `qlc-py`, etc.) will be placed in `$HOME/.local/bin`. Add this to your shell's `PATH` to run them directly.
|
151
|
+
```bash
|
152
|
+
# Example for bash shell
|
153
|
+
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
|
154
|
+
source ~/.bashrc
|
155
|
+
```
|
156
|
+
|
157
|
+
**2. Load the Correct Python Module**
|
158
|
+
Ensure you are using a compatible Python version.
|
159
|
+
```bash
|
160
|
+
module load python3/3.10.10-01
|
161
|
+
```
|
162
|
+
|
163
|
+
**3. Install and Run**
|
164
|
+
Now you can install as normal.
|
165
|
+
```bash
|
166
|
+
pip install rc-qlc && qlc-install --mode test
|
167
|
+
```
|
168
|
+
If you chose not to update your `PATH`, you must call the installer script by its full path:
|
169
|
+
```bash
|
170
|
+
pip install rc-qlc && $HOME/.local/bin/qlc-install --mode test
|
171
|
+
```
|
172
|
+
|
173
|
+
### Where Files Are Installed
|
174
|
+
- **Python Package Source**: `$HOME/.local/lib/python3.10/site-packages/qlc/`
|
175
|
+
- **Executable Scripts**: `$HOME/.local/bin/`
|
176
|
+
- **QLC Runtime Environment**: `$HOME/qlc_v<version>/<mode>`
|
177
|
+
- **Stable Symlink**: `$HOME/qlc` (points to the latest installed runtime environment)
|
178
|
+
|
179
|
+
|
180
|
+
### Configuration Structure
|
181
|
+
|
182
|
+
The primary configuration file is located at `$HOME/qlc/config/qlc.conf`. The installation process uses a two-stage symlink system to manage data directories, allowing the config file to remain simple and portable.
|
183
|
+
|
184
|
+
For example, in `test` mode:
|
185
|
+
- `$HOME/qlc/Results` (the path in your config) -> is a symlink to
|
186
|
+
- `$HOME/qlc_v<version>/test/Results` -> which is a symlink to
|
187
|
+
- `$HOME/qlc_v<version>/test/data/Results` -> which is a real directory.
|
188
|
+
|
189
|
+
In `cams` mode, the final target is a symlink to a shared directory (e.g., `$SCRATCH/Results`), but the path in your config file remains the same.
|
190
|
+
|
191
|
+
---
|
192
|
+
|
193
|
+
## Developer Setup
|
194
|
+
|
195
|
+
To work on the `qlc` source code, clone the repository and install it in "editable" mode.
|
196
|
+
|
197
|
+
```bash
|
198
|
+
# 1. Clone the repository
|
199
|
+
git clone https://github.com/researchConcepts/qlc.git
|
200
|
+
cd qlc
|
201
|
+
|
202
|
+
# 2. (Recommended) Create and activate a virtual environment
|
203
|
+
python3 -m venv .venv
|
204
|
+
source .venv/bin/activate
|
205
|
+
|
206
|
+
# 3. Install in editable mode (this compiles the Cython modules)
|
207
|
+
pip install -e .
|
208
|
+
|
209
|
+
# 4. Set up the test environment for development
|
210
|
+
qlc-install --mode test
|
211
|
+
```
|
212
|
+
|
213
|
+
For advanced development, you can also use `--mode interactive`, which requires you to provide a path to a custom configuration file using the `--config` flag. This is useful for testing with non-standard setups.
|
214
|
+
```bash
|
215
|
+
qlc-install --mode interactive --config /path/to/your/custom_qlc.conf
|
216
|
+
```
|
217
|
+
|
218
|
+
## Advanced Topics
|
219
|
+
|
220
|
+
### Installing PyFerret for Global Plots
|
221
|
+
|
222
|
+
The `qlc_C5.sh` script, which generates global map plots, requires the `pyferret` library. This is an optional dependency.
|
223
|
+
|
224
|
+
- **To install with `pyferret` support:**
|
225
|
+
```bash
|
226
|
+
pip install "rc-qlc[ferret]"
|
227
|
+
```
|
228
|
+
- **If you do not need these plots**, you can either skip the `pyferret` installation or, if it's already installed, disable the script by commenting out `"C5"` in the `SUBSCRIPT_NAMES` array in your `$HOME/qlc/config/qlc.conf` file.
|
229
|
+
- **For HPC environments**, `pyferret` is often available as a module that can be loaded (e.g., `module load ferret/7.6.3`).
|
230
|
+
|
231
|
+
### Manual PyFerret Installation for macOS / Apple Silicon
|
232
|
+
|
233
|
+
If you are using a Mac with Apple Silicon (M1/M2/M3) or if the standard installation fails, `pyferret` may require a manual setup using a dedicated `conda` environment. `pip` installations are not recommended for this package on macOS as they may not work correctly with the ARM architecture.
|
234
|
+
|
235
|
+
The most reliable method is to use `conda` with the Rosetta 2 translation layer.
|
236
|
+
|
237
|
+
**1. (If needed) Install Conda**
|
238
|
+
If you do not have `conda` installed, we recommend **Miniforge**, which is a minimal installer that is optimized for Apple Silicon and includes the high-performance `mamba` package manager.
|
239
|
+
```bash
|
240
|
+
# Download and run the installer for Apple Silicon
|
241
|
+
curl -L -O "https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-MacOSX-arm64.sh"
|
242
|
+
bash Miniforge3-MacOSX-arm64.sh
|
243
|
+
# Follow the prompts and restart your terminal after installation
|
244
|
+
```
|
245
|
+
|
246
|
+
**2. Create a Dedicated x86_64 Environment for PyFerret**
|
247
|
+
This command creates a new `conda` environment named `pyferret_env` and installs the Intel (`x86_64`) version of `pyferret`, which will run seamlessly on Apple Silicon via Rosetta 2. It also pins `numpy` to a version older than 2.0 to ensure compatibility.
|
248
|
+
|
249
|
+
```bash
|
250
|
+
CONDA_SUBDIR=osx-64 conda create -n pyferret_env -c conda-forge pyferret ferret_datasets "numpy<2" --yes
|
251
|
+
```
|
252
|
+
|
253
|
+
**3. Configure QLC to Use the New Environment**
|
254
|
+
The QLC scripts need to know where to find this new `pyferret` installation. You can achieve this by modifying the `qlc_C5.sh` script to activate the environment.
|
255
|
+
|
256
|
+
Open the file `$HOME/qlc/sh/qlc_C5.sh` and add the following lines near the top, after `source $FUNCTIONS`:
|
257
|
+
|
258
|
+
```bash
|
259
|
+
# ... after 'source $FUNCTIONS'
|
260
|
+
# Activate the dedicated conda environment for pyferret
|
261
|
+
if [ -f "$HOME/miniforge3/bin/activate" ]; then
|
262
|
+
. "$HOME/miniforge3/bin/activate"
|
263
|
+
conda activate pyferret_env
|
264
|
+
fi
|
265
|
+
# ... rest of the script
|
266
|
+
```
|
267
|
+
*Note: The path to the activate script may differ if you installed Anaconda/Miniforge in a custom location.*
|
268
|
+
|
269
|
+
### MARS Data Retrieval
|
270
|
+
The `qlc_A1.sh` script is responsible for retrieving data from the ECMWF MARS archive. It uses a mapping system to associate the experiment prefix with a MARS `class`.
|
271
|
+
|
272
|
+
By default, the script is configured for `nl` (Netherlands), `be` (Belgium), and `rd` (Research Department) experiments. If you are working with data from other classes (e.g., `fr` for France, `de` for Germany), you will need to manually edit `$HOME/qlc/sh/qlc_A1.sh` and uncomment / edit the corresponding `XCLASS` line to ensure data is retrieved correctly.
|
273
|
+
|
274
|
+
---
|
275
|
+
|
276
|
+
## Troubleshooting
|
277
|
+
|
278
|
+
### macOS "Permission Denied" or Quarantine Issues
|
279
|
+
|
280
|
+
On macOS, the Gatekeeper security feature may "quarantine" files, including shell scripts that have been downloaded or modified. This can prevent them from being executed, sometimes with a "Permission Denied" error, even if the file has the correct execute permissions (`+x`).
|
281
|
+
|
282
|
+
This is most likely to occur if you manually edit the `qlc` shell scripts (`.sh` files) directly in their `site-packages` installation directory.
|
283
|
+
|
284
|
+
To resolve this, you can manually remove the quarantine attribute from the script directory using the `xattr` command in your terminal.
|
285
|
+
|
286
|
+
1. **First, find the exact location of the `qlc` package:**
|
287
|
+
```bash
|
288
|
+
pip show rc-qlc
|
289
|
+
```
|
290
|
+
Look for the `Location:` line in the output. This is your `site-packages` path.
|
291
|
+
|
292
|
+
2. **Then, use the `xattr` command to remove the quarantine flag:**
|
293
|
+
Use the path from the previous step to build the full path to the `qlc/sh` directory.
|
294
|
+
```bash
|
295
|
+
# The path will depend on your Python installation. Use the location from 'pip show'.
|
296
|
+
xattr -rd com.apple.quarantine /path/to/your/site-packages/qlc/sh/
|
297
|
+
```
|
298
|
+
|
299
|
+
This should immediately resolve the execution issues.
|
300
|
+
|
301
|
+
---
|
302
|
+
|
303
|
+
## License
|
304
|
+
|
305
|
+
© ResearchConcepts io GmbH
|
306
|
+
Contact: [contact@researchconcepts.io](mailto:contact@researchconcepts.io)
|
307
|
+
MIT-compatible, source-restricted under private release until publication.
|
308
|
+
|
309
|
+
---
|