"""
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)