From aef6282a0f87e91a3485e1185d103ff199653345 Mon Sep 17 00:00:00 2001 From: Felix Kleinert <f.kleinert@fz-juelich.de> Date: Fri, 5 Mar 2021 13:36:42 +0100 Subject: [PATCH] integrate WRF for datahandler --- mlair/data_handler/data_handler_wrf_chem.py | 34 ++++++++++++++++----- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/mlair/data_handler/data_handler_wrf_chem.py b/mlair/data_handler/data_handler_wrf_chem.py index ec405db9..5820fa95 100644 --- a/mlair/data_handler/data_handler_wrf_chem.py +++ b/mlair/data_handler/data_handler_wrf_chem.py @@ -12,10 +12,12 @@ import os from mlair.helpers.geofunctions import haversine_dist from mlair.helpers.helpers import convert2xrda, remove_items from mlair.helpers import TimeTrackingWrapper -from typing import Tuple, Union, List, Dict -from mlair.data_handler.abstract_data_handler import AbstractDataHandler + from mlair.data_handler.data_handler_single_station import DataHandlerSingleStation +from mlair.data_handler import DefaultDataHandler + +from typing import Tuple, Union, List, Dict import logging import cartopy.crs as ccrs @@ -170,8 +172,10 @@ class SingleGridColumnWrfChemDataLoader(BaseWrfChemDataLoader): self.external_coords_file = external_coords_file self.open_data() - self.assign_coords( - {self.physical_t_coord_name: (self.time_dim_name, self._data[self.physical_t_coord_name].values)}) + + if self.physical_t_coord_name != self.time_dim_name: + self.assign_coords( + {self.physical_t_coord_name: (self.time_dim_name, self._data[self.physical_t_coord_name].values)}) self._set_dims_as_coords() if external_coords_file is not None: @@ -194,7 +198,7 @@ class SingleGridColumnWrfChemDataLoader(BaseWrfChemDataLoader): raise SyntaxError(f"`coords' must have length=2 (lat, lon), but has length={len(coords)}") if isinstance(coords, tuple): self.__coords = dict(lat=coords[0], lon=coords[1]) - print(f"self.__coords={self.__coords}") + logging.debug(f"{self.__class__.__name__}.__coords is set to {self.__coords}") elif isinstance(coords, dict): if (coords.keys() == __set_coords.keys()): self.__coords = coords @@ -263,13 +267,19 @@ class DataHandlerSingleGridColumn2(DataHandlerSingleStation): lat, lon = self.str2coords(station) sgc_loader = SingleGridColumnWrfChemDataLoader((lat, lon), data_path=path, - rechunk_values={'Time': 1, 'bottom_top': 2}, external_coords_file=self.external_coords_file, + time_dim_name=self.time_dim ) + # select defined variables at grid box or grid coloumn based on nearest icoords data = sgc_loader.data.isel(sgc_loader.get_nearest_icoords()).squeeze()[self.variables] - data = data.expand_dims({self.iter_dim: station}).to_array() - data = data.transpose(self.iter_dim, self.time_dim, 'variable', sgc_loader.logical_z_coord_name) + # expand dimesion for iterdim + data = data.expand_dims({self.iter_dim: station}).to_array(self.target_dim) + # transpose dataarray: set first three fixed and keep remaining as is + data = data.transpose(self.iter_dim, self.time_dim, self.target_dim, ...) + data = self._slice_prep(data, start=start, end=end) + # data = self.check_for_negative_concentrations(data) + # ToDo # data should somehow look like this: # < xarray.DataArray(Stations: 1, datetime: 7670, variables: 9) (From DataHandlerSingleStation) @@ -311,6 +321,14 @@ class DataHandlerSingleGridColumn2(DataHandlerSingleStation): # raise NotImplementedError +class DataHandlerWRF(DefaultDataHandler): + """Data handler using CDC.""" + data_handler = DataHandlerSingleGridColumn2 + data_handler_transformation = DataHandlerSingleGridColumn2 + _requirements = data_handler.requirements() + + + if __name__ == '__main__': def plot_map_proj(data, xlim=None, ylim=None, filename=None, point=None): -- GitLab