123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- """Locates input files and calculates namelist attributes
- Typically a user will have files distributed throughout the hard drive
- and it makes little or no sense to try to capture all use cases.
- >>> date = "20130101"
- >>> namobs = observations(date, types=["profbfiles"])
- >>> namooo, namcl4 = forecasts(date, types=["forecast", "persistence"], lead_times=[12, 36, 60])
- """
- def observations(date, types=None):
- """Responsible for locating observation files
- Valid **namobs** observation types.
- * profbfiles
- * sstfbfiles
- * slafbfiles
- :param date: The verification date in string format ``'%Y%m%d'``
- :param types: A list of namobs observation types
- :returns: namobs namelist dictionary
- """
- namobs = {"ln_t3d": False,
- "ln_s3d": False,
- "ln_ena": False,
- "ln_profb": False,
- "ln_sst": False,
- "ln_sstfb": False,
- "ln_reysst": False,
- "ln_ghrsst": False,
- "ln_sla": False,
- "ln_slafb": False,
- "ln_sladt": False}
- if types is None: types = []
- for obtype in types:
- if obtype == "profbfiles":
- namobs[obtype] = profbfiles(date)
- namobs["ln_t3d"] = True
- namobs["ln_s3d"] = True
- namobs["ln_profb"] = True
- elif obtype == "sstfbfiles":
- namobs[obtype] = sstfbfiles(date)
- namobs["ln_sst"] = True
- namobs["ln_sstfb"] = True
- elif obtype == "slafbfiles":
- namobs[obtype] = slafbfiles(date)
- namobs["ln_sla"] = True
- namobs["ln_slafb"] = True
- return namobs
- def profbfiles(date):
- """Observation file locator stub
- .. note:: User-specified stub
- :param date: The verification date in string format ``'%Y%m%d'``
- :returns: List of files
- """
- files = ['profb.nc']
- return files
- def sstfbfiles(date):
- """Observation file locator stub
- .. note:: User-specified stub
- :param date: The verification date in string format ``'%Y%m%d'``
- :returns: List of files
- """
- files = ['sstfb.nc']
- return files
- def slafbfiles(date):
- """Observation file locator stub
- .. note:: User-specified stub
- :param date: The verification date in string format ``'%Y%m%d'``
- :returns: List of files
- """
- files = ['slafb.nc']
- return files
- def forecasts(date, types=None, lead_times=None):
- """Responsible for locating forecast fields
- :param date: The verification date in string format ``'%Y%m%d'``
- :param types: A list of forecast system types
- :param lead_times: A list of lead_times to search for
- :returns: tuple of namelist data, (namooo, namcl4)
- """
- namooo = {}
- namcl4 = {}
- if types is None: types = []
- if lead_times is None: lead_times = []
- # Initialise data
- ooo_files = []
- nn_ooo_idx = []
- cl4_vars = []
- cl4_fcst_idx = []
- # Search for files
- for type in types:
- files = []
- in_indices = []
- out_indices = []
- for ilt, lead_time in enumerate(lead_times):
- file, index = field(date, type=type, lead_time=lead_time)
- files.append(file)
- in_indices.append(index)
- out_indices.append(ilt + 1)
- # Expand return lists
- ooo_files += files
- nn_ooo_idx += in_indices
- cl4_fcst_idx += out_indices
- cl4_vars += len(files) * [type]
- # Namoo
- namooo["ooo_files"] = ooo_files
- namooo["nn_ooo_idx"] = nn_ooo_idx
- # Namcl4
- namcl4["cl4_vars"] = cl4_vars
- namcl4["cl4_fcst_idx"] = cl4_fcst_idx
- return namooo, namcl4
- def field(date, type=None, lead_time=None):
- """Forecast field locator
- Maps verification date and lead time off set to file name and
- index along file *time_counter*
- .. note:: User-specified stub
- :param date: The verification date in string format ``'%Y%m%d'``
- :param type: Forecast type
- :param lead_time: Forecast off set
- :returns: (**path**, **index**)
- """
- # Worker function
- file = 'nofile'
- index = -1
- return file, index
|