rc-qlc 0.3.24__cp311-cp311-macosx_11_0_arm64.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.
Files changed (113) hide show
  1. qlc/__init__.py +8 -0
  2. qlc/cli/__init__.py +21 -0
  3. qlc/cli/installer.py +16 -0
  4. qlc/cli/qlc_main.py +185 -0
  5. qlc/cli/qlc_py_main.py +74 -0
  6. qlc/config/json/qlc_config.json +41 -0
  7. qlc/config/json/qlc_config_example_1a_all-obs.json +237 -0
  8. qlc/config/json/qlc_config_example_1b_all-mod.json +353 -0
  9. qlc/config/json/qlc_config_example_1c_all-coll.json +266 -0
  10. qlc/config/json/qlc_config_example_2a_all-obs.json +237 -0
  11. qlc/config/json/qlc_config_example_2b_all-mod.json +353 -0
  12. qlc/config/json/qlc_config_example_2c_all-coll.json +265 -0
  13. qlc/config/json/qlc_config_example_3a-us_obs.json +82 -0
  14. qlc/config/json/qlc_config_example_3b-us_mod.json +122 -0
  15. qlc/config/json/qlc_config_example_3c-us_coll.json +46 -0
  16. qlc/config/json/qlc_config_example_4a_eu-obs.json +41 -0
  17. qlc/config/json/qlc_config_example_4b_eu-mod.json +122 -0
  18. qlc/config/json/qlc_config_example_4c_eu-coll.json +45 -0
  19. qlc/config/nml/mars_A1_sfc.nml +19 -0
  20. qlc/config/nml/mars_A2_sfc.nml +19 -0
  21. qlc/config/nml/mars_A3_sfc.nml +19 -0
  22. qlc/config/nml/mars_B1_pl.nml +19 -0
  23. qlc/config/nml/mars_B2_pl.nml +19 -0
  24. qlc/config/nml/mars_C1_pl.nml +19 -0
  25. qlc/config/nml/mars_C2_pl.nml +19 -0
  26. qlc/config/nml/mars_C3_ml.nml +19 -0
  27. qlc/config/nml/mars_D.nml +19 -0
  28. qlc/config/nml/mars_E.nml +19 -0
  29. qlc/config/nml/mars_F.nml +19 -0
  30. qlc/config/nml/mars_G.nml +19 -0
  31. qlc/config/qlc_cams.conf +26 -0
  32. qlc/config/qlc_test.conf +26 -0
  33. qlc/config/qlc_tex.conf +107 -0
  34. qlc/doc/CONTRIBUTING.md +105 -0
  35. qlc/doc/README.md +116 -0
  36. qlc/doc/USAGE.md +58 -0
  37. qlc/examples/cams_case_1/config/json/qlc_config.json +41 -0
  38. qlc/examples/cams_case_1/config/nml/mars_A3_sfc.nml +19 -0
  39. qlc/examples/cams_case_1/config/nml/mars_B1_pl.nml +19 -0
  40. qlc/examples/cams_case_1/config/nml/mars_C1_pl.nml +19 -0
  41. qlc/examples/cams_case_1/config/qlc_cams.conf +122 -0
  42. qlc/examples/cams_case_1/mod/b2ro/2018/b2ro_20181215-20181231_A3_sfc.grb +0 -0
  43. qlc/examples/cams_case_1/mod/iqi9/2018/iqi9_20181215-20181231_A3_sfc.grb +0 -0
  44. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181201.nc +0 -0
  45. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181202.nc +0 -0
  46. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181203.nc +0 -0
  47. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181204.nc +0 -0
  48. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181205.nc +0 -0
  49. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181206.nc +0 -0
  50. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181207.nc +0 -0
  51. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181208.nc +0 -0
  52. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181209.nc +0 -0
  53. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181210.nc +0 -0
  54. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181211.nc +0 -0
  55. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181212.nc +0 -0
  56. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181213.nc +0 -0
  57. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181214.nc +0 -0
  58. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181215.nc +0 -0
  59. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181216.nc +0 -0
  60. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181217.nc +0 -0
  61. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181218.nc +0 -0
  62. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181219.nc +0 -0
  63. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181220.nc +0 -0
  64. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181221.nc +0 -0
  65. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181222.nc +0 -0
  66. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181223.nc +0 -0
  67. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181224.nc +0 -0
  68. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181225.nc +0 -0
  69. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181226.nc +0 -0
  70. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181227.nc +0 -0
  71. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181228.nc +0 -0
  72. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181229.nc +0 -0
  73. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181230.nc +0 -0
  74. qlc/examples/cams_case_1/obs/ebas_daily/v_20240216/201812/ebas_20181231.nc +0 -0
  75. qlc/examples/cams_case_1/obs/ebas_station-locations.csv +50 -0
  76. qlc/install.py +285 -0
  77. qlc/py/__main__.cpython-311-darwin.so +0 -0
  78. qlc/py/averaging.cpython-311-darwin.so +0 -0
  79. qlc/py/bias_plots.cpython-311-darwin.so +0 -0
  80. qlc/py/control.cpython-311-darwin.so +0 -0
  81. qlc/py/io.cpython-311-darwin.so +0 -0
  82. qlc/py/loadmod.cpython-311-darwin.so +0 -0
  83. qlc/py/loadobs.cpython-311-darwin.so +0 -0
  84. qlc/py/logging_utils.cpython-311-darwin.so +0 -0
  85. qlc/py/map_plots.cpython-311-darwin.so +0 -0
  86. qlc/py/matched.cpython-311-darwin.so +0 -0
  87. qlc/py/plot_config.cpython-311-darwin.so +0 -0
  88. qlc/py/plotting.cpython-311-darwin.so +0 -0
  89. qlc/py/plugin_loader.cpython-311-darwin.so +0 -0
  90. qlc/py/processing.cpython-311-darwin.so +0 -0
  91. qlc/py/scatter_plots.cpython-311-darwin.so +0 -0
  92. qlc/py/stations.cpython-311-darwin.so +0 -0
  93. qlc/py/statistics.cpython-311-darwin.so +0 -0
  94. qlc/py/style.cpython-311-darwin.so +0 -0
  95. qlc/py/timeseries_plots.cpython-311-darwin.so +0 -0
  96. qlc/py/utils.cpython-311-darwin.so +0 -0
  97. qlc/py/version.cpython-311-darwin.so +0 -0
  98. qlc/sh/qlc_A1.sh +127 -0
  99. qlc/sh/qlc_B1a.sh +123 -0
  100. qlc/sh/qlc_B2.sh +258 -0
  101. qlc/sh/qlc_C5.sh +825 -0
  102. qlc/sh/qlc_D1.sh +130 -0
  103. qlc/sh/qlc_Z1.sh +165 -0
  104. qlc/sh/qlc_common_functions.sh +157 -0
  105. qlc/sh/qlc_main.sh +127 -0
  106. qlc/sh/qlc_start.sh +23 -0
  107. qlc/sh/qlc_start_batch.sh +46 -0
  108. rc_qlc-0.3.24.dist-info/METADATA +142 -0
  109. rc_qlc-0.3.24.dist-info/RECORD +113 -0
  110. rc_qlc-0.3.24.dist-info/WHEEL +5 -0
  111. rc_qlc-0.3.24.dist-info/entry_points.txt +6 -0
  112. rc_qlc-0.3.24.dist-info/licenses/LICENSE +21 -0
  113. 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"
@@ -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
+ #----------------------------------------------------------------------
@@ -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
+ #----------------------------------------------------------------------
@@ -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
+ #----------------------------------------------------------------------
@@ -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/) | ![PyPI](https://img.shields.io/pypi/v/rc-qlc?color=blue) |
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
+ ---