Source code for pycif.plugins.datastreams.fluxes.CMEMS.read

import numpy as np
import xarray as xr
from logging import debug
import xarray as xr
from netCDF4 import Dataset
import pandas as pd

from .....utils.hdf5 import _hdf5_lock


[docs] def read( self, name, varnames, dates, files, interpol_flx=False, tracer=None, model=None, ddi=None, **kwargs ): """Get fluxes from raw files and load them into a pyCIF variables. Args: name (str): name of the component varnames (list[str]): original names of variables to read; use `name` if `varnames` is empty dates (list): list of the date intervals to extract files (list): list of the files matching dates Return: xr.DataArray: the actual data with dimension: time, levels, latitudes, longitudes """ var2extract = varnames if varnames != "" else name # Loop over dates/files and import data data = [] out_dates = [] for dd, ff in zip(dates, files): debug( f"Reading the file {ff} for the date interval {dd}" ) # Read the file to fetch dates with _hdf5_lock: times = xr.open_dataset(ff)["time"].to_pandas().index times -= pd.to_timedelta(times.day - 1, unit="D") ind_time = np.where(times == np.datetime64(dd[0]))[0][0] ds = xr.open_dataset(ff)[var2extract][ind_time].values data.append(ds) out_dates.append(dd[0]) # if only one level for emissions, create the axis dataout = np.array(data)[:, np.newaxis] dataout[np.isnan(dataout)] = 0 xmod = xr.DataArray( dataout, coords={"time": out_dates}, dims=("time", "lev", "lat", "lon"), ) return xmod