1- """Script to download ESACCI-OZONE from the CDS."""
1+ """Script to download ESACCI-OZONE from the CDS and BIRA WebDAV ."""
22
33import gzip
44import logging
55import shutil
66import zipfile
7+ from datetime import datetime
78
89import cdsapi
10+ from dateutil import relativedelta
11+
12+ from esmvaltool .cmorizers .data .downloaders .wget import WGetDownloader
913
1014logger = logging .getLogger (__name__ )
1115
@@ -26,28 +30,61 @@ def download_dataset(
2630 the ECMWF account needs to be saved in user's ${HOME} directory.
2731 - All the files will be saved in Tier2/ESACCI-OZONE.
2832 """
29- cds_url = "https://cds.climate.copernicus.eu/api"
30-
3133 if dataset == "ESACCI-OZONE" :
34+ output_folder = (
35+ original_data_dir / f"Tier{ dataset_info ['tier' ]} " / dataset
36+ )
37+ output_folder .mkdir (parents = True , exist_ok = True )
38+
39+ cds_url = "https://cds.climate.copernicus.eu/api"
40+
41+ if start_date is None :
42+ gto_year1 = 1995
43+ omps_year1 = 1984
44+ megridop_year1 = 2001
45+ else :
46+ gto_year1 = start_date .year
47+ omps_year1 = start_date .year
48+ megridop_year1 = start_date .year
49+ if end_date is None :
50+ gto_year2 = 2024
51+ omps_year2 = 2023
52+ megridop_year2 = 2023
53+ else :
54+ gto_year2 = end_date .year
55+ omps_year2 = end_date .year
56+ megridop_year2 = end_date .year
57+
3258 requests = {
33- "toz " : {
59+ "toz_gto_ecv " : {
3460 "processing_level" : "level_3" ,
3561 "variable" : "atmosphere_mole_content_of_ozone" ,
36- "vertical_aggregation" : "total_column " ,
37- "sensor" : ["merged_uv " ],
38- "year" : [str (y ) for y in range (1995 , 2024 )],
62+ "vertical_aggregation" : "total_columns_uv " ,
63+ "sensor" : ["gto_ecv " ],
64+ "year" : [str (y ) for y in range (gto_year1 , gto_year2 )],
3965 "month" : [f"{ m :02d} " for m in range (1 , 13 )],
4066 "version" : ["v2000" ],
4167 },
42- "o3 " : {
68+ "o3_sage_omps " : {
4369 "processing_level" : "level_3" ,
4470 "variable" : "mole_concentration_of_ozone_in_air" ,
4571 "vertical_aggregation" : "vertical_profiles_from_limb_sensors" ,
46- "sensor" : ["cmzm " ],
47- "year" : [str (y ) for y in range (1984 , 2023 )],
72+ "sensor" : ["sage_cci_omps_conc " ],
73+ "year" : [str (y ) for y in range (omps_year1 , omps_year2 )],
4874 "month" : [f"{ m :02d} " for m in range (1 , 13 )],
4975 "version" : ["v0008" ],
5076 },
77+ "o3_sage_megridop" : {
78+ "processing_level" : "level_3" ,
79+ "variable" : "mole_concentration_of_ozone_in_air" ,
80+ "vertical_aggregation" : "vertical_profiles_from_limb_sensors" ,
81+ "sensor" : ["megridop_conc" ],
82+ "year" : [
83+ str (y ) for y in range (megridop_year1 , megridop_year2 )
84+ ],
85+ "month" : [f"{ m :02d} " for m in range (1 , 13 )],
86+ "version" : ["v0004" ],
87+ },
5188 }
5289
5390 client = cdsapi .Client (cds_url )
@@ -88,5 +125,41 @@ def download_dataset(
88125 with open (output_folder / file_path .stem , "wb" ) as f_out :
89126 shutil .copyfileobj (f_in , f_out )
90127
128+ # download IASI data from BIRA WebDAV (IASI data not available on CDS)
129+ # all the files will be saved by in ${RAWOBS}/Tier2/ESACCI-OZONE
130+
131+ if start_date is None :
132+ start_date = datetime (2008 , 1 , 1 )
133+ if end_date is None :
134+ end_date = datetime (2023 , 12 , 31 )
135+
136+ downloader = WGetDownloader (
137+ original_data_dir = original_data_dir ,
138+ dataset = dataset ,
139+ dataset_info = dataset_info ,
140+ overwrite = overwrite ,
141+ )
142+
143+ basepath = "https://webdav.aeronomie.be/guest/o3_cci/webdata/Nadir_Profiles/L3/IASI_MG_FORLI"
144+
145+ wget_options = [
146+ "-e robots=off" , # ignore robots.txt
147+ "--no-parent" , # don't ascend to the parent directory
148+ "--accept=nc" , # download only *.nc files
149+ "--user=o3_cci_public" , # user name
150+ "--password=" , # empty password (no password needed for public access)
151+ ]
152+
153+ loop_date = start_date
154+ while loop_date <= end_date :
155+ year = loop_date .year
156+
157+ # directory on server to download
158+ remotepath = f"{ basepath } /{ year } "
159+ downloader .download_folder (remotepath , wget_options )
160+
161+ loop_date += relativedelta .relativedelta (years = 1 )
162+
91163 else :
92- raise ValueError (f"Unknown dataset: { dataset } " )
164+ errmsg = f"Unknown dataset: { dataset } "
165+ raise ValueError (errmsg )
0 commit comments