Source code for openairclim.utils

"""
Utility functions used over the entire framework
"""

from pathlib import Path
import numpy as np
import cf_units


[docs] def find_basenames(path_lst): """Find basenames of a list of paths Args: path_arr (list): List of paths Returns: list: List of basenames """ basename_lst = [] for path in path_lst: basename = Path(path).stem basename_lst.append(basename) return basename_lst
[docs] def convert_to_regular(inv): """Convert flat / unstructured xarray into xarray with regular 3D grid lon/lat/plev Args: inv (xarray): flat / unstructured xarray Returns: xarray: regular xarray with dimension lon/lat/plev """ inv_reg = inv.set_coords(["lon", "lat", "plev"]) inv_reg = inv_reg.set_xindex(["lon", "lat", "plev"]) inv_reg = inv_reg.unstack("index") return inv_reg
[docs] def convert_nested_to_series(nested_dict): """Convert nested dictionary to dictionary of np.arrays / time series Args: nested_dict (dict): Dictionary of dictionaries, keys are species, years {spec: {year: np.array, ...}, ...} Returns: dict: Dictionary of np.arrays / time series, keys are species {spec: np.array, np.array, ...} """ plain_dict = {} for key, inner_dict in nested_dict.items(): plain_dict[key] = np.array(list(inner_dict.values())) return plain_dict
[docs] def tgco2_to_tgc(co2): """Converts mass of CO2 in Tg to mass of C in Tg Args: co2 (float): Mass of CO2 in Tg Returns: float: Mass of C in Tg """ tgc = co2 * 12.0 / 44.0 return tgc
[docs] def kgco2_to_tgc(co2): """Converts mass of CO2 in kg to mass of C in Tg Args: co2 (float): Mass of CO2 in kg Returns: float: Mass of C in Tg """ tgc = co2 * 12.0 / 44.0 * 1e-9 return tgc
[docs] def tg_to_kg(val): """Convert mass in Tg to mass in kg Args: val (float): Mass in Tg Returns: float: Mass in kg """ # return 1.0e9 * val kilogram = cf_units.Unit("kg") teragram = cf_units.Unit("Tg") return teragram.convert(val, kilogram)
[docs] def kg_to_tg(val): """Convert mass in kg to mass in Tg Args: val (float): Mass in kg Returns: float: Mass in Tg """ # return 1.0e-9 * val kilogram = cf_units.Unit("kg") teragram = cf_units.Unit("Tg") return kilogram.convert(val, teragram)