rc-qlc 0.3.24__cp311-cp311-win_amd64.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/__init__.py +8 -0
- qlc/cli/__init__.py +21 -0
- qlc/cli/installer.py +16 -0
- qlc/cli/qlc_main.py +185 -0
- qlc/cli/qlc_py_main.py +74 -0
- qlc/config/json/qlc_config.json +41 -0
- qlc/config/json/qlc_config_example_1a_all-obs.json +237 -0
- qlc/config/json/qlc_config_example_1b_all-mod.json +353 -0
- qlc/config/json/qlc_config_example_1c_all-coll.json +266 -0
- qlc/config/json/qlc_config_example_2a_all-obs.json +237 -0
- qlc/config/json/qlc_config_example_2b_all-mod.json +353 -0
- qlc/config/json/qlc_config_example_2c_all-coll.json +265 -0
- qlc/config/json/qlc_config_example_3a-us_obs.json +82 -0
- qlc/config/json/qlc_config_example_3b-us_mod.json +122 -0
- qlc/config/json/qlc_config_example_3c-us_coll.json +46 -0
- qlc/config/json/qlc_config_example_4a_eu-obs.json +41 -0
- qlc/config/json/qlc_config_example_4b_eu-mod.json +122 -0
- qlc/config/json/qlc_config_example_4c_eu-coll.json +45 -0
- qlc/config/nml/mars_A1_sfc.nml +19 -0
- qlc/config/nml/mars_A2_sfc.nml +19 -0
- qlc/config/nml/mars_A3_sfc.nml +19 -0
- qlc/config/nml/mars_B1_pl.nml +19 -0
- qlc/config/nml/mars_B2_pl.nml +19 -0
- qlc/config/nml/mars_C1_pl.nml +19 -0
- qlc/config/nml/mars_C2_pl.nml +19 -0
- qlc/config/nml/mars_C3_ml.nml +19 -0
- qlc/config/nml/mars_D.nml +19 -0
- qlc/config/nml/mars_E.nml +19 -0
- qlc/config/nml/mars_F.nml +19 -0
- qlc/config/nml/mars_G.nml +19 -0
- qlc/config/qlc_cams.conf +26 -0
- qlc/config/qlc_test.conf +26 -0
- qlc/config/qlc_tex.conf +107 -0
- qlc/doc/CONTRIBUTING.md +105 -0
- qlc/doc/README.md +116 -0
- qlc/doc/USAGE.md +58 -0
- qlc/examples/cams_case_1/config/json/qlc_config.json +41 -0
- qlc/examples/cams_case_1/config/nml/mars_A3_sfc.nml +19 -0
- qlc/examples/cams_case_1/config/nml/mars_B1_pl.nml +19 -0
- qlc/examples/cams_case_1/config/nml/mars_C1_pl.nml +19 -0
- qlc/examples/cams_case_1/config/qlc_cams.conf +122 -0
- qlc/examples/cams_case_1/mod/b2ro/2018/b2ro_20181215-20181231_A3_sfc.grb +0 -0
- qlc/examples/cams_case_1/mod/iqi9/2018/iqi9_20181215-20181231_A3_sfc.grb +0 -0
- qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181201.nc +0 -0
- qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181202.nc +0 -0
- qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181203.nc +0 -0
- qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181204.nc +0 -0
- qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181205.nc +0 -0
- qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181206.nc +0 -0
- qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181207.nc +0 -0
- qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181208.nc +0 -0
- qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181209.nc +0 -0
- qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181210.nc +0 -0
- qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181211.nc +0 -0
- qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181212.nc +0 -0
- qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181213.nc +0 -0
- qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181214.nc +0 -0
- qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181215.nc +0 -0
- qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181216.nc +0 -0
- qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181217.nc +0 -0
- qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181218.nc +0 -0
- qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181219.nc +0 -0
- qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181220.nc +0 -0
- qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181221.nc +0 -0
- qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181222.nc +0 -0
- qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181223.nc +0 -0
- qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181224.nc +0 -0
- qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181225.nc +0 -0
- qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181226.nc +0 -0
- qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181227.nc +0 -0
- qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181228.nc +0 -0
- qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181229.nc +0 -0
- qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181230.nc +0 -0
- qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181231.nc +0 -0
- qlc/examples/cams_case_1/obs/ebas_station-locations.csv +50 -0
- qlc/install.py +285 -0
- qlc/py/__main__.cp311-win_amd64.pyd +0 -0
- qlc/py/averaging.cp311-win_amd64.pyd +0 -0
- qlc/py/bias_plots.cp311-win_amd64.pyd +0 -0
- qlc/py/control.cp311-win_amd64.pyd +0 -0
- qlc/py/io.cp311-win_amd64.pyd +0 -0
- qlc/py/loadmod.cp311-win_amd64.pyd +0 -0
- qlc/py/loadobs.cp311-win_amd64.pyd +0 -0
- qlc/py/logging_utils.cp311-win_amd64.pyd +0 -0
- qlc/py/map_plots.cp311-win_amd64.pyd +0 -0
- qlc/py/matched.cp311-win_amd64.pyd +0 -0
- qlc/py/plot_config.cp311-win_amd64.pyd +0 -0
- qlc/py/plotting.cp311-win_amd64.pyd +0 -0
- qlc/py/plugin_loader.cp311-win_amd64.pyd +0 -0
- qlc/py/processing.cp311-win_amd64.pyd +0 -0
- qlc/py/scatter_plots.cp311-win_amd64.pyd +0 -0
- qlc/py/stations.cp311-win_amd64.pyd +0 -0
- qlc/py/statistics.cp311-win_amd64.pyd +0 -0
- qlc/py/style.cp311-win_amd64.pyd +0 -0
- qlc/py/timeseries_plots.cp311-win_amd64.pyd +0 -0
- qlc/py/utils.cp311-win_amd64.pyd +0 -0
- qlc/py/version.cp311-win_amd64.pyd +0 -0
- qlc/sh/qlc_A1.sh +127 -0
- qlc/sh/qlc_B1a.sh +123 -0
- qlc/sh/qlc_B2.sh +258 -0
- qlc/sh/qlc_C5.sh +825 -0
- qlc/sh/qlc_D1.sh +130 -0
- qlc/sh/qlc_Z1.sh +165 -0
- qlc/sh/qlc_common_functions.sh +157 -0
- qlc/sh/qlc_main.sh +127 -0
- qlc/sh/qlc_start.sh +23 -0
- qlc/sh/qlc_start_batch.sh +46 -0
- rc_qlc-0.3.24.dist-info/METADATA +142 -0
- rc_qlc-0.3.24.dist-info/RECORD +113 -0
- rc_qlc-0.3.24.dist-info/WHEEL +5 -0
- rc_qlc-0.3.24.dist-info/entry_points.txt +6 -0
- rc_qlc-0.3.24.dist-info/licenses/LICENSE +21 -0
- rc_qlc-0.3.24.dist-info/top_level.txt +1 -0
@@ -0,0 +1,45 @@
|
|
1
|
+
[
|
2
|
+
{
|
3
|
+
"name": "CAMS2_35",
|
4
|
+
"logdir": "./log",
|
5
|
+
"workdir": "./run",
|
6
|
+
"output_base_name": "$HOME/qlc/output/GMD",
|
7
|
+
"station_file": "$HOME/qlc/obs/data/ebas_station-locations.csv",
|
8
|
+
"obs_path": "$HOME/qlc/obs/data/ver0d",
|
9
|
+
"obs_dataset_type": "ebas_daily",
|
10
|
+
"mod_path": "$HOME/qlc/mod/",
|
11
|
+
"model": "ifs",
|
12
|
+
"experiments": "hylm,i3bw,i3ad",
|
13
|
+
"exp_labels": "CY48R1,CY49R1_NOE4C,CY49R1",
|
14
|
+
"start_date": "2018-12-01",
|
15
|
+
"end_date": "2018-12-31",
|
16
|
+
"variable": "SO2,SO4,HNO3,NO3,NH3,NH4",
|
17
|
+
"station_radius_deg": 0.5,
|
18
|
+
"plot_type": "",
|
19
|
+
"plot_region": "EU",
|
20
|
+
"time_average": "daily,weekly",
|
21
|
+
"station_plot_group_size": 5,
|
22
|
+
"show_stations": false,
|
23
|
+
"show_min_max": true,
|
24
|
+
"log_y_axis": false,
|
25
|
+
"fix_y_axis": true,
|
26
|
+
"show_station_map": true,
|
27
|
+
"load_station_timeseries_obs": false,
|
28
|
+
"show_station_timeseries_obs": false,
|
29
|
+
"show_station_timeseries_mod": false,
|
30
|
+
"show_station_timeseries_com": true,
|
31
|
+
"save_plot_format": "pdf",
|
32
|
+
"save_data_format": "nc",
|
33
|
+
"multiprocessing": true,
|
34
|
+
"n_threads": "4",
|
35
|
+
"debug": false,
|
36
|
+
|
37
|
+
"global_attributes": {
|
38
|
+
"title": "Air pollutants over Europe, SO2,SO4,HNO3,NO3,NH4,NH3",
|
39
|
+
"summary": "EBAS daily observations for selected EU stations.",
|
40
|
+
"author": "Swen Metzger, sm@researchconcepts.io",
|
41
|
+
"history": "Processed for CAMS2_35bis (dev 1.2)",
|
42
|
+
"Conventions": "CF-1.8"
|
43
|
+
}
|
44
|
+
}
|
45
|
+
]
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# adopt to your needs, except for EXP, SDATE, EDATE, MYPATH, MYFILE, which will be auto-replaced
|
2
|
+
# add your param_, ncvar_ and myvar_ to your $HOME/qlc/qlc.conf file
|
3
|
+
# param_A=("207.210" "72.210" "73.210" "74.210")
|
4
|
+
# ncvar_A=("var207" "var72" "var73" "var74")
|
5
|
+
# myvar_A=("AOD" "PM1" "PM2.5" "PM10")
|
6
|
+
# surface level
|
7
|
+
RETRIEVE,
|
8
|
+
CLASS = XCLASS,
|
9
|
+
TYPE = fc,
|
10
|
+
STREAM = oper,
|
11
|
+
EXPVER = EXP,
|
12
|
+
PARAM = 73.210,
|
13
|
+
LEVTYPE = sfc,
|
14
|
+
GRID = 1.0/1.0,
|
15
|
+
TIME = 00:00:00,
|
16
|
+
STEP = 0/6/12/18,
|
17
|
+
LEVELIST = 137,
|
18
|
+
DATE = SDATE/to/EDATE,
|
19
|
+
target = "MYPATH/MYFILE_A1_sfc.grb"
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# adopt to your needs, except for EXP, SDATE, EDATE, MYPATH, MYFILE, which will be auto-replaced
|
2
|
+
# add your param_, ncvar_ and myvar_ to your $HOME/qlc/qlc.conf file
|
3
|
+
# param_A=("207.210" "72.210" "73.210" "74.210")
|
4
|
+
# ncvar_A=("var207" "var72" "var73" "var74")
|
5
|
+
# myvar_A=("AOD" "PM1" "PM2.5" "PM10")
|
6
|
+
# surface level
|
7
|
+
RETRIEVE,
|
8
|
+
CLASS = XCLASS,
|
9
|
+
TYPE = fc,
|
10
|
+
STREAM = oper,
|
11
|
+
EXPVER = EXP,
|
12
|
+
PARAM = 207.210/72.210/73.210/74.210,
|
13
|
+
LEVTYPE = sfc,
|
14
|
+
GRID = 0.5/0.5,
|
15
|
+
TIME = 00:00:00,
|
16
|
+
STEP = 0/to/21/by/3,
|
17
|
+
LEVELIST = 137,
|
18
|
+
DATE = SDATE/to/EDATE,
|
19
|
+
target = "MYPATH/MYFILE_A2_sfc.grb"
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# adopt to your needs, except for EXP, SDATE, EDATE, MYPATH, MYFILE, which will be auto-replaced
|
2
|
+
# add your param_, ncvar_ and myvar_ to your $HOME/qlc/config/qlc.conf file
|
3
|
+
# param_A3-sfc=("203.210")
|
4
|
+
# ncvar_A3-sfc=("go3")
|
5
|
+
# myvar_A3-sfc=("O3")
|
6
|
+
# surface level
|
7
|
+
RETRIEVE,
|
8
|
+
CLASS = XCLASS,
|
9
|
+
TYPE = fc,
|
10
|
+
STREAM = oper,
|
11
|
+
EXPVER = EXP,
|
12
|
+
PARAM = 203.210,
|
13
|
+
LEVTYPE = sfc,
|
14
|
+
GRID = 1.0/1.0,
|
15
|
+
TIME = 00:00:00,
|
16
|
+
STEP = 0/6/12/18,
|
17
|
+
LEVELIST = 137,
|
18
|
+
DATE = SDATE/to/EDATE,
|
19
|
+
target = "MYPATH/MYFILE_A3_sfc.grb"
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# adopt to your needs, except for EXP, SDATE, EDATE, MYPATH, MYFILE, which will be auto-replaced
|
2
|
+
# add your param_, ncvar_ and myvar_ to your $HOME/qlc/qlc.conf file
|
3
|
+
# param_B=("19.217" "6.217" "122.210" "203.210")
|
4
|
+
# ncvar_B=("var19" "var6" "var122" "var203")
|
5
|
+
# myvar_B=("NH3" "HNO3" "SO2" "O3")
|
6
|
+
# pressure levels
|
7
|
+
RETRIEVE,
|
8
|
+
CLASS = XCLASS,
|
9
|
+
TYPE = fc,
|
10
|
+
STREAM = oper,
|
11
|
+
EXPVER = EXP,
|
12
|
+
PARAM = 19.217,
|
13
|
+
LEVTYPE = pl,
|
14
|
+
GRID = 1.0/1.0,
|
15
|
+
TIME = 00:00:00,
|
16
|
+
STEP = 0/6/12/18,
|
17
|
+
LEVELIST = 10/20/30/50/70/100/150/200/250/300/400/500/700/850/925/1000,
|
18
|
+
DATE = SDATE/to/EDATE,
|
19
|
+
target = "MYPATH/MYFILE_B1_pl.grb"
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# adopt to your needs, except for EXP, SDATE, EDATE, MYPATH, MYFILE, which will be auto-replaced
|
2
|
+
# add your param_, ncvar_ and myvar_ to your $HOME/qlc/qlc.conf file
|
3
|
+
# param_B=("19.217" "6.217" "122.210" "203.210")
|
4
|
+
# ncvar_B=("var19" "var6" "var122" "var203")
|
5
|
+
# myvar_B=("NH3" "HNO3" "SO2" "O3")
|
6
|
+
# pressure levels
|
7
|
+
RETRIEVE,
|
8
|
+
CLASS = XCLASS,
|
9
|
+
TYPE = fc,
|
10
|
+
STREAM = oper,
|
11
|
+
EXPVER = EXP,
|
12
|
+
PARAM = 19.217/6.217/122.210/203.210,
|
13
|
+
LEVTYPE = pl,
|
14
|
+
GRID = 0.5/0.5,
|
15
|
+
TIME = 00:00:00,
|
16
|
+
STEP = 0/to/21/by/3,
|
17
|
+
LEVELIST = 1/2/3/5/7/10/20/30/50/70/100/150/200/250/300/400/500/700/850/925/1000,
|
18
|
+
DATE = SDATE/to/EDATE,
|
19
|
+
target = "MYPATH/MYFILE_B2_pl.grb"
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# adopt to your needs, except for EXP, SDATE, EDATE, MYPATH, MYFILE, which will be auto-replaced
|
2
|
+
# add your param_, ncvar_ and myvar_ to your $HOME/qlc/qlc.conf file
|
3
|
+
# param_C2=("36.212" "35.212" "2.212" "1.212")
|
4
|
+
# ncvar_C2=("var36" "var35" "var2" "var1" )
|
5
|
+
# myvar_C2=("NO3_as" "NH4_as" "SO4_as" "N_as")
|
6
|
+
# model levels
|
7
|
+
RETRIEVE,
|
8
|
+
CLASS = XCLASS,
|
9
|
+
TYPE = fc,
|
10
|
+
STREAM = oper,
|
11
|
+
EXPVER = EXP,
|
12
|
+
PARAM = 35.212,
|
13
|
+
LEVTYPE = pl,
|
14
|
+
GRID = 1.0/1.0,
|
15
|
+
TIME = 00:00:00,
|
16
|
+
STEP = 0/6/12/18,
|
17
|
+
LEVELIST = 10/20/30/50/70/100/150/200/250/300/400/500/700/850/925/1000,
|
18
|
+
DATE = SDATE/to/EDATE,
|
19
|
+
target = "MYPATH/MYFILE_C1_pl.grb"
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# adopt to your needs, except for EXP, SDATE, EDATE, MYPATH, MYFILE, which will be auto-replaced
|
2
|
+
# add your param_, ncvar_ and myvar_ to your $HOME/qlc/qlc.conf file
|
3
|
+
# param_C2=("36.212" "35.212" "2.212" "1.212")
|
4
|
+
# ncvar_C2=("var36" "var35" "var2" "var1" )
|
5
|
+
# myvar_C2=("NO3_as" "NH4_as" "SO4_as" "N_as")
|
6
|
+
# model levels
|
7
|
+
RETRIEVE,
|
8
|
+
CLASS = XCLASS,
|
9
|
+
TYPE = fc,
|
10
|
+
STREAM = oper,
|
11
|
+
EXPVER = EXP,
|
12
|
+
PARAM = 36.212/35.212/2.212/1.212,
|
13
|
+
LEVTYPE = pl,
|
14
|
+
GRID = 0.5/0.5,
|
15
|
+
TIME = 00:00:00,
|
16
|
+
STEP = 0/to/21/by/3,
|
17
|
+
LEVELIST = 1/2/3/5/7/10/20/30/50/70/100/150/200/250/300/400/500/700/850/925/1000,
|
18
|
+
DATE = SDATE/to/EDATE,
|
19
|
+
target = "MYPATH/MYFILE_C2_pl.grb"
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# adopt to your needs, except for EXP, SDATE, EDATE, MYPATH, MYFILE, which will be auto-replaced
|
2
|
+
# add your param_, ncvar_ and myvar_ to your $HOME/qlc/qlc.conf file
|
3
|
+
# param_C3-ml=("247.210" "248.210" "249.210" "11.210")
|
4
|
+
# ncvar_C3-ml=("var247" "var248" "var249" "var11" )
|
5
|
+
# myvar_C3-ml=("NO3a" "NO3b" "NH4" "SO4")
|
6
|
+
# model levels
|
7
|
+
RETRIEVE,
|
8
|
+
CLASS = XCLASS,
|
9
|
+
TYPE = fc,
|
10
|
+
STREAM = oper,
|
11
|
+
EXPVER = EXP,
|
12
|
+
PARAM = 247.210/248.210/249.210/11.210,
|
13
|
+
LEVTYPE = ml,
|
14
|
+
GRID = 0.5/0.5,
|
15
|
+
TIME = 00:00:00,
|
16
|
+
STEP = 0/to/21/by/3,
|
17
|
+
LEVELIST = 1/to/137,
|
18
|
+
DATE = SDATE/to/EDATE,
|
19
|
+
target = "MYPATH/MYFILE_C3_ml.grb"
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# adopt to your needs, except for EXP, SDATE, EDATE, MYPATH, MYFILE, which will be auto-replaced
|
2
|
+
# add your param_, ncvar_ and myvar_ to your $HOME/qlc/qlc.conf file
|
3
|
+
# param_D=("51.212" "52.212")
|
4
|
+
# ncvar_D=("var51" "var52")
|
5
|
+
# myvar_D=("pHcloud" "pHrain")
|
6
|
+
# model levels
|
7
|
+
RETRIEVE,
|
8
|
+
CLASS = XCLASS,
|
9
|
+
TYPE = fc,
|
10
|
+
STREAM = oper,
|
11
|
+
EXPVER = EXP,
|
12
|
+
PARAM = 51.212/52.212,
|
13
|
+
LEVTYPE = ml,
|
14
|
+
GRID = 0.5/0.5,
|
15
|
+
TIME = 00:00:00,
|
16
|
+
STEP = 0/to/21/by/3,
|
17
|
+
LEVELIST = 100/to/137,
|
18
|
+
DATE = SDATE/to/EDATE,
|
19
|
+
target = "MYPATH/MYFILE_D.grb"
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# adopt to your needs, except for EXP, SDATE, EDATE, MYPATH, MYFILE, which will be auto-replaced
|
2
|
+
# add your param_, ncvar_ and myvar_ to your $HOME/qlc/qlc.conf file
|
3
|
+
# param_E=("210025")
|
4
|
+
# ncvar_E=("aergn10")
|
5
|
+
# myvar_E=("EQdiag")
|
6
|
+
# model level 1:80: 1-30 GF/ 31-60 AW speciated + 61-80 diag fields
|
7
|
+
RETRIEVE,
|
8
|
+
CLASS = XCLASS,
|
9
|
+
TYPE = fc,
|
10
|
+
STREAM = oper,
|
11
|
+
EXPVER = EXP,
|
12
|
+
PARAM = 210025,
|
13
|
+
LEVTYPE = ml,
|
14
|
+
GRID = 0.5/0.5,
|
15
|
+
TIME = 00:00:00,
|
16
|
+
STEP = 0/to/21/by/3,
|
17
|
+
LEVELIST = 1/to/71,
|
18
|
+
DATE = SDATE/to/EDATE,
|
19
|
+
target = "MYPATH/MYFILE_E.grb"
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# adopt to your needs, except for EXP, SDATE, EDATE, MYPATH, MYFILE, which will be auto-replaced
|
2
|
+
# add your param_, ncvar_ and myvar_ to your $HOME/qlc/qlc.conf file
|
3
|
+
# param_F=("22.210")
|
4
|
+
# ncvar_F=("aergn07")
|
5
|
+
# myvar_F=("pHaer")
|
6
|
+
# model level 12: aerosol pH
|
7
|
+
RETRIEVE,
|
8
|
+
CLASS = XCLASS,
|
9
|
+
TYPE = fc,
|
10
|
+
STREAM = oper,
|
11
|
+
EXPVER = EXP,
|
12
|
+
PARAM = 22.210,
|
13
|
+
LEVTYPE = ml,
|
14
|
+
GRID = 0.5/0.5,
|
15
|
+
TIME = 00:00:00,
|
16
|
+
STEP = 0/to/21/by/3,
|
17
|
+
LEVELIST = 12,
|
18
|
+
DATE = SDATE/to/EDATE,
|
19
|
+
target = "MYPATH/MYFILE_F.grb"
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# adopt to your needs, except for EXP, SDATE, EDATE, MYPATH, MYFILE, which will be auto-replaced
|
2
|
+
# add your param_, ncvar_ and myvar_ to your $HOME/qlc/qlc.conf file
|
3
|
+
# param_G=("22.210")
|
4
|
+
# ncvar_G=("aergn07")
|
5
|
+
# myvar_G=("AW")
|
6
|
+
# model level 15: aerosol water
|
7
|
+
RETRIEVE,
|
8
|
+
CLASS = XCLASS,
|
9
|
+
TYPE = fc,
|
10
|
+
STREAM = oper,
|
11
|
+
EXPVER = EXP,
|
12
|
+
PARAM = 22.210,
|
13
|
+
LEVTYPE = ml,
|
14
|
+
GRID = 0.5/0.5,
|
15
|
+
TIME = 00:00:00,
|
16
|
+
STEP = 0/to/21/by/3,
|
17
|
+
LEVELIST = 15,
|
18
|
+
DATE = SDATE/to/EDATE,
|
19
|
+
target = "MYPATH/MYFILE_G.grb"
|
qlc/config/qlc_cams.conf
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
#----------------------------------------------------------------------
|
2
|
+
#----------------------- QLC version to be used -------------------
|
3
|
+
QLC_VERSION="VERSION"
|
4
|
+
#----------------------- Path definitions -------------------------
|
5
|
+
QLC_HOME="$HOME/qlc"
|
6
|
+
QLC_DIRECTORY="${QLC_HOME}_v${QLC_VERSION}/cams"
|
7
|
+
SCRIPTS_PATH="${QLC_DIRECTORY}/bin"
|
8
|
+
WORKING_DIRECTORY="$SCRATCH/qlc"
|
9
|
+
MARS_RETRIEVAL_DIRECTORY="$SCRATCH/qlc/Results"
|
10
|
+
ANALYSIS_DIRECTORY="$HPCPERM/qlc/Analysis"
|
11
|
+
PLOTS_DIRECTORY="$PERM/qlc/Plots"
|
12
|
+
TEX_DIRECTORY="$PERM/qlc/Presentations"
|
13
|
+
#----------------------- PDF presentation and info -------------
|
14
|
+
TEAM_PREFIX="CAMS2_35"
|
15
|
+
EVALUATION_PREFIX="EVAL"
|
16
|
+
MODEL_RESOLUTION="T255L137"
|
17
|
+
TIME_RESOLUTION="03hh"
|
18
|
+
#----------------------------------------------------------------------
|
19
|
+
# User specific configuration file
|
20
|
+
CONFIG_DIR="$HOME/qlc/config"
|
21
|
+
CONFIG_TEX="$CONFIG_DIR/qlc_tex.conf"
|
22
|
+
#----------------------------------------------------------------------
|
23
|
+
# Source the tex script configuration file to load the settings
|
24
|
+
. "$CONFIG_TEX"
|
25
|
+
#----------------------------------------------------------------------
|
26
|
+
#----------------------------------------------------------------------
|
qlc/config/qlc_test.conf
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
#----------------------------------------------------------------------
|
2
|
+
#----------------------- QLC version to be used -------------------
|
3
|
+
QLC_VERSION="VERSION"
|
4
|
+
#----------------------- Path definitions -------------------------
|
5
|
+
QLC_HOME="$HOME/qlc"
|
6
|
+
QLC_DIRECTORY="${QLC_HOME}_v${QLC_VERSION}/test"
|
7
|
+
SCRIPTS_PATH="${QLC_DIRECTORY}/bin"
|
8
|
+
WORKING_DIRECTORY="${QLC_DIRECTORY}"
|
9
|
+
MARS_RETRIEVAL_DIRECTORY="${QLC_HOME}/Results"
|
10
|
+
ANALYSIS_DIRECTORY="${QLC_HOME}/Analysis"
|
11
|
+
PLOTS_DIRECTORY="${QLC_HOME}/Plots"
|
12
|
+
TEX_DIRECTORY="${QLC_HOME}/Presentations"
|
13
|
+
#----------------------- PDF presentation and info -------------
|
14
|
+
TEAM_PREFIX="CAMS2_35"
|
15
|
+
EVALUATION_PREFIX="EVAL"
|
16
|
+
MODEL_RESOLUTION="T255L137"
|
17
|
+
TIME_RESOLUTION="03hh"
|
18
|
+
#----------------------------------------------------------------------
|
19
|
+
# User specific configuration file
|
20
|
+
CONFIG_DIR="$HOME/qlc/config"
|
21
|
+
CONFIG_TEX="$CONFIG_DIR/qlc_tex.conf"
|
22
|
+
#----------------------------------------------------------------------
|
23
|
+
# Source the tex script configuration file to load the settings
|
24
|
+
. "$CONFIG_TEX"
|
25
|
+
#----------------------------------------------------------------------
|
26
|
+
#----------------------------------------------------------------------
|
qlc/config/qlc_tex.conf
ADDED
@@ -0,0 +1,107 @@
|
|
1
|
+
#----------------------------------------------------------------------
|
2
|
+
#----------------------- PDF presentation and info -------------
|
3
|
+
#PLOTEXTENSION="pdf"
|
4
|
+
PLOTEXTENSION="png"
|
5
|
+
#----------------------- Run-time definitions -------------------------
|
6
|
+
#- 1. Definition of QLC complexity through selection of subscripts
|
7
|
+
#----------------------------------------------------------------------
|
8
|
+
#- (a) QLC unified data analysis and plotting (entries optional)
|
9
|
+
#----------------------------------------------------------------------
|
10
|
+
#SUBSCRIPT_NAMES=("A1" "B1" "B2" "C1" "D1" "E1" "F1" "G1" "Z1")
|
11
|
+
#SUBSCRIPT_NAMES=("C5" "Z1")
|
12
|
+
SUBSCRIPT_NAMES=("A1" "B1a" "B2" "C5" "Z1")
|
13
|
+
#----------------------------------------------------------------------
|
14
|
+
#- (b) QLC unified mars data retrieval (SUBSCRIPT_NAME, A1, A2, A3, ...)
|
15
|
+
#- Mars retrievals for namelist : nml/mars_A2.nml, nml/mars_B2.nml, ...)
|
16
|
+
#----------------------------------------------------------------------
|
17
|
+
#- MARS_RETRIEVALS=("A2_sfc" "B2_pl" "C2_pl" "C3_ml" "D" "E" "F" "I")
|
18
|
+
#- O3, NH3 and NH4_as
|
19
|
+
MARS_RETRIEVALS=("A3_sfc" "B1_pl" "C1_pl")
|
20
|
+
#----------------------------------------------------------------------
|
21
|
+
#- un/comment MARS_RETRIEVALS (choose one or combine contents into one)
|
22
|
+
#- The MARS_RETRIEVALS mapping is required for subscript processing (a)
|
23
|
+
#----------------------------------------------------------------------
|
24
|
+
#- Key variables (AOD, PM + gases and aerosols)
|
25
|
+
# MARS_RETRIEVALS=("A2_sfc" "B2_pl" "C2_pl")
|
26
|
+
#- pH variables (rain, cloud, aerosol pH and water)
|
27
|
+
# MARS_RETRIEVALS=("D" "F" "G")
|
28
|
+
#- Extended aerosol diagnostics (requires E4C and active 4D output)
|
29
|
+
# MARS_RETRIEVALS=("E")
|
30
|
+
#- PSC frequency (requires E4C output)
|
31
|
+
# MARS_RETRIEVALS=("H")
|
32
|
+
#- Meteo output (e.g., T, SH, RH)
|
33
|
+
# MARS_RETRIEVALS=("I")
|
34
|
+
#----------------------------------------------------------------------
|
35
|
+
#----------------------------------------------------------------------
|
36
|
+
#- 2. Variable mapping and definition (to be processed by subscripts)
|
37
|
+
#- (number of array elements need to match mars retrieval, if active)
|
38
|
+
#----------------------------------------------------------------------
|
39
|
+
#- e.g., surface variables (sfc)
|
40
|
+
#----------------------------------------------------------------------
|
41
|
+
param_A1_sfc=("73.210")
|
42
|
+
ncvar_A1_sfc=("var73")
|
43
|
+
myvar_A1_sfc=("PM25")
|
44
|
+
#----------------------------------------------------------------------
|
45
|
+
param_A2_sfc=("207.210" "72.210" "73.210" "74.210")
|
46
|
+
ncvar_A2_sfc=("var207" "var72" "var73" "var74")
|
47
|
+
myvar_A2_sfc=("AOD" "PM1" "PM25" "PM10")
|
48
|
+
#----------------------------------------------------------------------
|
49
|
+
param_A3_sfc=("203.210")
|
50
|
+
ncvar_A3_sfc=("go3")
|
51
|
+
myvar_A3_sfc=("O3")
|
52
|
+
#----------------------------------------------------------------------
|
53
|
+
#- e.g., gases (pressure levels, pl)
|
54
|
+
#----------------------------------------------------------------------
|
55
|
+
param_B1_pl=("19.217")
|
56
|
+
ncvar_B1_pl=("var19")
|
57
|
+
myvar_B1_pl=("NH3")
|
58
|
+
#----------------------------------------------------------------------
|
59
|
+
param_B2_pl=("19.217" "6.217" "122.210" "203.210")
|
60
|
+
ncvar_B2_pl=("var19" "var6" "var122" "var203")
|
61
|
+
myvar_B2_pl=("NH3" "HNO3" "SO2" "O3")
|
62
|
+
#----------------------------------------------------------------------
|
63
|
+
#- e.g., aerosols (pressure levels, pl)
|
64
|
+
#----------------------------------------------------------------------
|
65
|
+
param_C1_pl=("35.212")
|
66
|
+
ncvar_C1_pl=("var35")
|
67
|
+
myvar_C1_pl=("NH4_as")
|
68
|
+
#----------------------------------------------------------------------
|
69
|
+
param_C2_pl=("36.212" "35.212" "2.212" "1.212")
|
70
|
+
ncvar_C2_pl=("var36" "var35" "var2" "var1" )
|
71
|
+
myvar_C2_pl=("NO3_as" "NH4_as" "SO4_as" "N_as")
|
72
|
+
#----------------------------------------------------------------------
|
73
|
+
param_C3_ml=("247.210" "248.210" "249.210" "11.210")
|
74
|
+
ncvar_C3_ml=("var247" "var248" "var249" "var11" )
|
75
|
+
myvar_C3_ml=("NO3a" "NO3b" "NH4" "SO4")
|
76
|
+
#----------------------------------------------------------------------
|
77
|
+
#- e.g., aerosol diagnostics
|
78
|
+
#----------------------------------------------------------------------
|
79
|
+
param_D=("51.212" "52.212")
|
80
|
+
ncvar_D=("var51" "var52")
|
81
|
+
myvar_D=("pHcloud" "pHrain")
|
82
|
+
#----------------------------------------------------------------------
|
83
|
+
param_E=("210025")
|
84
|
+
ncvar_E=("aergn10")
|
85
|
+
myvar_E=("EQdiag")
|
86
|
+
#----------------------------------------------------------------------
|
87
|
+
param_F=("22.210")
|
88
|
+
ncvar_F=("aergn07")
|
89
|
+
myvar_F=("pHaer")
|
90
|
+
#----------------------------------------------------------------------
|
91
|
+
param_G=("22.210")
|
92
|
+
ncvar_G=("aergn07")
|
93
|
+
myvar_G=("AW")
|
94
|
+
#----------------------------------------------------------------------
|
95
|
+
#- e.g., stratospheric diagnostics
|
96
|
+
#----------------------------------------------------------------------
|
97
|
+
param_H=("25.210")
|
98
|
+
ncvar_H=("aergn10")
|
99
|
+
myvar_H=("PSCfreq")
|
100
|
+
#----------------------------------------------------------------------
|
101
|
+
#- e.g., meteo fields
|
102
|
+
#----------------------------------------------------------------------
|
103
|
+
param_I=("130" "133" "157")
|
104
|
+
ncvar_I=("var130" "var133" "var157")
|
105
|
+
myvar_I=("T" "SH" "RH")
|
106
|
+
#----------------------------------------------------------------------
|
107
|
+
#----------------------------------------------------------------------
|
qlc/doc/CONTRIBUTING.md
ADDED
@@ -0,0 +1,105 @@
|
|
1
|
+
# Contributing to QLC
|
2
|
+
|
3
|
+
Thank you for considering contributing to QLC!
|
4
|
+
|
5
|
+
This project supports structured comparisons between model and observation datasets (CAMS, surface stations, etc.). Contributions are welcome in the form of bug reports, feature proposals, configuration templates, or plugins.
|
6
|
+
|
7
|
+
---
|
8
|
+
|
9
|
+
## Package Layout
|
10
|
+
|
11
|
+
- `qlc/`: Main package directory.
|
12
|
+
- `cli/`: Command-line entry point logic.
|
13
|
+
- `py/`: Core Python/Cython source files (compiled to binaries).
|
14
|
+
- `sh/`: Shell scripts for the pipeline driver.
|
15
|
+
- `config/`: Configuration templates and defaults.
|
16
|
+
- `examples/`: Sample case for testing.
|
17
|
+
- `doc/`: Documentation files.
|
18
|
+
|
19
|
+
---
|
20
|
+
|
21
|
+
## CLI Tools
|
22
|
+
|
23
|
+
After installation, the following entry points are available:
|
24
|
+
|
25
|
+
- `qlc` → Shell-based full pipeline
|
26
|
+
- `qlc-py` → Python-only driver
|
27
|
+
- `sqlc` → Batch wrapper for `qlc`
|
28
|
+
|
29
|
+
---
|
30
|
+
|
31
|
+
## Plugin Support
|
32
|
+
|
33
|
+
Plugins may be placed in:
|
34
|
+
|
35
|
+
```bash
|
36
|
+
~/qlc/plugin/
|
37
|
+
```
|
38
|
+
|
39
|
+
These are loaded dynamically via `plugin_loader.py` if found.
|
40
|
+
|
41
|
+
---
|
42
|
+
|
43
|
+
## Development Setup
|
44
|
+
|
45
|
+
To contribute to `qlc`, you should set up a local development environment. This allows you to edit the code and test your changes live.
|
46
|
+
|
47
|
+
1. **Clone the repository:**
|
48
|
+
```bash
|
49
|
+
git clone https://github.com/researchConcepts/qlc.git
|
50
|
+
cd qlc
|
51
|
+
```
|
52
|
+
|
53
|
+
2. **(Recommended) Create and activate a virtual environment:**
|
54
|
+
```bash
|
55
|
+
python3 -m venv .venv
|
56
|
+
source .venv/bin/activate
|
57
|
+
```
|
58
|
+
|
59
|
+
3. **Install in "editable" mode:**
|
60
|
+
This command installs all dependencies and links your environment to your source code. Any changes you make to the `.py` files will be reflected immediately.
|
61
|
+
```bash
|
62
|
+
pip install -e .
|
63
|
+
```
|
64
|
+
|
65
|
+
---
|
66
|
+
|
67
|
+
## Building Wheels for Distribution
|
68
|
+
|
69
|
+
To build the platform-specific wheels for distribution on PyPI, use the provided build script. It handles the complexities of cross-platform compilation.
|
70
|
+
|
71
|
+
```bash
|
72
|
+
# Ensure you have the target Python version installed (e.g., 3.10)
|
73
|
+
# Then run the build script, pointing to that interpreter
|
74
|
+
python build_wheels.py --python /path/to/your/python3.10
|
75
|
+
```
|
76
|
+
The final wheels will be located in the `dist/` directory.
|
77
|
+
|
78
|
+
---
|
79
|
+
|
80
|
+
## Testing
|
81
|
+
|
82
|
+
Unit tests (to be added) will be collected under `tests/`.
|
83
|
+
|
84
|
+
```bash
|
85
|
+
python -m qlc.install --test
|
86
|
+
python -m qlc.install --cams
|
87
|
+
```
|
88
|
+
|
89
|
+
---
|
90
|
+
|
91
|
+
## Style Guide
|
92
|
+
|
93
|
+
- Follow [PEP8](https://www.python.org/dev/peps/pep-0008/)
|
94
|
+
- Use docstrings in PEP257 format and keep things simple (KISS principle)
|
95
|
+
- Write CLI-facing functions with clean logging
|
96
|
+
|
97
|
+
---
|
98
|
+
|
99
|
+
## License
|
100
|
+
|
101
|
+
This project uses the MIT License. By contributing, you agree your code may be distributed under the same license.
|
102
|
+
|
103
|
+
---
|
104
|
+
|
105
|
+
Thanks again!
|
qlc/doc/README.md
ADDED
@@ -0,0 +1,116 @@
|
|
1
|
+
# Quick Look Content (QLC): Model–Observation Comparison Suite for Use with CAMS
|
2
|
+
|
3
|
+
`qlc` is a single command-line tool for model–observation comparisons with automated figures and summaries,
|
4
|
+
designed to support climate and air quality monitoring and specifically adapted for use with CAMS (Copernicus Atmospheric Monitoring Service) datasets.
|
5
|
+
|
6
|
+
| Package | Status |
|
7
|
+
|---------|--------|
|
8
|
+
| [rc-qlc on PyPI](https://pypi.org/project/rc-qlc/) |  |
|
9
|
+
|
10
|
+
---
|
11
|
+
|
12
|
+
## Features
|
13
|
+
|
14
|
+
- Side-by-side evaluation of observational and modelled data
|
15
|
+
- Fully scriptable and automated post-processing chain
|
16
|
+
- Modular structure using shell + Python + Cython
|
17
|
+
- Generates publication-ready figures and LaTeX integration
|
18
|
+
- Supports NetCDF and CSV time series formats
|
19
|
+
- Pre-configured CAMS observational interface via JSON
|
20
|
+
|
21
|
+
---
|
22
|
+
|
23
|
+
## User Installation
|
24
|
+
|
25
|
+
Use one of the following install modes:
|
26
|
+
|
27
|
+
```bash
|
28
|
+
# Option 1: CAMS (default data links + config)
|
29
|
+
pip install rc-qlc && qlc-install --cams
|
30
|
+
|
31
|
+
# Option 2: Local test mode with embedded examples
|
32
|
+
pip install rc-qlc && qlc-install --test
|
33
|
+
|
34
|
+
# Option 3: Custom interactive mode
|
35
|
+
pip install rc-qlc && qlc-install --interactive="./path/to/qlc_user.conf"
|
36
|
+
```
|
37
|
+
|
38
|
+
---
|
39
|
+
|
40
|
+
## Example Use Cases
|
41
|
+
|
42
|
+
### Run the full shell pipeline (retrieval, processing, plotting):
|
43
|
+
```bash
|
44
|
+
qlc
|
45
|
+
```
|
46
|
+
|
47
|
+
### Run just the observation/model comparison in Python:
|
48
|
+
```bash
|
49
|
+
qlc-py
|
50
|
+
```
|
51
|
+
|
52
|
+
### Submit via batch system (e.g., SLURM or LSF):
|
53
|
+
```bash
|
54
|
+
sqlc
|
55
|
+
```
|
56
|
+
|
57
|
+
## Developer Setup
|
58
|
+
|
59
|
+
To work on the `qlc` source code, clone the repository and install it in "editable" mode. This will install all dependencies and link the `qlc` command to your source tree.
|
60
|
+
|
61
|
+
```bash
|
62
|
+
# 1. Clone the repository
|
63
|
+
git clone https://github.com/researchConcepts/qlc.git
|
64
|
+
cd qlc
|
65
|
+
|
66
|
+
# 2. (Recommended) Create and activate a virtual environment
|
67
|
+
python3 -m venv .venv
|
68
|
+
source .venv/bin/activate
|
69
|
+
|
70
|
+
# 3. Install in editable mode
|
71
|
+
pip install -e .
|
72
|
+
```
|
73
|
+
|
74
|
+
---
|
75
|
+
|
76
|
+
## Configuration Structure
|
77
|
+
|
78
|
+
The installer script creates the following structure in your home directory:
|
79
|
+
```
|
80
|
+
$HOME/qlc_v<version>/
|
81
|
+
├── test/ # Root directory for the 'test' installation mode
|
82
|
+
│ ├── bin/ # Symlinks to shell scripts
|
83
|
+
│ ├── doc/ # Symlinks to documentation
|
84
|
+
│ ├── config/ # Active config files (e.g., qlc.conf)
|
85
|
+
│ ├── examples/ # Test input and output files
|
86
|
+
│ ├── obs/, mod/, ... # Runtime directories
|
87
|
+
│ └── VERSION.json # Tracks install mode and version
|
88
|
+
└── cams/ # Root for 'cams' mode, etc.
|
89
|
+
```
|
90
|
+
A symlink `$HOME/qlc` is also created to point to the active installation. You can edit `$HOME/qlc/config/qlc.conf` to modify runtime behavior.
|
91
|
+
|
92
|
+
---
|
93
|
+
|
94
|
+
## Documentation
|
95
|
+
|
96
|
+
- All core logic is contained in the `qlc` package.
|
97
|
+
- Shell scripts for driving the pipeline are in `qlc/sh/`.
|
98
|
+
- The core Python/Cython logic is in `qlc/py/*.py` and is compiled to binary modules for performance.
|
99
|
+
|
100
|
+
---
|
101
|
+
|
102
|
+
## Developer Notes
|
103
|
+
|
104
|
+
- Python source files (`.py`) are compiled to binary modules (`.so`) using Cython at install time.
|
105
|
+
- The package version is managed in `pyproject.toml`.
|
106
|
+
- The `qlc-install` script sets up the runtime environment by creating directories and symlinks.
|
107
|
+
|
108
|
+
---
|
109
|
+
|
110
|
+
## License
|
111
|
+
|
112
|
+
© ResearchConcepts io GmbH
|
113
|
+
Contact: [contact@researchconcepts.io](mailto:contact@researchconcepts.io)
|
114
|
+
MIT-compatible, source-restricted under private release until publication.
|
115
|
+
|
116
|
+
---
|