Source code for pycif.plugins.models.TM5.io.outputs2native

import datetime
import glob
import os

import numpy as np
import pandas as pd
import xarray as xr

from netCDF4 import Dataset

from logging import info
from .....utils.datastores.empty import init_empty
from .....utils.hdf5 import _hdf5_lock


[docs] def outputs2native( self, data2dump, input_type, di, df, runsubdir, mode="fwd", dump=True, onlyinit=False, check_transforms=False, **kwargs ): """Read concentrations as simulated by TM5 at observation points""" ddi = min(di, df) # if not hasattr(self, "dataobs"): # self.dataobs = {spec: init_empty() # for spec in self.chemistry.acspecies.attributes} # If no data to extract, pass if data2dump == {}: return data2dump # If species to extract are empty, pass extract = len([trid for trid in data2dump if len(self.dataobs.get(trid[1], {})) > 0]) > 0 if not extract or onlyinit: return data2dump # Here simulations should be read # Filling random values so far file_output = f"{runsubdir}/output/point_output.nc4" with _hdf5_lock: with Dataset(file_output) as f: mixing_ratio = f.groups['glb600x400'].variables["mixing_ratio"][:] # Adds mixing ratios from observations with dtstep > 1 # (the division for the average is done later in the CIF) dataloc = self.dataobs["CH4"] inds = [0] + list(np.cumsum(dataloc["metadata"].loc[:, "dtstep"][:-1])) avg_inds = pd.Series(np.nan, index=np.arange(len(mixing_ratio))) avg_inds.loc[inds] = np.arange(len(dataloc)) avg_inds = avg_inds.ffill().astype(int).values output_sim = np.zeros(len(dataloc)) np.add.at(output_sim, avg_inds, mixing_ratio.flatten()) self.dataobs["CH4"].loc[:, ("maindata", "spec")] = output_sim data2dump[("concs", "CH4")] = self.dataobs["CH4"] return data2dump