Coverage for mlair/reference_models/reference_model_cams.py: 0%
40 statements
« prev ^ index » next coverage.py v6.4.2, created at 2022-12-02 15:24 +0000
« prev ^ index » next coverage.py v6.4.2, created at 2022-12-02 15:24 +0000
1__author__ = "Lukas Leufen"
2__date__ = "2022-06-27"
5from mlair.configuration.path_config import check_path_and_create
6from mlair.reference_models.abstract_reference_model import AbstractReferenceModel
7import os
8import xarray as xr
9import pandas as pd
12class CAMSforecast(AbstractReferenceModel):
14 def __init__(self, ref_name: str, ref_store_path: str = None, data_path: str = None):
16 super().__init__()
17 self.ref_name = ref_name
18 if ref_store_path is None:
19 ref_store_path = f"{self.ref_name}/"
20 self.ref_store_path = ref_store_path
21 if data_path is None:
22 self.data_path = os.path.abspath(".")
23 else:
24 self.data_path = os.path.abspath(data_path)
25 self.file_pattern = "forecasts_%s_test.nc"
26 self.time_dim = "index"
27 self.ahead_dim = "ahead"
28 self.type_dim = "type"
30 def make_reference_available_locally(self, stations):
31 "dma8eu_ENS_FORECAST_2019-04-09.nc"
32 missing_stations = self.list_locally_available_references(self.ref_store_path, stations)
33 if len(missing_stations) > 0:
34 check_path_and_create(self.ref_store_path)
35 dataset = xr.open_mfdataset(os.path.join(self.data_path, "dma8eu_ENS_FORECAST_*.nc"))
36 darray = dataset.to_array().sortby(["longitude", "latitude"])
37 for station, coords in missing_stations.items():
38 lon, lat = coords["lon"], coords["lat"]
39 station_data = darray.sel(longitude=lon, latitude=lat, method="nearest", drop=True).squeeze(drop=True)
40 station_data = station_data.expand_dims(dim={self.type_dim: [self.ref_name]}).compute()
41 station_data.coords[self.time_dim] = station_data.coords[self.time_dim] - pd.Timedelta(days=1)
42 station_data.coords[self.ahead_dim] = station_data.coords[self.ahead_dim] + 1
43 file_name = self.file_pattern % str(station)
44 station_data.to_netcdf(os.path.join(self.ref_store_path, file_name))
46 @staticmethod
47 def list_locally_available_references(reference_path, stations) -> dict:
48 try:
49 file_list = os.listdir(reference_path)
50 if len(file_list) > 0:
51 res = {k: v for k, v in stations.items() if all(k not in x for x in file_list)}
52 else:
53 res = stations
54 except FileNotFoundError:
55 res = stations
56 return res