From becee574e0ed6c8d7b9387b015d19bb89f7b5156 Mon Sep 17 00:00:00 2001 From: sloosvel Date: Wed, 15 Jan 2020 12:49:17 +0100 Subject: [PATCH 01/10] Add indices diagnostic --- earthdiagnostics/ocean/indices.py | 130 ++++++++++++++++++++++++++++++ earthdiagnostics/work_manager.py | 2 + 2 files changed, 132 insertions(+) create mode 100644 earthdiagnostics/ocean/indices.py diff --git a/earthdiagnostics/ocean/indices.py b/earthdiagnostics/ocean/indices.py new file mode 100644 index 00000000..420bdabe --- /dev/null +++ b/earthdiagnostics/ocean/indices.py @@ -0,0 +1,130 @@ +# coding=utf-8 +"""Compute the indices for oceanic basins""" +import numpy as np +import six +from bscearth.utils.log import Log + +import iris +from iris.coords import DimCoord, AuxCoord +from iris.cube import CubeList +import iris.analysis + + +import netCDF4 + +from earthdiagnostics.diagnostic import Diagnostic +from earthdiagnostics.modelingrealm import ModelingRealms +from earthdiagnostics.utils import Utils, TempFile + +class Indices(Diagnostic): + """ + Compute the MOC for oceanic basins + + :created: March 2012 + :last modified: June 2016 + + :param data_manager: data management object + :type data_manager: DataManager + :param startdate: startdate + :type startdate: str + :param member: member number + :type member: int + :param chunk: chunk's number + :type chunk: int + """ + + alias = 'indices' + "Diagnostic alias for the configuration file" + + def __init__(self, data_manager, startdate, member, chunk): + Diagnostic.__init__(self, data_manager) + self.startdate = startdate + self.member = member + self.chunk = chunk + + self.results = {} + self.generated = {} + + def __str__(self): + return 'Indices Startdate: {0.startdate} Member: {0.member} ' \ + 'Chunk: {0.chunk}'.format(self) + + def __hash__(self): + return hash(str(self)) + + def __eq__(self, other): + if self._different_type(other): + return False + return ( + self.startdate == other.startdate and + self.member == other.member and self.chunk == other.chunk + ) + + @classmethod + def generate_jobs(cls, diags, options): + """ + Create a job for each chunk to compute the diagnostic + + :param diags: Diagnostics manager class + :type diags: Diags + :param options: None + :type options: list[str] + :return: + """ + + job_list = list() + for startdate, member, chunk in diags.config.experiment.get_chunk_list(): + job_list.append(Indices(diags.data_manager, startdate, member, chunk)) + return job_list + + def request_data(self): + """Request data required by the diagnostic""" + self.variable_file = self.request_chunk(ModelingRealms.ocean, 'tosmean', + self.startdate, self.member, + self.chunk) + + def declare_data_generated(self): + """Declare data to be generated by the diagnostic""" + self._declare_var('amv') + self._declare_var('ipo') + #self._declare_var('iod') + + def _declare_var(self, var_name): + self.generated[var_name] = self.declare_chunk(ModelingRealms.ocean, + var_name, self.startdate, + self.member, self.chunk) + + def compute(self): + """Run the diagnostic""" + tosmean = iris.load_cube(self.variable_file.local_file) + regions = ['AMV_North_Atlantic', 'AMV_trend', 'Pacific_TPl1', + 'Pacific_TPl2', 'Pacific_TPl3'] # 'Indian_dipole_east, 'Indian_dipole_west] + data = {} + for region in regions: + data[region] = tosmean.extract(iris.Constraint(region=region)) + + self.compute_indices(data) + self.save + + + def compute_indices(self, data): + self.results['amv'] = data['AMV_North_Atlantic'].data - data['AMV_trend'].data + self.results['ipo'] = data['Pacific_TPl2'].data - 0.5*( + data['Pacific_TPl1'].data + data['Pacific_TPl3'].data + ) + # self.results['iod'] = data['Indian_dipole_west'].data - data[Indian_dipole_east].data + + + def save(self): + for var in self.results.keys(): + res = self.results[var] + temp = TempFile.get() + handler_source = Utils.open_cdf(self.variable_file.local_file) + handler_temp = Utils.open_cdf(temp, 'w') + + Utils.copy_variable(handler_source, handler_temp, 'time', True, True) + + var_res = handler_temp.createVariable('{0}'.format(var), float, ('time',)) + var_res[...] = res[...] + handler_temp.close() + self.generated[var].set_local_file(temp, diagnostic=self) diff --git a/earthdiagnostics/work_manager.py b/earthdiagnostics/work_manager.py index c46821fb..3666e2c7 100644 --- a/earthdiagnostics/work_manager.py +++ b/earthdiagnostics/work_manager.py @@ -388,6 +388,7 @@ class WorkManager(object): from .ocean.verticalmean import VerticalMean from .ocean.verticalmeanmeters import VerticalMeanMeters from .ocean.verticalgradient import VerticalGradient + from .ocean.indices import Indices from .ocean.interpolate import Interpolate from .ocean.interpolatecdo import InterpolateCDO from .ocean.moc import Moc @@ -411,6 +412,7 @@ class WorkManager(object): Diagnostic.register(Siasiesiv) Diagnostic.register(VerticalMean) Diagnostic.register(VerticalMeanMeters) + Diagnostic.register(Indices) Diagnostic.register(Interpolate) Diagnostic.register(InterpolateCDO) Diagnostic.register(Moc) -- GitLab From a6fc92b771c7d0fd8bc493c434fcb0046ebb4b7c Mon Sep 17 00:00:00 2001 From: sloosvel Date: Wed, 15 Jan 2020 16:23:37 +0100 Subject: [PATCH 02/10] Change region name to proper value --- earthdiagnostics/ocean/indices.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/earthdiagnostics/ocean/indices.py b/earthdiagnostics/ocean/indices.py index 420bdabe..9854c134 100644 --- a/earthdiagnostics/ocean/indices.py +++ b/earthdiagnostics/ocean/indices.py @@ -97,20 +97,20 @@ class Indices(Diagnostic): def compute(self): """Run the diagnostic""" tosmean = iris.load_cube(self.variable_file.local_file) - regions = ['AMV_North_Atlantic', 'AMV_trend', 'Pacific_TPl1', - 'Pacific_TPl2', 'Pacific_TPl3'] # 'Indian_dipole_east, 'Indian_dipole_west] + regions = ['AMV_North_Atlantic', 'AMV_trend', 'Pacific_TPI1', + 'Pacific_TPI2', 'Pacific_TPI3'] # 'Indian_dipole_east, 'Indian_dipole_west] data = {} for region in regions: data[region] = tosmean.extract(iris.Constraint(region=region)) self.compute_indices(data) - self.save + self.save() def compute_indices(self, data): self.results['amv'] = data['AMV_North_Atlantic'].data - data['AMV_trend'].data - self.results['ipo'] = data['Pacific_TPl2'].data - 0.5*( - data['Pacific_TPl1'].data + data['Pacific_TPl3'].data + self.results['ipo'] = data['Pacific_TPI2'].data - 0.5*( + data['Pacific_TPI1'].data + data['Pacific_TPI3'].data ) # self.results['iod'] = data['Indian_dipole_west'].data - data[Indian_dipole_east].data -- GitLab From 98815c217741bce5712d68d93abde98f67e10d71 Mon Sep 17 00:00:00 2001 From: sloosvel Date: Thu, 16 Jan 2020 09:43:01 +0100 Subject: [PATCH 03/10] Check presence of regions --- earthdiagnostics/ocean/indices.py | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/earthdiagnostics/ocean/indices.py b/earthdiagnostics/ocean/indices.py index 9854c134..2a2d3c5f 100644 --- a/earthdiagnostics/ocean/indices.py +++ b/earthdiagnostics/ocean/indices.py @@ -87,7 +87,7 @@ class Indices(Diagnostic): """Declare data to be generated by the diagnostic""" self._declare_var('amv') self._declare_var('ipo') - #self._declare_var('iod') + self._declare_var('iod') def _declare_var(self, var_name): self.generated[var_name] = self.declare_chunk(ModelingRealms.ocean, @@ -97,22 +97,31 @@ class Indices(Diagnostic): def compute(self): """Run the diagnostic""" tosmean = iris.load_cube(self.variable_file.local_file) + data_regions = tosmean.coord('region').points regions = ['AMV_North_Atlantic', 'AMV_trend', 'Pacific_TPI1', - 'Pacific_TPI2', 'Pacific_TPI3'] # 'Indian_dipole_east, 'Indian_dipole_west] - data = {} - for region in regions: - data[region] = tosmean.extract(iris.Constraint(region=region)) + 'Pacific_TPI2', 'Pacific_TPI3', 'Indian_dipole_east', + 'Indian_dipole_west'] - self.compute_indices(data) - self.save() + check_regions = set(regions).issubset(set(data_regions)) + if check_regions: + data = {} + for region in regions: + data[region] = tosmean.extract(iris.Constraint(region=region)) + self.compute_indices(data) + self.save() + else: + Log.info('The data does not contain the basins required to ' + 'compute the indices. Skipping computations.') def compute_indices(self, data): - self.results['amv'] = data['AMV_North_Atlantic'].data - data['AMV_trend'].data + self.results['amv'] = (data['AMV_North_Atlantic'].data - + data['AMV_trend'].data) self.results['ipo'] = data['Pacific_TPI2'].data - 0.5*( data['Pacific_TPI1'].data + data['Pacific_TPI3'].data ) - # self.results['iod'] = data['Indian_dipole_west'].data - data[Indian_dipole_east].data + self.results['iod'] = (data['Indian_dipole_west'].data - + data['Indian_dipole_east'].data) def save(self): -- GitLab From a33b66fab403f46c129ac833fdde598cc5fa58ed Mon Sep 17 00:00:00 2001 From: Javier Vegas-Regidor Date: Wed, 29 Jan 2020 11:44:39 +0100 Subject: [PATCH 04/10] Fix format errors --- earthdiagnostics/ocean/indices.py | 33 +++++++++++++------------------ 1 file changed, 14 insertions(+), 19 deletions(-) diff --git a/earthdiagnostics/ocean/indices.py b/earthdiagnostics/ocean/indices.py index 2a2d3c5f..05c48d06 100644 --- a/earthdiagnostics/ocean/indices.py +++ b/earthdiagnostics/ocean/indices.py @@ -1,21 +1,15 @@ # coding=utf-8 """Compute the indices for oceanic basins""" -import numpy as np -import six from bscearth.utils.log import Log import iris -from iris.coords import DimCoord, AuxCoord -from iris.cube import CubeList import iris.analysis - -import netCDF4 - from earthdiagnostics.diagnostic import Diagnostic from earthdiagnostics.modelingrealm import ModelingRealms from earthdiagnostics.utils import Utils, TempFile + class Indices(Diagnostic): """ Compute the MOC for oceanic basins @@ -73,15 +67,16 @@ class Indices(Diagnostic): """ job_list = list() - for startdate, member, chunk in diags.config.experiment.get_chunk_list(): - job_list.append(Indices(diags.data_manager, startdate, member, chunk)) + for sdate, mem, chunk in diags.config.experiment.get_chunk_list(): + job_list.append( + Indices(diags.data_manager, sdate, mem, chunk)) return job_list def request_data(self): """Request data required by the diagnostic""" - self.variable_file = self.request_chunk(ModelingRealms.ocean, 'tosmean', - self.startdate, self.member, - self.chunk) + self.variable_file = self.request_chunk( + ModelingRealms.ocean, 'tosmean', + self.startdate, self.member, self.chunk) def declare_data_generated(self): """Declare data to be generated by the diagnostic""" @@ -90,9 +85,9 @@ class Indices(Diagnostic): self._declare_var('iod') def _declare_var(self, var_name): - self.generated[var_name] = self.declare_chunk(ModelingRealms.ocean, - var_name, self.startdate, - self.member, self.chunk) + self.generated[var_name] = self.declare_chunk( + ModelingRealms.ocean, var_name, + self.startdate, self.member, self.chunk) def compute(self): """Run the diagnostic""" @@ -113,7 +108,6 @@ class Indices(Diagnostic): Log.info('The data does not contain the basins required to ' 'compute the indices. Skipping computations.') - def compute_indices(self, data): self.results['amv'] = (data['AMV_North_Atlantic'].data - data['AMV_trend'].data) @@ -123,7 +117,6 @@ class Indices(Diagnostic): self.results['iod'] = (data['Indian_dipole_west'].data - data['Indian_dipole_east'].data) - def save(self): for var in self.results.keys(): res = self.results[var] @@ -131,9 +124,11 @@ class Indices(Diagnostic): handler_source = Utils.open_cdf(self.variable_file.local_file) handler_temp = Utils.open_cdf(temp, 'w') - Utils.copy_variable(handler_source, handler_temp, 'time', True, True) + Utils.copy_variable( + handler_source, handler_temp, 'time', True, True) - var_res = handler_temp.createVariable('{0}'.format(var), float, ('time',)) + var_res = handler_temp.createVariable( + '{0}'.format(var), float, ('time',)) var_res[...] = res[...] handler_temp.close() self.generated[var].set_local_file(temp, diagnostic=self) -- GitLab From b54ace9acc4f67416a117159dd3596114d227233 Mon Sep 17 00:00:00 2001 From: sloosvel Date: Wed, 29 Jan 2020 15:51:24 +0100 Subject: [PATCH 05/10] Correct identation --- earthdiagnostics/ocean/indices.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/earthdiagnostics/ocean/indices.py b/earthdiagnostics/ocean/indices.py index 05c48d06..bbdf2556 100644 --- a/earthdiagnostics/ocean/indices.py +++ b/earthdiagnostics/ocean/indices.py @@ -102,8 +102,8 @@ class Indices(Diagnostic): data = {} for region in regions: data[region] = tosmean.extract(iris.Constraint(region=region)) - self.compute_indices(data) - self.save() + self.compute_indices(data) + self.save() else: Log.info('The data does not contain the basins required to ' 'compute the indices. Skipping computations.') -- GitLab From 9dd48597a0fa450b3fa546785bdcc79e79b928f7 Mon Sep 17 00:00:00 2001 From: sloosvel Date: Tue, 11 Feb 2020 10:33:41 +0100 Subject: [PATCH 06/10] Compute as far as possible --- earthdiagnostics/ocean/indices.py | 47 +++++++++++++++++++++++-------- src/mixdiags | 1 + 2 files changed, 37 insertions(+), 11 deletions(-) create mode 160000 src/mixdiags diff --git a/earthdiagnostics/ocean/indices.py b/earthdiagnostics/ocean/indices.py index bbdf2556..8c44450b 100644 --- a/earthdiagnostics/ocean/indices.py +++ b/earthdiagnostics/ocean/indices.py @@ -93,30 +93,55 @@ class Indices(Diagnostic): """Run the diagnostic""" tosmean = iris.load_cube(self.variable_file.local_file) data_regions = tosmean.coord('region').points - regions = ['AMV_North_Atlantic', 'AMV_trend', 'Pacific_TPI1', - 'Pacific_TPI2', 'Pacific_TPI3', 'Indian_dipole_east', - 'Indian_dipole_west'] + amv_regions = ['AMV_North_Atlantic', 'AMV_trend'] + ipo_regions = ['Pacific_TPI1', 'Pacific_TPI2', 'Pacific_TPI3'] + iod_regions = ['Indian_dipole_east', 'Indian_dipole_west'] - check_regions = set(regions).issubset(set(data_regions)) - if check_regions: + check_amv = set(amv_regions).issubset(set(data_regions)) + if check_amv: data = {} - for region in regions: + for region in amv_regions: data[region] = tosmean.extract(iris.Constraint(region=region)) - self.compute_indices(data) - self.save() + self.compute_amv(data) else: Log.info('The data does not contain the basins required to ' - 'compute the indices. Skipping computations.') + 'compute the AMV index. Skipping AMV computations.') - def compute_indices(self, data): + check_ipo = set(ipo_regions).issubset(set(data_regions)) + if check_ipo: + data = {} + for region in ipo_regions: + data[region] = tosmean.extract(iris.Constraint(region=region)) + self.compute_ipo(data) + else: + Log.info('The data does not contain the basins required to ' + 'compute the IPO index. Skipping IPO computations.') + + check_iod = set(iod_regions).issubset(set(data_regions)) + if check_iod: + data = {} + for region in iod_regions: + data[region] = tosmean.extract(iris.Constraint(region=region)) + self.compute_iod(data) + else: + Log.info('The data does not contain the basins required to ' + 'compute the IOD index. Skipping IOD computations.') + + self.save() + + def compute_amv(self, data): self.results['amv'] = (data['AMV_North_Atlantic'].data - data['AMV_trend'].data) + + def compute_ipo(self, data): self.results['ipo'] = data['Pacific_TPI2'].data - 0.5*( data['Pacific_TPI1'].data + data['Pacific_TPI3'].data ) + + def compute_iod(self, data): self.results['iod'] = (data['Indian_dipole_west'].data - data['Indian_dipole_east'].data) - + def save(self): for var in self.results.keys(): res = self.results[var] diff --git a/src/mixdiags b/src/mixdiags new file mode 160000 index 00000000..19997970 --- /dev/null +++ b/src/mixdiags @@ -0,0 +1 @@ +Subproject commit 199979700e38d3918a82bd2052855d46375e48ab -- GitLab From db90438e1eb2c6f6023aab1fe099671663353e4a Mon Sep 17 00:00:00 2001 From: sloosvel Date: Tue, 11 Feb 2020 13:20:25 +0100 Subject: [PATCH 07/10] Change log message --- earthdiagnostics/ocean/indices.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/earthdiagnostics/ocean/indices.py b/earthdiagnostics/ocean/indices.py index 8c44450b..22e8790b 100644 --- a/earthdiagnostics/ocean/indices.py +++ b/earthdiagnostics/ocean/indices.py @@ -104,7 +104,7 @@ class Indices(Diagnostic): data[region] = tosmean.extract(iris.Constraint(region=region)) self.compute_amv(data) else: - Log.info('The data does not contain the basins required to ' + Log.info('Input data does not contain the basins required to ' 'compute the AMV index. Skipping AMV computations.') check_ipo = set(ipo_regions).issubset(set(data_regions)) @@ -114,7 +114,7 @@ class Indices(Diagnostic): data[region] = tosmean.extract(iris.Constraint(region=region)) self.compute_ipo(data) else: - Log.info('The data does not contain the basins required to ' + Log.info('Input data does not contain the basins required to ' 'compute the IPO index. Skipping IPO computations.') check_iod = set(iod_regions).issubset(set(data_regions)) @@ -124,7 +124,7 @@ class Indices(Diagnostic): data[region] = tosmean.extract(iris.Constraint(region=region)) self.compute_iod(data) else: - Log.info('The data does not contain the basins required to ' + Log.info('Input data does not contain the basins required to ' 'compute the IOD index. Skipping IOD computations.') self.save() @@ -141,7 +141,7 @@ class Indices(Diagnostic): def compute_iod(self, data): self.results['iod'] = (data['Indian_dipole_west'].data - data['Indian_dipole_east'].data) - + def save(self): for var in self.results.keys(): res = self.results[var] -- GitLab From 07a4a59a34bee7f9de0cbab9bd65d791e50b828e Mon Sep 17 00:00:00 2001 From: sloosvel Date: Mon, 24 Feb 2020 16:49:54 +0100 Subject: [PATCH 08/10] Add index metadata --- earthdiagnostics/ocean/indices.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/earthdiagnostics/ocean/indices.py b/earthdiagnostics/ocean/indices.py index 22e8790b..42dd47cc 100644 --- a/earthdiagnostics/ocean/indices.py +++ b/earthdiagnostics/ocean/indices.py @@ -37,6 +37,7 @@ class Indices(Diagnostic): self.chunk = chunk self.results = {} + self.region_metadata = {} self.generated = {} def __str__(self): @@ -132,15 +133,27 @@ class Indices(Diagnostic): def compute_amv(self, data): self.results['amv'] = (data['AMV_North_Atlantic'].data - data['AMV_trend'].data) + self.region_metadata['amv'] = ( + 'AMV_North_Atlantic Box (lat: [0, 60], lon:[-80, 0]), ' + 'AMV_trend Box (lat: [-60, 60], lon: [-180, 180])') def compute_ipo(self, data): self.results['ipo'] = data['Pacific_TPI2'].data - 0.5*( data['Pacific_TPI1'].data + data['Pacific_TPI3'].data ) + self.region_metadata['ipo'] = ( + 'Pacific_TPI1 Box ( (lat: [25, 45], lon:[140, 180]), (lat: [25, 45], lon:[-180, -145]) ) ' + 'Pacific_TPI2 Box ( (lat: [-10, 10], lon:[170, 180]), (lat: [-10, 10], lon:[-180, -90]) ) ' + 'Pacific_TPI3 Box ( (lat: [-50, -15], lon:[150, 180]), (lat: [-50, -15], lon:[-180, -160]) )' + ) def compute_iod(self, data): self.results['iod'] = (data['Indian_dipole_west'].data - data['Indian_dipole_east'].data) + self.region_metadata['iod'] = ( + 'Indian_dipole_west Box (lat: [-10, 10], lon:[50,70]) ' + 'Indian_dipole_east Box (lat: [-10, 0], lon:[90, 110])' + ) def save(self): for var in self.results.keys(): @@ -155,5 +168,10 @@ class Indices(Diagnostic): var_res = handler_temp.createVariable( '{0}'.format(var), float, ('time',)) var_res[...] = res[...] + var_res.units = 'degC' + var_res.comment = '{var} index computed at {region}'.format( + var=var, + region = self.region_metadata[var] + ) handler_temp.close() self.generated[var].set_local_file(temp, diagnostic=self) -- GitLab From 67852e3557eb50b864becd119521bf932c26f8b3 Mon Sep 17 00:00:00 2001 From: sloosvel Date: Thu, 16 Apr 2020 11:09:13 +0200 Subject: [PATCH 09/10] Add basin file information to history --- earthdiagnostics/datafile.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/earthdiagnostics/datafile.py b/earthdiagnostics/datafile.py index d29956c4..030f2540 100644 --- a/earthdiagnostics/datafile.py +++ b/earthdiagnostics/datafile.py @@ -269,6 +269,7 @@ class DataFile(Publisher): self._rename_coordinate_variables() self._correct_metadata() self._prepare_region() + self.add_basin_history() self.add_diagnostic_history() Utils.convert2netcdf4(self.local_file) @@ -508,7 +509,7 @@ class DataFile(Publisher): if not self.diagnostic: return from earthdiagnostics.earthdiags import EarthDiags - + history_line = ( f"Diagnostic {self.diagnostic} calculated with EarthDiagnostics " f"version {EarthDiags.version}" @@ -523,6 +524,18 @@ class DataFile(Publisher): EarthDiags.version ) self._add_history_line(history_line) + + def add_basin_history(self): + """Add basin history line to local file""" + from earthdiagnostics.earthdiags import EarthDiags + basins = iris.load_cube('basins.nc') + history_line = ( + "Using Basins masks file " + f"version {basins.attributes['version']} with " + f"grid {basins.attributes['grid']}. " + "Original file can be found in /esarchive/autosubmit/conf_files." + ) + self._add_history_line(history_line) def _add_history_line(self, history_line): utc_datetime = "UTC " + datetime.utcnow().isoformat() -- GitLab From 2e108d2d20bc2dd0cdf32b89a2e0aa30f6fb0047 Mon Sep 17 00:00:00 2001 From: Javier Vegas-Regidor Date: Fri, 17 Apr 2020 13:27:26 +0200 Subject: [PATCH 10/10] Fix tests --- earthdiagnostics/datafile.py | 8 ++++---- earthdiagnostics/ocean/indices.py | 13 ++++++++----- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/earthdiagnostics/datafile.py b/earthdiagnostics/datafile.py index 030f2540..4cbc5808 100644 --- a/earthdiagnostics/datafile.py +++ b/earthdiagnostics/datafile.py @@ -509,7 +509,6 @@ class DataFile(Publisher): if not self.diagnostic: return from earthdiagnostics.earthdiags import EarthDiags - history_line = ( f"Diagnostic {self.diagnostic} calculated with EarthDiagnostics " f"version {EarthDiags.version}" @@ -524,10 +523,11 @@ class DataFile(Publisher): EarthDiags.version ) self._add_history_line(history_line) - + def add_basin_history(self): """Add basin history line to local file""" - from earthdiagnostics.earthdiags import EarthDiags + if not os.path.isfile('basins.nc'): + return basins = iris.load_cube('basins.nc') history_line = ( "Using Basins masks file " @@ -535,7 +535,7 @@ class DataFile(Publisher): f"grid {basins.attributes['grid']}. " "Original file can be found in /esarchive/autosubmit/conf_files." ) - self._add_history_line(history_line) + self._add_history_line(history_line) def _add_history_line(self, history_line): utc_datetime = "UTC " + datetime.utcnow().isoformat() diff --git a/earthdiagnostics/ocean/indices.py b/earthdiagnostics/ocean/indices.py index 42dd47cc..a091b040 100644 --- a/earthdiagnostics/ocean/indices.py +++ b/earthdiagnostics/ocean/indices.py @@ -122,7 +122,7 @@ class Indices(Diagnostic): if check_iod: data = {} for region in iod_regions: - data[region] = tosmean.extract(iris.Constraint(region=region)) + data[region] = tosmean.extract(iris.Constraint(region=region)) self.compute_iod(data) else: Log.info('Input data does not contain the basins required to ' @@ -142,9 +142,12 @@ class Indices(Diagnostic): data['Pacific_TPI1'].data + data['Pacific_TPI3'].data ) self.region_metadata['ipo'] = ( - 'Pacific_TPI1 Box ( (lat: [25, 45], lon:[140, 180]), (lat: [25, 45], lon:[-180, -145]) ) ' - 'Pacific_TPI2 Box ( (lat: [-10, 10], lon:[170, 180]), (lat: [-10, 10], lon:[-180, -90]) ) ' - 'Pacific_TPI3 Box ( (lat: [-50, -15], lon:[150, 180]), (lat: [-50, -15], lon:[-180, -160]) )' + 'Pacific_TPI1 Box ( (lat: [25, 45], lon:[140, 180]), ' + '(lat: [25, 45], lon:[-180, -145]) ) ' + 'Pacific_TPI2 Box ( (lat: [-10, 10], lon:[170, 180]), ' + '(lat: [-10, 10], lon:[-180, -90]) ) ' + 'Pacific_TPI3 Box ( (lat: [-50, -15], lon:[150, 180]), ' + '(lat: [-50, -15], lon:[-180, -160]) )' ) def compute_iod(self, data): @@ -171,7 +174,7 @@ class Indices(Diagnostic): var_res.units = 'degC' var_res.comment = '{var} index computed at {region}'.format( var=var, - region = self.region_metadata[var] + region=self.region_metadata[var] ) handler_temp.close() self.generated[var].set_local_file(temp, diagnostic=self) -- GitLab