diff --git a/esmvaltool/cmorizers/data/cmor_config/ESACCI-LST.yml b/esmvaltool/cmorizers/data/cmor_config/ESACCI-LST.yml index b15ce08be0..b1b3c65e9c 100644 --- a/esmvaltool/cmorizers/data/cmor_config/ESACCI-LST.yml +++ b/esmvaltool/cmorizers/data/cmor_config/ESACCI-LST.yml @@ -1,13 +1,11 @@ -# CMORIZE ESA CCI LST -# Follwing CRU and ESACCI-OC as examples -# Only looking at AQUA MONTHLY data but python has placeholders for different platforms +# CMORIZE ESA CCI LST - V3 +# Only looking at AQUA MODIS MONTHLY --- - # Common global attributes for Cmorizer output attributes: dataset_id: ESACCI-LST - version: '1.00' + version: '3.00' tier: 2 project_id: OBS source: 'ESA CCI' @@ -20,12 +18,130 @@ attributes: # Variables to cmorize # These go into the vals dictionary in the python script variables: - ts: + tsLCDay: + mip: Amon + raw: land cover class + raw_units: + file: 'ESACCI-LST-L3C-LST-MODISA-0.01deg_1MONTHLY_DAY-' + start_year: 2003 + end_year: 2018 + + tsLCNight: + mip: Amon + raw: land cover class + raw_units: + file: 'ESACCI-LST-L3C-LST-MODISA-0.01deg_1MONTHLY_NIGHT-' + start_year: 2003 + end_year: 2018 + + tsTotalDay: + mip: Amon + raw: land surface temperature total uncertainty + raw_units: kelvin + file: 'ESACCI-LST-L3C-LST-MODISA-0.01deg_1MONTHLY_DAY-' + start_year: 2003 + end_year: 2018 + + tsTotalNight: + mip: Amon + raw: land surface temperature total uncertainty + raw_units: kelvin + file: 'ESACCI-LST-L3C-LST-MODISA-0.01deg_1MONTHLY_NIGHT-' + start_year: 2003 + end_year: 2018 + + tsVarDay: + mip: Amon + raw: land surface temperature variance + raw_units: kelvin + file: 'ESACCI-LST-L3C-LST-MODISA-0.01deg_1MONTHLY_DAY-' + start_year: 2003 + end_year: 2018 + + tsVarNight: + mip: Amon + raw: land surface temperature variance + raw_units: kelvin + file: 'ESACCI-LST-L3C-LST-MODISA-0.01deg_1MONTHLY_NIGHT-' + start_year: 2003 + end_year: 2018 + + tsDay: mip: Amon raw: land surface temperature raw_units: kelvin - file_day: 'ESACCI-LST-L3C-LST-MODISA-0.05deg_1MONTHLY_DAY-' - file_night: 'ESACCI-LST-L3C-LST-MODISA-0.05deg_1MONTHLY_NIGHT-' - # plan to make it possible to change MODISA here but only placeholders in the python there for now - # Period covered: 2003-2018 - # 2003 Only has data from July onwards for Aqua MODIS + file: 'ESACCI-LST-L3C-LST-MODISA-0.01deg_1MONTHLY_DAY-' + start_year: 2003 + end_year: 2018 + + tsNight: + mip: Amon + raw: land surface temperature + raw_units: kelvin + file: 'ESACCI-LST-L3C-LST-MODISA-0.01deg_1MONTHLY_NIGHT-' + start_year: 2003 + end_year: 2018 + + tsLocalAtmErrDay: + mip: Amon + raw: uncertainty from locally correlated errors on atmospheric scales + raw_units: kelvin + file: 'ESACCI-LST-L3C-LST-MODISA-0.01deg_1MONTHLY_DAY-' + start_year: 2003 + end_year: 2018 + + tsLocalAtmErrNight: + mip: Amon + raw: uncertainty from locally correlated errors on atmospheric scales + raw_units: kelvin + file: 'ESACCI-LST-L3C-LST-MODISA-0.01deg_1MONTHLY_NIGHT-' + start_year: 2003 + end_year: 2018 + + tsLocalSfcErrDay: + mip: Amon + raw: uncertainty from locally correlated errors on surface scales + raw_units: kelvin + file: 'ESACCI-LST-L3C-LST-MODISA-0.01deg_1MONTHLY_DAY-' + start_year: 2003 + end_year: 2018 + + tsLocalSfcErrNight: + mip: Amon + raw: uncertainty from locally correlated errors on surface scales + raw_units: kelvin + file: 'ESACCI-LST-L3C-LST-MODISA-0.01deg_1MONTHLY_NIGHT-' + start_year: 2003 + end_year: 2018 + + tsLSSysErrDay: + mip: Amon + raw: uncertainty from large-scale systematic errors + raw_units: kelvin + file: 'ESACCI-LST-L3C-LST-MODISA-0.01deg_1MONTHLY_DAY-' + start_year: 2003 + end_year: 2018 + + tsLSSysErrNight: + mip: Amon + raw: uncertainty from large-scale systematic errors + raw_units: kelvin + file: 'ESACCI-LST-L3C-LST-MODISA-0.01deg_1MONTHLY_NIGHT-' + start_year: 2003 + end_year: 2018 + + tsUnCorErrDay: + mip: Amon + raw: uncertainty from uncorrelated errors + raw_units: kelvin + file: 'ESACCI-LST-L3C-LST-MODISA-0.01deg_1MONTHLY_DAY-' + start_year: 2003 + end_year: 2018 + + tsUnCorErrNight: + mip: Amon + raw: uncertainty from uncorrelated errors + raw_units: kelvin + file: 'ESACCI-LST-L3C-LST-MODISA-0.01deg_1MONTHLY_NIGHT-' + start_year: 2003 + end_year: 2018 diff --git a/esmvaltool/cmorizers/data/datasets.yml b/esmvaltool/cmorizers/data/datasets.yml index dabe314025..95dbe8d47d 100644 --- a/esmvaltool/cmorizers/data/datasets.yml +++ b/esmvaltool/cmorizers/data/datasets.yml @@ -494,18 +494,18 @@ datasets: ESACCI-LST: tier: 2 - source: On CEDA-JASMIN, /gws/nopw/j04/esacci_lst/public - last_access: 2022-01-26 + source: CEDA + last_access: 2024-06-18 info: | - For access to this JASMIN group workspace please register at: - https://accounts.jasmin.ac.uk/services/group_workspaces/esacci_lst/ + Download the netCDF files from: + https://data.ceda.ac.uk/neodc/esacci/land_surface_temperature/data/AQUA_MODIS/L3C/0.01/v3.00/monthly Download and processing instructions: Put all files under a single directory (no subdirectories with years) in ${RAWOBS}/Tier2/ESACCI-LST BOTH DAY and NIGHT files are needed for each month Caveats - Currently set to work with only the MODIS AQUA L3 monthly data + Currently set to work with only the MODIS AQUA L3 monthly data (MODISA) ESACCI-OC: tier: 2 diff --git a/esmvaltool/cmorizers/data/downloaders/datasets/esacci_lst.py b/esmvaltool/cmorizers/data/downloaders/datasets/esacci_lst.py new file mode 100644 index 0000000000..a3db01fd65 --- /dev/null +++ b/esmvaltool/cmorizers/data/downloaders/datasets/esacci_lst.py @@ -0,0 +1,90 @@ +"""Script to download ESACCI-LST from CCI CEDA ftp.""" + +import logging + +from datetime import datetime + +from dateutil import relativedelta + +from esmvaltool.cmorizers.data.downloaders.ftp import CCIDownloader + +logger = logging.getLogger(__name__) + + +def download_dataset(config, dataset, dataset_info, start_date, end_date, + overwrite): + """Download dataset. + + Parameters + ---------- + config : dict + ESMValTool's user configuration + dataset : str + Name of the dataset + dataset_info : dict + Dataset information from the datasets.yml file + start_date : datetime + Start of the interval to download + end_date : datetime + End of the interval to download + overwrite : bool + Overwrite already downloaded files + """ + if start_date is None: + start_date = datetime(2003, 1, 1) + if end_date is None: + end_date = datetime(2018, 12, 31) + loop_date = start_date + + downloader = CCIDownloader( + config=config, + dataset=dataset, + dataset_info=dataset_info, + overwrite=overwrite, + dataset_name='land_surface_temperature', + ) + downloader.connect() + + # download daily data + +# loop_date = start_date +# rel_base_dir = 'AQUA_MODIS/L3C/0.01/v3.00/daily' +# while loop_date <= end_date: +# downloader.set_cwd(rel_base_dir) +# if downloader.exists(f'{loop_date.year}'): +# downloader.set_cwd(f'{rel_base_dir}/{loop_date.year}') +# if downloader.exists(f'{loop_date.month:02}'): +# downloader.set_cwd(f'{rel_base_dir}/{loop_date.year}/' +# f'{loop_date.month:02}') +# if downloader.exists(f'{loop_date.day:02}'): +# downloader.download_folder(f'{loop_date.day:02}', +# sub_folder=f'{loop_date.year}_daily') +# else: +# logger.info('%d/%d/%d: no data found', loop_date.year, +# loop_date.month, loop_date.day) +# loop_date += relativedelta.relativedelta(days=1) +# else: +# logger.info('%d/%d: no data found', loop_date.year, +# loop_date.month) +# loop_date += relativedelta.relativedelta(months=1) +# else: +# logger.info('%d: no data found', loop_date.year) +# loop_date += relativedelta.relativedelta(years=1) + + # download monthly data + + loop_date = start_date + rel_base_dir = 'AQUA_MODIS/L3C/0.01/v3.00/monthly' + while loop_date <= end_date: + downloader.set_cwd(rel_base_dir) + if downloader.exists(f'{loop_date.year}'): + downloader.set_cwd(f'{rel_base_dir}/{loop_date.year}') + if downloader.exists(f'{loop_date.month:02}'): + downloader.download_folder(f'{loop_date.month:02}') + else: + logger.info('%d/%d: no data found', loop_date.year, + loop_date.month) + loop_date += relativedelta.relativedelta(months=1) + else: + logger.info('%d: no data found', loop_date.year) + loop_date += relativedelta.relativedelta(years=1) diff --git a/esmvaltool/cmorizers/data/downloaders/ftp.py b/esmvaltool/cmorizers/data/downloaders/ftp.py index 9f0cd5e8f9..533a5dca63 100644 --- a/esmvaltool/cmorizers/data/downloaders/ftp.py +++ b/esmvaltool/cmorizers/data/downloaders/ftp.py @@ -176,11 +176,18 @@ class CCIDownloader(FTPDownloader): Dataset information from the datasets.yml file overwrite : bool Overwrite already downloaded files + dataset_name : str + optional override for directory name on CEDA within + 'esacci' folder """ - def __init__(self, config, dataset, dataset_info, overwrite): + def __init__(self, config, dataset, dataset_info, overwrite, + dataset_name=None): super().__init__(config, 'anon-ftp.ceda.ac.uk', dataset, dataset_info, overwrite) - self.ftp_name = self.dataset_name[7:] + if dataset_name: + self.ftp_name = dataset_name + else: + self.ftp_name = self.dataset_name[7:] def set_cwd(self, path): """Set current work directory. diff --git a/esmvaltool/cmorizers/data/formatters/datasets/esacci_lst.py b/esmvaltool/cmorizers/data/formatters/datasets/esacci_lst.py index 70d8f1dc1e..e61d818f6e 100644 --- a/esmvaltool/cmorizers/data/formatters/datasets/esacci_lst.py +++ b/esmvaltool/cmorizers/data/formatters/datasets/esacci_lst.py @@ -1,160 +1,138 @@ -"""ESMValTool CMORizer for ESACCI-LST data. +"""ESMValTool CMORizer for ESACCI-LST. -Tier - Tier 2: other freely-available dataset. - -Source - On CEDA-JASMIN - /gws/nopw/j04/esacci_lst/public - For access to this JASMIN group workspace please register at - https://accounts.jasmin.ac.uk/services/group_workspaces/esacci_lst/ - -Download and processing instructions - Put all files under a single directory (no subdirectories with years) - in ${RAWOBS}/Tier2/ESACCI-LST - BOTH DAY and NIGHT files are needed for each month - -Currently set to work with only the MODIS AQUA L3 monthly data - -Modification history - 20201015 Started by Robert King - 20201029 Day/Night averaging added along with CMOR utils +Tested for the V3 of the data +Works for both day and night files """ import datetime import logging -from calendar import monthrange - import iris +import cf_units as unit +import numpy as np -from esmvaltool.cmorizers.data import utilities as utils +from ...utilities import fix_coords logger = logging.getLogger(__name__) def cmorization(in_dir, out_dir, cfg, cfg_user, start_date, end_date): """Cmorization func call.""" - cmor_table = cfg['cmor_table'] glob_attrs = cfg['attributes'] - # run the cmorization + # variable_list contains the variable list + # variable_keys has the short 'code' as a key for the variables. + # both these lists are in made in the same order # vals has the info from the yml file # var is set up in the yml file for var, vals in cfg['variables'].items(): - # leave this loop in as might be useful in - # the future for getting other info - # like uncertainty information from the original files - glob_attrs['mip'] = vals['mip'] - cmor_info = cmor_table.get_variable(vals['mip'], var) - var_name = cmor_info.short_name - - for key in vals.keys(): - logger.info("%s %s", key, vals[key]) - - variable = vals['raw'] - # not currently used, but referenced for future - # platform = 'MODISA' # loop over years and months # get years from start_year and end_year - # note 2003 doesn't start until July so not included at this stage - for year in range(glob_attrs['start_year'], - glob_attrs['end_year'] + 1): - this_years_cubes = iris.cube.CubeList() - for month0 in range(12): # Change this in final version - month = month0 + 1 + for year in range(vals['start_year'], vals['end_year'] + 1): + for month in range(1, 13): + logger.info(year) logger.info(month) - day_cube, night_cube = load_cubes(in_dir, vals['file_day'], - vals['file_night'], year, - month, variable) - - monthly_cube = make_monthly_average(day_cube, night_cube, year, - month) - - # use CMORizer utils - monthly_cube = utils.fix_coords(monthly_cube) - - this_years_cubes.append(monthly_cube) - - # Use utils save - # This seems to save files all with the same name! - # Fixed by making yearly files - this_years_cubes = this_years_cubes.merge_cube() - this_years_cubes.long_name = 'Surface Temperature' - this_years_cubes.standard_name = 'surface_temperature' - - # Fix variable metadata - utils.fix_var_metadata(this_years_cubes, cmor_info) - - # Fix global metadata - utils.set_global_atts(this_years_cubes, glob_attrs) - - utils.save_variable( - this_years_cubes, - var_name, - out_dir, - glob_attrs, - unlimited_dimensions=['time'], - ) - - -def load_cubes(in_dir, file_day, file_night, year, month, variable): - """Variable description. - - variable = land surface temperature - platform = AQUA not used for now - but in place for future expansion to all ESC CCI LST platforms - """ - logger.info('Loading %s/%s%s%s*.nc', in_dir, file_day, year, month) - day_cube = iris.load_cube( - '%s/%s%s%02d*.nc' % (in_dir, file_day, year, month), variable) - logger.info('Loading %s/%s%s%s*.nc', in_dir, file_night, year, month) - night_cube = iris.load_cube( - '%s/%s%s%02d*.nc' % (in_dir, file_night, year, month), variable) - - return day_cube, night_cube - - -def make_monthly_average(day_cube, night_cube, year, month): - """Make the average LST form the day time and night time files.""" - day_cube.attributes.clear() - night_cube.attributes.clear() - - co_time = night_cube.coord('time') - co_time.points = co_time.points + 100.0 - # maybe the arbitrary difference should go on day cubes to - # take the timestamp to 12Z? - # not really an issue when using monthly files - - result = iris.cube.CubeList([day_cube, night_cube]).concatenate_cube() - - # This corrects the lonitude coord name issue - # This should be fixed in the next version of the CCI data - logger.info("Longitude coordinate correction being applied") - result.coords()[2].var_name = 'longitude' - result.coords()[2].standard_name = 'longitude' - result.coords()[2].long_name = 'longitude' - - monthly_cube = result.collapsed('time', iris.analysis.MEAN) - - # fix time coordinate bounds - monthly_co_time = monthly_cube.coord('time') - - time_point = (datetime.datetime(year, month, 1, 0, 0) - - datetime.datetime(1981, 1, 1, 0, 0, 0)).total_seconds() - monthly_co_time.points = time_point - - num_days = monthrange(year, month)[1] - monthly_co_time.bounds = [ - time_point, time_point + ((num_days - 1) * 24 * 3600) - ] - # should this be num_days or num_days-1 ### question for Valeriu or Axel - # or 23:59:59 ??? - - monthly_cube.attributes = { - 'information': 'Mean of Day and Night Aqua MODIS monthly LST' - } - - return monthly_cube + try: + cubes = load_cubes(in_dir, + vals['file'], + year, + month, + vals['raw'], + ) + except: + logger.info(f'Problem: Month %s in %s' % (month, year)) + continue + + # make time coords + time_units = 'hours since 1970-01-01 00:00:00' + time_point = unit.date2num(datetime.datetime(year, month, 1), + time_units, + unit.CALENDAR_STANDARD + ) + + time_coord = iris.coords.DimCoord(time_point, + standard_name='time', + long_name='time', + var_name='time', + units=time_units, + bounds=None, + attributes=None, + coord_system=None, + circular=False + ) + + cubes.attributes = {} + cubes.attributes['var'] = var + + try: + cubes.remove_coord('time') + except: + logger.info('Coord fix issue %s' % cubes.long_name) + + cubes.add_dim_coord(time_coord, 0) + + if cubes.long_name == 'land surface temperature': + cubes.long_name = 'surface_temperature' + cubes.standard_name = 'surface_temperature' + + try: + cubes = fix_coords(cubes) + except: + logger.info('skip fixing') + logger.info(cubes.long_name) + + # this is needed for V1 data, V3 data is ok + try: + cubes.coords()[2].standard_name = 'longitude' + except: + # No change needed + pass + + var_name = cubes.attributes['var'] + + if cubes.var_name == 'lst': + cubes.var_name = 'ts' + + if 'Day' in var_name: + cubes.long_name += ' Day' + cubes.var_name += '_day' + + if 'Night' in var_name: + cubes.long_name += ' Night' + cubes.var_name += '_night' + + # Land cover class gives this error when + # loading in CMORised files + # OverflowError: + # Python int too large to convert to C long error + # This fixes it: + if 'land cover' in cubes.long_name: + cubes.data.fill_value = 0 + + # Get rid of anything outide 0-255 + cubes.data[np.where(cubes.data < 0)] = 0 + cubes.data[np.where(cubes.data > 255)] = 0 + + cubes.data = cubes.data.filled() + + # This is the line the ultimately solves things. + # Will leave the other checks above in because they + cubes.data = cubes.data * 1.0 + + save_name = f'{out_dir}/OBS_ESACCI-LST_sat_3.00_Amon_' + \ + f'{var_name}_{year}{month:02d}.nc' + iris.save(cubes, + save_name + ) + + +def load_cubes(in_dir, file, year, month, variable_list): + """Load files into cubes based on variables wanted in variable_list.""" + logger.info(f'Loading {in_dir}/{file}{year}{month:02d}.nc') + cube = iris.load_cube(f'{in_dir}/{file}{year}{month:02d}*.nc', + variable_list + ) + + return cube diff --git a/esmvaltool/recipes/examples/recipe_check_obs.yml b/esmvaltool/recipes/examples/recipe_check_obs.yml index b3cca9e028..46c280287b 100644 --- a/esmvaltool/recipes/examples/recipe_check_obs.yml +++ b/esmvaltool/recipes/examples/recipe_check_obs.yml @@ -240,13 +240,12 @@ diagnostics: scripts: null ESACCI-LST: - # TODO change years to full data coverage description: ESACCI-LST check variables: ts: additional_datasets: - {dataset: ESACCI-LST, project: OBS, mip: Amon, tier: 2, - type: sat, version: "1.00", + type: sat, version: "3.00", start_year: 2003, end_year: 2018} scripts: null diff --git a/esmvaltool/recipes/recipe_esacci_lst.yml b/esmvaltool/recipes/recipe_esacci_lst.yml index 5f4aa5ca9f..e972353247 100644 --- a/esmvaltool/recipes/recipe_esacci_lst.yml +++ b/esmvaltool/recipes/recipe_esacci_lst.yml @@ -1,4 +1,4 @@ -# Recipe to call ESA CCI LST diagnostic. +# Recipe to call ESA CCI LST V3 testing diagnostic. --- documentation: title: ESA CCI LST diagnostic @@ -16,26 +16,25 @@ documentation: projects: - cmug -datasets: - - {dataset: CESM2, project: CMIP6, exp: historical, ensemble: r(2:3)i1p1f1, - start_year: 2004, end_year: 2005, grid: gn} - - {dataset: UKESM1-0-LL, project: CMIP6, exp: historical, - ensemble: r(1:2)i1p1f2, start_year: 2004, end_year: 2005, grid: gn} - - {dataset: ESACCI-LST, project: OBS, type: sat, tier: 2, - start_year: 2004, end_year: 2005, version: '1.00'} - preprocessors: - lst_preprocessor: + obs_preprocessor: + extract_region: + start_longitude: 35 + end_longitude: 45 + start_latitude: 55 + end_latitude: 60 + + cmip_preprocessor: regrid: target_grid: UKESM1-0-LL scheme: linear extract_region: start_longitude: 35 - end_longitude: 175 + end_longitude: 45 start_latitude: 55 - end_latitude: 70 + end_latitude: 60 mask_landsea: mask_out: sea @@ -43,10 +42,10 @@ preprocessors: area_statistics: operator: mean - multi_model_statistics: - span: overlap - statistics: [mean, std_dev] - exclude: [ESACCI-LST] + # ensemble_statistics: + # span: overlap + # statistics: [mean, std_dev] + # exclude: [ESACCI-LST] diagnostics: @@ -60,8 +59,72 @@ diagnostics: variables: ts: mip: Amon - preprocessor: lst_preprocessor + preprocessor: cmip_preprocessor + additional_datasets: + - {dataset: UKESM1-0-LL, project: CMIP6, exp: historical, ensemble: r1i1p1f2, start_year: 2006, end_year: 2007, grid: gn} + + tsDay: + mip: Amon + preprocessor: obs_preprocessor + additional_datasets: + - {dataset: ESACCI-LST, project: OBS, type: sat, tier: 2, start_year: 2006, end_year: 2007, version: '3.00'} + + + tsNight: + mip: Amon + preprocessor: obs_preprocessor + additional_datasets: + - {dataset: ESACCI-LST, project: OBS, type: sat, tier: 2, start_year: 2006, end_year: 2007, version: '3.00'} + + tsLocalSfcErrDay: + mip: Amon + preprocessor: obs_preprocessor + additional_datasets: + - {dataset: ESACCI-LST, project: OBS, type: sat, tier: 2, start_year: 2006, end_year: 2007, version: '3.00'} + + tsLocalSfcErrNight: + mip: Amon + preprocessor: obs_preprocessor + additional_datasets: + - {dataset: ESACCI-LST, project: OBS, type: sat, tier: 2, start_year: 2006, end_year: 2007, version: '3.00'} + + tsLocalAtmErrDay: + mip: Amon + preprocessor: obs_preprocessor + additional_datasets: + - {dataset: ESACCI-LST, project: OBS, type: sat, tier: 2, start_year: 2006, end_year: 2007, version: '3.00'} + + tsLocalAtmErrNight: + mip: Amon + preprocessor: obs_preprocessor + additional_datasets: + - {dataset: ESACCI-LST, project: OBS, type: sat, tier: 2, start_year: 2006, end_year: 2007, version: '3.00'} + + tsLSSysErrDay: + mip: Amon + # preprocessor: obs_preprocessor # Single value in files, no area cut out needed + additional_datasets: + - {dataset: ESACCI-LST, project: OBS, type: sat, tier: 2, start_year: 2006, end_year: 2007, version: '3.00'} + + tsLSSysErrNight: + mip: Amon + # preprocessor: obs_preprocessor # Single value in files, no area cut out needed + additional_datasets: + - {dataset: ESACCI-LST, project: OBS, type: sat, tier: 2, start_year: 2006, end_year: 2007, version: '3.00'} + + tsUnCorErrDay: + mip: Amon + preprocessor: obs_preprocessor + additional_datasets: + - {dataset: ESACCI-LST, project: OBS, type: sat, tier: 2, start_year: 2006, end_year: 2007, version: '3.00'} + + tsUnCorErrNight: + mip: Amon + preprocessor: obs_preprocessor + additional_datasets: + - {dataset: ESACCI-LST, project: OBS, type: sat, tier: 2, start_year: 2006, end_year: 2007, version: '3.00'} scripts: script1: - script: lst/lst.py + script: lst/lst_testing.py + diff --git a/esmvaltool/references/esacci_lst.bibtex b/esmvaltool/references/esacci_lst.bibtex index f81ab82f46..1af52baf66 100644 --- a/esmvaltool/references/esacci_lst.bibtex +++ b/esmvaltool/references/esacci_lst.bibtex @@ -1,12 +1,12 @@ @misc{esacci-lst, url = {https://climate.esa.int/en/projects/land-surface-temperature/}, title = {{ESA CCI} {L}and {S}urface {T}emperature}, - year = {2020}, + year = {2022}, note = {The {ESA} {LST}\_cci ({E}uropean {S}pace {A}gency {L}and {S}urface {T}emperature {C}limate {C}hange {I}nitiative) project, is led by the {U}niversity of {L}eicester in the {UK}. The {LST}\_cci project aims to deliver a significant improvement on the capability of current satellite {LST} data records to meet the {G}lobal {C}limate {O}bserving {S}ystem requirements for climate applications and realise the full potential of long-term {LST} data for climate science. - The {LST}\_cci products used here is the {AQUA\_MODIS\_L3C} v1.00 0.05 degree global lon-lat grid monthly product.} + The {LST}\_cci product used here is the {AQUA\_MODIS\_L3C} v3.00 0.01 degree global lon-lat grid monthly product.} }