Newer
Older
startdate_path = self.get_startdate_path(startdate)
if not os.path.isdir(startdate_path):
startdate_path = startdate_path.replace('/original_files/', '/')
if not os.path.isdir(startdate_path):
return False
count = 0
member_path = os.path.join(startdate_path, self.get_member_str(member))
if not os.path.isdir(member_path):
return False
freq = Frequencies.monthly
table = domain.get_table(freq, self.config.data_convention)
table_dir = os.path.join(member_path, table.name)
if not os.path.isdir(table_dir):
return False
count = self._check_var_presence(
table_dir, count, startdate, member, domain, chunk, freq
)
if count >= self.config.cmor.min_cmorized_vars:
return True
return False
class CMIP6Convention(Cmor3Convention):
class PrimaveraConvention(Cmor3Convention):
class MeteoFranceConvention(DataConvention):
def get_file_name(
self,
startdate,
member,
domain,
var,
cmor_var,
frequency,
chunk,
year,
date_str,
grid,
):
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
"""
Get filename for a given configuration
Parameters
----------
startdate: str
member: int
domain: ModelingRealm
var: str
cmor_var: Variable
frequency: Frequency
chunk: int or None
year: int or None
date_str: str or None
grid: str or None
Returns
-------
str
"""
raise ValueError("Year not supported with MeteoFrance convention")
raise ValueError(
"Date_str not supported with MeteoFrance convention"
)
raise ValueError(
"Chunk must be provided in MeteoFrance convention"
)
time_bound = self._get_chunk_time_bounds(startdate, chunk, frequency)
file_name = "{0}_{1}_{2}_{3}.nc".format(
var, frequency, time_bound, self.get_member_str(member)
)
def get_cmor_folder_path(
self, startdate, member, domain, var, frequency, grid, cmor_var
):
folder_path = os.path.join(
self.config.data_dir,
self.experiment_name(startdate),
"H{0}".format(chr(64 + int(startdate[4:6]))),
startdate[0:4],
)
return folder_path
def get_member_str(self, member):
"""
Transalate member number to member string
Parameters
----------
member: int
Returns
-------
str
"""
def _get_chunk_time_bounds(self, startdate, chunk, frequency):
chunk_start = chunk_start_date(
start,
chunk,
self.config.experiment.chunk_size,
"month",
self.config.experiment.calendar,
)
time_bound = "{0:04}{1:02}".format(chunk_start.year, chunk_start.month)
return time_bound
def create_link(
self, domain, filepath, frequency, var, grid, move_old, vartype
):
"""
Create file link
In this convention, it does nothing
Parameters
----------
domain: ModelingRealm
filepath: str
frequency: Frequency
var: str
grid: str
move_old: bool
vartype: VariableType
"""
pass
def create_links(self, startdate, member=None):
"""
Create links for a given startdate or member
In this convention, it does nothing
Parameters
----------
startdate: str
member: int or None
"""
pass
def is_cmorized(self, startdate, member, chunk, domain):
"""
Check if a given chunk is cmorized for a given domain
Parameters
----------
startdate: str
member: str
chunk: int
domain: ModelingRealm
Returns
-------
bool
Raises
------
NotImplementedError:
If not implemented by the derived classes
"""