Source code for pycif.plugins.datastreams.backgrounds.carboscope_bg.read

import xarray as xr
import numpy as np
from netCDF4 import Dataset
import datetime
import os
import pandas as pd
from logging import debug
from .....utils.datastores.empty import init_empty


[docs] def read( self, name, varnames, dates, files, interpol_flx=False, tracer=None, model=None, **kwargs ): """Get fluxes from pre-computed fluxes and load them into a pyCIF variables Args: self: the fluxes Plugin name: the name of the component tracdir, tracfile: flux directory and file format dates: list of dates to extract interpol_flx (bool): if True, interpolates fluxes at time t from values of surrounding available files """ trcr_bc = [] out_dates = [] ref_file = "" ds_all = [init_empty()] for ff in files: debug(f"Reading file {ff} for Carboscope background") data = pd.read_csv( ff, header=None, sep=r"\s+", usecols=[1, 2, 3, 4, 5, 6, 12] ) data["date"] = pd.to_datetime( data[[1, 2, 3, 4]].astype(str).agg('/'.join, axis=1), format="%Y/%m/%d/%H") mask = ((min(np.array(dates)[:, 0]) <= data["date"]) & (data["date"] <= max(np.array(dates)[:, 0]))) data = data.loc[mask] # Deal with station name if needed station = os.path.basename(ff)[2:5] if hasattr(self, "station_name_dict"): station = self.dict_station_name.get( station.upper(), station).upper() ds = init_empty() ds[("metadata", "date")] = data["date"] ds[("metadata", "station")] = station ds[("metadata", "network")] = "Carboscope" ds[("metadata", "parameter")] = name ds[("metadata", "duration")] = 1 ds[("maindata", "obserror")] = 0 ds[("maindata", "spec")] = \ data[12] * getattr(tracer, "numscale", 1) ds_all.append(ds) ds_all = pd.concat(ds_all, axis=0) return ds_all