Set up and run CatMAP descriptor-based microkinetic models. Use when the user wants to predict catalytic rates, surface coverages, or generate volcano plots from free energy inputs. Handles input generation from the local database, CatMAP execution, and output interpretation.
Run descriptor-based microkinetic models using CatMAP via AutoCatKinetics. Predict catalytic activity, surface coverages, selectivity, current density, and Faradaic efficiency.
For deltaG computation details, see the free_energy_with_corrections skill. For FED visualization, see the free_energy_diagrams skill.
Before running CatMAP, always check for missing species data using the missing_data_detector skill. CatMAP silently skips reactions with missing species ([RUN_MKM] Skipping step...), which produces incomplete results without warning the user.
config.yaml to get all species required by the mechanismco2r-suncat.db for formation energies on the target surface/facetfrequencies.csv (in AutoCatKinetics: cathub/data/frequencies.csv) for vibrational frequenciesThis prevents the common issue where CatMAP runs "successfully" but excludes HCOOH, CH3OH, or other pathways due to missing intermediates.
from cathub.commands.run_mkm import RunMKMCommand
mkm = RunMKMCommand(
metal='Cu',
facets=['111'],
db_path='data/co2r-suncat.db',
she_range=(-1.2, -0.5, 0.1), # (start, end, step) V vs SHE
if_efield=False,
output_dir='workspace/mkm_plots'
)
mkm.execute()
# Generates input.txt → runs CatMAP → saves plots + CSVs
Pipeline generates 21 files per facet:
RunMKMCommand.execute() runs this pipeline:
co2r-suncat.db — queries formation energies, adds frequencies, computes activation energies| File | Description |
|---|---|
combined_faradaic_efficiency.png | FE vs potential — which product dominates |
combined_current_density.png | Partial current density per product |
combined_production_rate_map.png | Log-scale production rates |
combined_coverage_map.png | Surface coverage vs potential |
combined_my_selectivity_map.png | Selectivity vs potential |
FED_{V}V.pdf | Free energy diagram at specific voltage |
| File | Key columns |
|---|---|
faradaic_efficiency_data.csv | Potential, FE per product |
current_density_data.csv | Potential, partial currents |
production_rate_map_data.csv | Potential, rates per product |
coverage_map_data.csv | Potential, coverage per species |
| Potential (V vs RHE) | Cu(111) C2H4 | Cu(111) H2 | Cu(211) C2H4 | Cu(211) H2 |
|---|---|---|---|---|
| -0.8 | 99.97% | 0.03% | ~100% | ~0% |
| -1.0 | 97.0% | 3.0% | ~100% | ~0% |
| -1.2 | 50.8% | 49.2% | ~100% | 0.002% |
| -1.4 | 1.0% | 99.0% | 99.6% | 0.4% |
Cu(211) step sites maintain C2H4 selectivity across all potentials. Cu(111) loses to HER below -1.2 V.
For individual reaction energies without running the full CatMAP model:
from cathub.utils.mkm_utils.MKMEnergyCalculator import MKMEnergyCalculator
calc = MKMEnergyCalculator(input_file='input.txt', temperature=298.15, voltage=-0.8)
r = calc.calculate_reaction_energy(
reactants=['CO2_g', 'H_g', 'ele_g', '*', '*'],
products=['COOH*'],
ts='CO2-H-ele*', beta=0.5
)
# r['delta_G'] = 0.098 eV, r['G_IS'], r['G_FS']
Note: Activation energies (Ga) may return None if the TS species name parsing fails for hyphenated names.
Same format as the free_energy_with_corrections skill. Generated automatically from co2r-suncat.db by RunMKMCommand, or can be provided manually.
Shared with the free_energy_diagrams skill. Defines rxn_expressions and rxn_mechanisms. Located at workspace/config.yaml.
Only these products appear in selectivity/FE outputs:
POSSIBLE_PRODUCTS = ("CO_g", "HCOOH_g", "H2_g", "CH4_g", "C2H4_g")
[RUN_MKM] Skipping step... log messages.TypeError: Invalid value for dtype 'str'. Fix: cast formation_energy to str() in generate_input.py.np.product (removed in NumPy 2.x). Fix: replace with np.prod in ASE's thermochemistry.py.distutils which was removed. Install setuptools to restore it.execute() returns None — results are written to disk (plots + CSVs), not returned as a dict.catmap (local install), setuptools, ipywidgets