Skip to content

Commit ec4a5c2

Browse files
committed
Merge remote-tracking branch 'public/main' into sanity_checks_basic
2 parents 13f7195 + e977fce commit ec4a5c2

8 files changed

Lines changed: 763 additions & 296 deletions

File tree

conda-linux-64.lock

Lines changed: 33 additions & 35 deletions
Large diffs are not rendered by default.

doc/sphinx/source/input.rst

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,8 @@ A list of the datasets for which a CMORizers is available is provided in the fol
311311
+------------------------------+------------------------------------------------------------------------------------------------------+------+-----------------+
312312
| ESACCI-AEROSOL | abs550aer, od550aer, od550aerStderr, od550lt1aer, od870aer, od870aerStderr (aero) | 2 | NCL |
313313
+------------------------------+------------------------------------------------------------------------------------------------------+------+-----------------+
314-
| ESACCI-CLOUD | clivi, clt, cltStderr, clwvi, lwp, rlut, rlutcs, rsut, rsutcs, rsdt, rlus, rsus, rsuscs (Amon) | 2 | NCL |
314+
| ESACCI-CLOUD | clivi, clt, cltStderr, clwvi, lwp, rlut, rlutcs, rsut, rsutcs, rsdt, rlus, rsus, rsuscs (Amon), | 2 | Python |
315+
| | clt, clwvi, cod (day) | 2 | |
315316
+------------------------------+------------------------------------------------------------------------------------------------------+------+-----------------+
316317
| ESACCI-FIRE | burntArea (Lmon) | 2 | NCL |
317318
+------------------------------+------------------------------------------------------------------------------------------------------+------+-----------------+
Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
# CMORIZE ESA CCI CLOUD daily/monthly data
2+
---
3+
start_year_monthly: 1982
4+
end_year_monthly: 2016
5+
start_year_daily: 2003
6+
end_year_daily: 2007
7+
8+
daily_data: False
9+
10+
# Common global attributes for Cmorizer output
11+
attributes:
12+
dataset_id: ESACCI-CLOUD
13+
version: 'v3.0-AVHRR'
14+
tier: 2
15+
project_id: OBS6
16+
source: 'ESA CCI'
17+
modeling_realm: sat
18+
reference: 'esacci_cloud'
19+
comment: ''
20+
21+
22+
# Variables to cmorize
23+
variables:
24+
# daily data
25+
clt_day:
26+
short_name: clt
27+
mip: day
28+
raw: [cmask_desc, cmask_asc]
29+
raw_units: '1'
30+
file: '-ESACCI-L3U_CLOUD-CLD_MASKTYPE-AVHRR_*-fv3.0.nc'
31+
clwvi_day:
32+
short_name: clwvi
33+
mip: CFday
34+
raw: [cwp_desc, cwp_asc]
35+
raw_units: g/m2
36+
file: '-ESACCI-L3U_CLOUD-CLD_PRODUCTS-AVHRR_*-fv3.0.nc'
37+
cod_day:
38+
short_name: cod
39+
mip: day
40+
raw: [cot_desc, cot_asc]
41+
raw_units: 1
42+
file: '-ESACCI-L3U_CLOUD-CLD_PRODUCTS-AVHRR_*-fv3.0.nc'
43+
44+
# monthly data
45+
clt_mon:
46+
short_name: clt
47+
mip: Amon
48+
raw: cfc
49+
raw_units: '1'
50+
file: '-ESACCI-L3C_CLOUD-CLD_PRODUCTS-AVHRR_*-fv3.0.nc'
51+
cltStderr_mon:
52+
short_name: cltStderr
53+
mip: Amon
54+
raw: cfc_unc
55+
raw_units: '%'
56+
file: '-ESACCI-L3C_CLOUD-CLD_PRODUCTS-AVHRR_*-fv3.0.nc'
57+
lwp_mon:
58+
short_name: lwp
59+
mip: Amon
60+
raw: lwp_allsky
61+
raw_units: g/m2
62+
file: '-ESACCI-L3C_CLOUD-CLD_PRODUCTS-AVHRR_*-fv3.0.nc'
63+
clivi_mon:
64+
short_name: clivi
65+
mip: Amon
66+
raw: iwp_allsky
67+
raw_units: g/m2
68+
file: '-ESACCI-L3C_CLOUD-CLD_PRODUCTS-AVHRR_*-fv3.0.nc'
69+
clwvi_mon:
70+
short_name: clwvi
71+
mip: Amon
72+
raw: iwp_allsky
73+
raw_units: g/m2
74+
file: '-ESACCI-L3C_CLOUD-CLD_PRODUCTS-AVHRR_*-fv3.0.nc'
75+
rlut_mon:
76+
short_name: rlut
77+
mip: Amon
78+
raw: toa_lwup
79+
raw_units: W m-2
80+
file: '-ESACCI-L3C_CLOUD-CLD_PRODUCTS-AVHRR_*-fv3.0.nc'
81+
rlutcs_mon:
82+
short_name: rlutcs
83+
mip: Amon
84+
raw: toa_lwup_clr
85+
raw_units: W m-2
86+
file: '-ESACCI-L3C_CLOUD-CLD_PRODUCTS-AVHRR_*-fv3.0.nc'
87+
rsut_mon:
88+
short_name: rsut
89+
mip: Amon
90+
raw: toa_swup
91+
raw_units: W m-2
92+
file: '-ESACCI-L3C_CLOUD-CLD_PRODUCTS-AVHRR_*-fv3.0.nc'
93+
rsutcs_mon:
94+
short_name: rsutcs
95+
mip: Amon
96+
raw: toa_swup_clr
97+
raw_units: W m-2
98+
file: '-ESACCI-L3C_CLOUD-CLD_PRODUCTS-AVHRR_*-fv3.0.nc'
99+
rsdt_mon:
100+
short_name: rsdt
101+
mip: Amon
102+
raw: toa_swdn
103+
raw_units: W m-2
104+
file: '-ESACCI-L3C_CLOUD-CLD_PRODUCTS-AVHRR_*-fv3.0.nc'
105+
rlus_mon:
106+
short_name: rlus
107+
mip: Amon
108+
raw: boa_lwup
109+
raw_units: W m-2
110+
file: '-ESACCI-L3C_CLOUD-CLD_PRODUCTS-AVHRR_*-fv3.0.nc'
111+
rsus_mon:
112+
short_name: rsus
113+
mip: Amon
114+
raw: boa_swup
115+
raw_units: W m-2
116+
file: '-ESACCI-L3C_CLOUD-CLD_PRODUCTS-AVHRR_*-fv3.0.nc'
117+
rsuscs_mon:
118+
short_name: rsuscs
119+
mip: Amon
120+
raw: boa_swup_clr
121+
raw_units: W m-2
122+
file: '-ESACCI-L3C_CLOUD-CLD_PRODUCTS-AVHRR_*-fv3.0.nc'
Lines changed: 119 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
1-
"""Script to download ESACCI-CLOUD."""
1+
"""Script to download daily and monthly ESACCI-CLOUD data."""
22

3+
import logging
34
from datetime import datetime
45

56
from dateutil import relativedelta
67

7-
from esmvaltool.cmorizers.data.downloaders.ftp import CCIDownloader
8+
from esmvaltool.cmorizers.data.downloaders.wget import WGetDownloader
9+
from esmvaltool.cmorizers.data.utilities import read_cmor_config
10+
11+
logger = logging.getLogger(__name__)
812

913

1014
def download_dataset(
@@ -27,40 +31,129 @@ def download_dataset(
2731
overwrite : bool
2832
Overwrite already downloaded files
2933
"""
34+
35+
start_date_day = False
3036
if start_date is None:
3137
start_date = datetime(1982, 1, 1)
38+
start_date_day = datetime(2003, 1, 1)
3239
if end_date is None:
33-
end_date = datetime(2016, 1, 1)
40+
end_date = datetime(2016, 12, 31)
3441
loop_date = start_date
3542

36-
downloader = CCIDownloader(
43+
downloader = WGetDownloader(
3744
config=config,
3845
dataset=dataset,
3946
dataset_info=dataset_info,
4047
overwrite=overwrite,
4148
)
42-
downloader.connect()
43-
end_of_file = "ESACCI-L3C_CLOUD-CLD_PRODUCTS-AVHRR_NOAA-12-fv3.0.nc"
44-
filler_data = {
45-
1994: [
46-
f"AVHRR_NOAA_12/1994/199409-{end_of_file}",
47-
f"AVHRR_NOAA_12/1994/199410-{end_of_file}",
48-
f"AVHRR_NOAA_12/1994/199411-{end_of_file}",
49-
f"AVHRR_NOAA_12/1994/199412-{end_of_file}",
50-
],
51-
1995: [
52-
f"AVHRR_NOAA_12/1995/199501-{end_of_file}",
53-
],
54-
}
49+
50+
# check if daily data needs to be downloaded
51+
cmor_config = read_cmor_config(dataset)
52+
daily_data = cmor_config["daily_data"]
53+
if not daily_data:
54+
logger.info(
55+
'If daily data needs to be downloaded change "daily_data" in the '
56+
'cmor_config file to "True" '
57+
"(esmvaltool/cmorizers/data/cmor_config/ESACCI-CLOUD.yml)"
58+
)
59+
60+
# Base paths for L3U (daily data) and L3C (monthly data)
61+
base_path_l3u = (
62+
"https://public.satproj.klima.dwd.de/data/ESA_Cloud_CCI/"
63+
"CLD_PRODUCTS/v3.0/L3U/"
64+
)
65+
base_path_l3c = (
66+
"https://public.satproj.klima.dwd.de/data/ESA_Cloud_CCI/"
67+
"CLD_PRODUCTS/v3.0/L3C/"
68+
)
69+
70+
wget_options = [
71+
"-r",
72+
"-e robots=off", # Ignore robots.txt
73+
"--no-parent", # Don't ascend to the parent directory
74+
'--reject="index.html"', # Reject any HTML files
75+
]
5576

5677
while loop_date <= end_date:
5778
year = loop_date.year
58-
downloader.set_cwd("version3/L3C/AVHRR-PM/v3.0")
59-
for folder in downloader.list_folders():
60-
for year_folder in downloader.list_folders(folder):
61-
if int(year_folder) == year:
62-
downloader.download_year(f"{folder}/{year_folder}")
63-
downloader.set_cwd("version3/L3C/AVHRR-AM/v3.0")
64-
for extra_file in filler_data.get(year, []):
65-
downloader.download_file(extra_file)
66-
loop_date += relativedelta.relativedelta(years=1)
79+
month = loop_date.month
80+
date = f"{year}{month:02}"
81+
82+
if datetime(1982, 1, 1) <= loop_date < datetime(1985, 2, 1):
83+
sat_am = ""
84+
sat_pm = "AVHRR-PM/AVHRR_NOAA-7/"
85+
elif datetime(1985, 2, 1) <= loop_date < datetime(1988, 11, 1):
86+
sat_am = ""
87+
sat_pm = "AVHRR-PM/AVHRR_NOAA-9/"
88+
elif datetime(1988, 11, 1) <= loop_date < datetime(1991, 9, 1):
89+
sat_am = ""
90+
sat_pm = "AVHRR-PM/AVHRR_NOAA-11/"
91+
elif datetime(1991, 9, 1) <= loop_date < datetime(1994, 9, 1):
92+
sat_am = "AVHRR-AM/AVHRR_NOAA-12/"
93+
sat_pm = "AVHRR-PM/AVHRR_NOAA-11/"
94+
elif datetime(1994, 9, 1) <= loop_date < datetime(1995, 2, 1):
95+
sat_am = "AVHRR-AM/AVHRR_NOAA-12/"
96+
sat_pm = ""
97+
elif datetime(1995, 2, 1) <= loop_date < datetime(1999, 1, 1):
98+
sat_am = "AVHRR-AM/AVHRR_NOAA-12/"
99+
sat_pm = "AVHRR-PM/AVHRR_NOAA-14/"
100+
elif datetime(1999, 1, 1) <= loop_date < datetime(2001, 4, 1):
101+
sat_am = "AVHRR-AM/AVHRR_NOAA-15/"
102+
sat_pm = "AVHRR-PM/AVHRR_NOAA-14/"
103+
elif datetime(2001, 4, 1) <= loop_date < datetime(2002, 11, 1):
104+
sat_am = "AVHRR-AM/AVHRR_NOAA-15/"
105+
sat_pm = "AVHRR-PM/AVHRR_NOAA-16/"
106+
elif datetime(2002, 11, 1) <= loop_date < datetime(2005, 9, 1):
107+
sat_am = "AVHRR-AM/AVHRR_NOAA-17/"
108+
sat_pm = "AVHRR-PM/AVHRR_NOAA-16/"
109+
elif datetime(2005, 9, 1) <= loop_date < datetime(2007, 7, 1):
110+
sat_am = "AVHRR-AM/AVHRR_NOAA-17/"
111+
sat_pm = "AVHRR-PM/AVHRR_NOAA-18/"
112+
elif datetime(2007, 7, 1) <= loop_date < datetime(2009, 6, 1):
113+
sat_am = "AVHRR-AM/AVHRR_METOPA/"
114+
sat_pm = "AVHRR-PM/AVHRR_NOAA-18/"
115+
elif datetime(2009, 6, 1) <= loop_date < datetime(2017, 1, 1):
116+
sat_am = "AVHRR-AM/AVHRR_METOPA/"
117+
sat_pm = "AVHRR-PM/AVHRR_NOAA-19/"
118+
else:
119+
msg = f"Data for this date {date} is not available"
120+
raise ValueError(msg)
121+
122+
# Download monthly data from L3C
123+
for sat in (sat_am, sat_pm):
124+
if sat != "":
125+
# monthly data
126+
logger.info("Downloading monthly data (L3C) for sat = %s", sat)
127+
folder_l3c = base_path_l3c + sat + f"{year}/"
128+
wget_options_l3c = wget_options.copy()
129+
wget_options_l3c.append(f"--accept={date}*.nc")
130+
logger.info(
131+
"Download folder for monthly data (L3C): %s", folder_l3c
132+
)
133+
downloader.download_file(folder_l3c, wget_options_l3c)
134+
135+
# daily data
136+
if daily_data:
137+
if not start_date_day or (
138+
start_date_day
139+
and datetime(2003, 1, 1)
140+
<= loop_date
141+
<= datetime(2007, 2, 1)
142+
):
143+
logger.info(
144+
"Downloading daily data (L3U) for sat = %s", sat
145+
)
146+
folder_l3u = base_path_l3u + sat + f"{year}/{month:02}"
147+
wget_options_l3u = wget_options.copy()
148+
wget_options_l3u.append(
149+
f"--accept={date}*CLD_MASKTYPE*.nc,"
150+
f"{date}*CLD_PRODUCTS*.nc"
151+
)
152+
logger.info(
153+
"Download folder for daily data (L3U): %s",
154+
folder_l3u,
155+
)
156+
downloader.download_file(folder_l3u, wget_options_l3u)
157+
158+
# Increment the loop_date by one month
159+
loop_date += relativedelta.relativedelta(months=1)

0 commit comments

Comments
 (0)