Source code for pycif.plugins.chemistries.TM5.read_chemistry
import pandas as pd
from logging import info
[docs]
def read_chemicalscheme(chemistry, **kwargs):
"""Read the TM5 chemical scheme from pre-computed files.
Parses scheme files in
``{workdir}/chemical_scheme/{schemeid}/`` and populates the chemistry
plugin with species lists and counts (same structure as the CHIMERE
reader):
* ``acspecies`` / ``nacspecies`` — active species.
* ``emis_species`` / ``nemisspec`` — anthropogenic emission species.
* ``bio_species`` / ``nemisspec_interp`` — biogenic emission species.
* ``dep_species`` / ``ndepspecies`` — depositing species.
* ``nreacs`` / ``nfamilies`` — reaction and family counts.
Args:
chemistry: TM5 chemistry plugin instance with ``workdir`` and
``schemeid`` set.
**kwargs: unused.
"""
info("Reading Chemistry")
workdir = chemistry.workdir
dirchem_ref = f"{workdir}/chemical_scheme/{chemistry.schemeid}/"
# ACTIVE SPECIES
file_chem = f"{dirchem_ref}/ACTIVE_SPECIES.{chemistry.schemeid}"
acspecies = pd.read_csv(
file_chem, header=None, sep=" ", usecols=[0, 1], names=["ID", "name"]
)
chemistry.acspecies = chemistry.from_dict(
{s: None for s in acspecies["name"]}
)
chemistry.nacspecies = len(acspecies)
# ANTHROPIC
file_chem = f"{dirchem_ref}/ANTHROPIC.{chemistry.schemeid}"
emis_species = pd.read_csv(
file_chem, header=None, sep=" ", usecols=[0, 1], names=["ID", "name"]
)
chemistry.emis_species = chemistry.from_dict(
{s: None for s in emis_species["name"]}
)
chemistry.nemisspec = len(emis_species)
# BIOGENIC
file_chem = f"{dirchem_ref}/BIOGENIC.{chemistry.schemeid}"
bio_species = pd.read_csv(
file_chem, header=None, sep=" ", usecols=[0, 1], names=["ID", "name"]
)
chemistry.bio_species = chemistry.from_dict(
{s: None for s in bio_species["name"]}
)
chemistry.nemisspec_interp = len(bio_species)
# DEPO_SPEC
file_chem = f"{dirchem_ref}/DEPO_SPEC.{chemistry.schemeid}"
dep_species = pd.read_csv(
file_chem, header=None, sep=" ", usecols=[0], names=["name"]
)
chemistry.dep_species = chemistry.from_dict(
{s: None for s in dep_species["name"]}
)
chemistry.ndepspecies = len(dep_species)
# CHEMISTRY
with open(dirchem_ref + "CHEMISTRY." + chemistry.schemeid, "r") as fsp:
ln = fsp.readlines()
chemistry.nreacs = len(ln)
with open(dirchem_ref + "FAMILIES." + chemistry.schemeid, "r") as fsp:
ln = fsp.readlines()
chemistry.nfamilies = len(ln)
# TODO: generalize number of prescribed species
chemistry.nprspecies = 4