Find homolytic fission reactions and add roaming

Finds all instances of homolytic fission (i.e. radical recombination, in reverse) reactions in a chemkin file, and adds the reactions you'd get with roaming.

In [1]:
import sys
import os
import re
import numpy
import csv
import cPickle as pickle
import itertools
import logging
from collections import Counter, defaultdict, OrderedDict
import IPython
from IPython.display import display, Markdown, HTML
def mprint(s):
    "A convenience to format things in Jupyter notebooks via MarkDown syntax"
    display(Markdown(s))
    
#import ck2cti  # the customized one stored alongside this notebook
from cantera import ck2cti  # we'll monkey-patch it if needed

# Add $RMGpy to front of your $PYTHONPATH in case you didn't already
sys.path.insert(1,os.getenv('RMGpy',os.path.expanduser('~/Code/RMG-Py')))
from rmgpy.molecule import Molecule
import rmgpy.kinetics
from rmgpy.data.rmg import RMGDatabase
from rmgpy.data.kinetics.library import KineticsLibrary

Butanol

First, read in the chemkin file to the Cantera ck2cti parser.

In [2]:
model_name = 'butanol'
model_path = 'butanol-sarathy2012'
reactions_filepath = os.path.join(model_path, 'model.txt')
thermo_filepath = os.path.join(model_path, 'thermo.txt')
transport_filepath = os.path.join(model_path, 'transport.txt')
In [3]:
outdir = 'CanteraFiles'
os.path.exists(outdir) or os.mkdir(outdir)
for f in os.listdir(outdir):
    if f.startswith(model_name):
        os.unlink(os.path.join(outdir, f))
In [4]:
parser = ck2cti.Parser()
surfaces = parser.convertMech(inputFile=reactions_filepath,
                              thermoFile=thermo_filepath,
                              transportFile=transport_filepath,
                                surfaceFile=None,
                              phaseName='gas',
                              outName=os.path.join(outdir, model_name+'.original.cti'),
                                  permissive=True)
WARNING:root:Found reversible reaction containing a product photon:
oh*<=>oh+hv                                  1.450e+06      0.0           0.0
If the "--permissive" option was specified, this will be converted to an irreversible reaction with the photon removed.
WARNING:root:Found reversible reaction containing a product photon:
ch*<=>ch+hv 1.860e+06 0.0 0.0
If the "--permissive" option was specified, this will be converted to an irreversible reaction with the photon removed.
INFO:root:Skipping unexpected species "hoco" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "ch3cho2h" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "ch3coch2o2h" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "ch3coch2o" while reading thermodynamics entry.
WARNING:root:Found additional thermo entry for species c2h5co. If --permissive was given, the first entry is used.
INFO:root:Skipping unexpected species "ch3chcho" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c3h2" while reading thermodynamics entry.
WARNING:root:Found additional thermo entry for species iic4h7q2-t. If --permissive was given, the first entry is used.
INFO:root:Skipping unexpected species "c5h11-1" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h11-2" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h11-3" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h10-1" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h10-2" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h81-3" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h91-3" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h91-4" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h91-5" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h92-4" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h92-5" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h9o1-3" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h9o2-4" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h11o-1" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h11o-2" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h11o-3" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h11o2h-1" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h11o2h-2" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h11o2h-3" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h11o2-1" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h11o2-2" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h11o2-3" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h10ooh1-2" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h10ooh1-3" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h10ooh1-4" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h10ooh1-5" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h10ooh2-1" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h10ooh2-3" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h10ooh2-4" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h10ooh2-5" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h10ooh3-1" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h10ooh3-2" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h10o1-2" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h10o1-3" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h10o1-4" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h10o1-5" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h10o2-3" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h10o2-4" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h10ooh1-2o2" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h10ooh1-3o2" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h10ooh1-4o2" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h10ooh1-5o2" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h10ooh2-1o2" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h10ooh2-3o2" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h10ooh2-4o2" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h10ooh2-5o2" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h10ooh3-1o2" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h10ooh3-2o2" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "nc5ket12" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "nc5ket13" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "nc5ket14" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "nc5ket15" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "nc5ket21" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "nc5ket23" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "nc5ket24" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "nc5ket25" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "nc5ket31" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "nc5ket32" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h10oh-1" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h10oh-2" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "o2c5h10oh-1" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "o2c5h10oh-2" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c6h6" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c*ccjc*c" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c6h5" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c6h2" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c6h3" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "l-c6h4" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c-c6h4" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c6h5oh" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c6h5o" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "p-c6h4o2" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "p-c6h3o2" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "o-c6h4o2" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h5" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h6" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h5oh" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h4o" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h5o" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h4oh" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c6h5oo" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c6h5ooh" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c6h4oh" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "hoc6h4oh" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "oc6h4oh" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "p-oc6h5oj" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "o-oc6h5oj" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c#cc*ccj" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h6-l" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "cj*cc*cc*o" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c*cc*ccj*o" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "cj*cc*o" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h3o" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c5h7" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "oc5h7o" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c*ccjc*coh" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c*cc*ccj" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c*cc*cc" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c*cc*ccoh" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c*ccjc*o" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "oc4h6o" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "oc4h5o" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "hoc*cc*o" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "hoc*ccj*o" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "o2cchooj" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c4h6oh1-43" while reading thermodynamics entry.
WARNING:root:Found additional thermo entry for species c2h3oh. If --permissive was given, the first entry is used.
INFO:root:Skipping unexpected species "c4h5" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "ic3h7oh" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "ic3h6oh-1" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c3h5oh1-1" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c2h5oc2h5" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "ch3oc2h5" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "ch2oc2h5" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "hcchoh" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "ch2coh" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c4h8oh-1oh" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c4h8oh-2oh" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c4h8oh-3oh" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c4h8oh-4oh" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c4h7oh-1ooh-2ooh" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c4h7oh-1ooh-3ooh" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c4h7oh-2ooh-3ooh" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c4h7oh-2ooh-4ooh" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c4h7oh-3ooh-4ooh" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "c4h7oh-1ooh-4ooh" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "ic4h7oh-12ooh" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "ic4h7oh-13ooh" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "ic4h7oh-23ooh" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "ic4h7oh-33ooh" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "ic4h8oh-1oh" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "ic4h8oh-2oh" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "ic4h8oh-3oh" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "tc4h7oh-ooh-ooh" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "tc4h8oh-oh" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "sc4o5h223" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "sc4o5h212" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "sc4o5h213" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "sc4o5h2m1" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "sc4o5h2m2" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "sc4o5h2m3" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "sc4ohket1-2" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "sc4ohket1-3" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "sc4ohket1-m" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "sc4h8oh-moh" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "sc4h8oh-1oh" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "sc4h8oh-3oh" while reading thermodynamics entry.
INFO:root:Skipping unexpected species "sc4h8oh-2oh" while reading thermodynamics entry.
WARNING:root:Ignoring duplicate transport data for species "c4h8o1-4 on line 107 of "butanol-sarathy2012/transport.txt".
WARNING:root:Ignoring duplicate transport data for species "ch3co on line 291 of "butanol-sarathy2012/transport.txt".
WARNING:root:Ignoring duplicate transport data for species "c4h8-2 on line 1207 of "butanol-sarathy2012/transport.txt".
WARNING:root:Ignoring duplicate transport data for species "c4h8-1 on line 1209 of "butanol-sarathy2012/transport.txt".
WARNING:root:Ignoring duplicate transport data for species "c2h5cho on line 1223 of "butanol-sarathy2012/transport.txt".
WARNING:root:Ignoring duplicate transport data for species "ch3choococh3 on line 1365 of "butanol-sarathy2012/transport.txt".
WARNING:root:Ignoring duplicate transport data for species "pc4h9o on line 1584 of "butanol-sarathy2012/transport.txt".
WARNING:root:Ignoring duplicate transport data for species "tic4h7q2-i on line 1848 of "butanol-sarathy2012/transport.txt".
WARNING:root:Ignoring duplicate transport data for species "iic4h7q2-t on line 1849 of "butanol-sarathy2012/transport.txt".
WARNING:root:Ignoring duplicate transport data for species "iic4h7q2-i on line 1850 of "butanol-sarathy2012/transport.txt".
WARNING:root:Ignoring duplicate transport data for species "ch2cch2oh on line 1865 of "butanol-sarathy2012/transport.txt".
WARNING:root:Ignoring duplicate transport data for species "c2h3o1-2 on line 1873 of "butanol-sarathy2012/transport.txt".
WARNING:root:Ignoring duplicate transport data for species "c2h3oh on line 1902 of "butanol-sarathy2012/transport.txt".
Wrote CTI mechanism file to 'CanteraFiles/butanol.original.cti'.
Mechanism contains 431 species and 2346 reactions.
In [5]:
parser.reactions[0], str(parser.reactions[0])
Out[5]:
(<cantera.ck2cti.Reaction at 0x10bf030d0>, 'h + o2 <=> o + oh')

Now read in the species dictionary file to get RMG Species objects for each species

In [6]:
get_species_dict = KineticsLibrary().getSpecies
species_dict = get_species_dict(os.path.join(model_path, 'RMG-Py-kinetics-library', 'dictionary.txt'))
species_dict
Out[6]:
{'ac3h5ooh': Species(label="ac3h5ooh", molecule=[Molecule(SMILES="C=CCOO")]),
 'ar': Species(label="ar", molecule=[Molecule(SMILES="[Ar]")]),
 'c': Species(label="c", molecule=[Molecule(SMILES="[C]")]),
 'c2h': Species(label="c2h", molecule=[Molecule(SMILES="[C]#C")]),
 'c2h2': Species(label="c2h2", molecule=[Molecule(SMILES="C#C")]),
 'c2h2oh': Species(label="c2h2oh", molecule=[Molecule(SMILES="[CH]=CO")]),
 'c2h3': Species(label="c2h3", molecule=[Molecule(SMILES="[CH]=C")]),
 'c2h3cho': Species(label="c2h3cho", molecule=[Molecule(SMILES="C=CC=O")]),
 'c2h3choch2': Species(label="c2h3choch2", molecule=[Molecule(SMILES="[CH2]C=CO[CH2]"), Molecule(SMILES="[CH2]O[CH]C=C")]),
 'c2h3co': Species(label="c2h3co", molecule=[Molecule(SMILES="C=C[C]=O"), Molecule(SMILES="[CH2]C=C=O")]),
 'c2h3coch3': Species(label="c2h3coch3", molecule=[Molecule(SMILES="C=CC(C)=O")]),
 'c2h3o1-2': Species(label="c2h3o1-2", molecule=[Molecule(SMILES="[CH]1CO1")]),
 'c2h3oh': Species(label="c2h3oh", molecule=[Molecule(SMILES="C=CO")]),
 'c2h3ooh': Species(label="c2h3ooh", molecule=[Molecule(SMILES="C=COO")]),
 'c2h4': Species(label="c2h4", molecule=[Molecule(SMILES="C=C")]),
 'c2h4o1-2': Species(label="c2h4o1-2", molecule=[Molecule(SMILES="C1CO1")]),
 'c2h4o2h': Species(label="c2h4o2h", molecule=[Molecule(SMILES="[CH2]COO")]),
 'c2h5': Species(label="c2h5", molecule=[Molecule(SMILES="C[CH2]")]),
 'c2h5chco': Species(label="c2h5chco", molecule=[Molecule(SMILES="CCC=C=O")]),
 'c2h5cho': Species(label="c2h5cho", molecule=[Molecule(SMILES="CCC=O")]),
 'c2h5co': Species(label="c2h5co", molecule=[Molecule(SMILES="CC[C]=O")]),
 'c2h5coch2': Species(label="c2h5coch2", molecule=[Molecule(SMILES="[CH2]C(=O)CC"), Molecule(SMILES="C=C([O])CC")]),
 'c2h5coch3': Species(label="c2h5coch3", molecule=[Molecule(SMILES="CCC(C)=O")]),
 'c2h5o': Species(label="c2h5o", molecule=[Molecule(SMILES="CC[O]")]),
 'c2h5o2': Species(label="c2h5o2", molecule=[Molecule(SMILES="CCO[O]")]),
 'c2h5o2h': Species(label="c2h5o2h", molecule=[Molecule(SMILES="CCOO")]),
 'c2h5oh': Species(label="c2h5oh", molecule=[Molecule(SMILES="CCO")]),
 'c2h6': Species(label="c2h6", molecule=[Molecule(SMILES="CC")]),
 'c3h3': Species(label="c3h3", molecule=[Molecule(SMILES="C#C[CH2]"), Molecule(SMILES="[CH]=C=C")]),
 'c3h4-a': Species(label="c3h4-a", molecule=[Molecule(SMILES="C=C=C")]),
 'c3h4-p': Species(label="c3h4-p", molecule=[Molecule(SMILES="C#CC")]),
 'c3h5-a': Species(label="c3h5-a", molecule=[Molecule(SMILES="[CH2]C=C"), Molecule(SMILES="[CH2]C=C")]),
 'c3h5-s': Species(label="c3h5-s", molecule=[Molecule(SMILES="[CH]=CC")]),
 'c3h5-t': Species(label="c3h5-t", molecule=[Molecule(SMILES="C=[C]C")]),
 'c3h51-2,3ooh': Species(label="c3h51-2,3ooh", molecule=[Molecule(SMILES="[CH2]C(COO)OO")]),
 'c3h52-1,3ooh': Species(label="c3h52-1,3ooh", molecule=[Molecule(SMILES="OOC[CH]COO")]),
 'c3h5o': Species(label="c3h5o", molecule=[Molecule(SMILES="C=CC[O]")]),
 'c3h5oh': Species(label="c3h5oh", molecule=[Molecule(SMILES="C=CCO")]),
 'c3h6': Species(label="c3h6", molecule=[Molecule(SMILES="C=CC")]),
 'c3h6cho-1': Species(label="c3h6cho-1", molecule=[Molecule(SMILES="[CH2]CCC=O")]),
 'c3h6cho-2': Species(label="c3h6cho-2", molecule=[Molecule(SMILES="C[CH]CC=O")]),
 'c3h6cho-3': Species(label="c3h6cho-3", molecule=[Molecule(SMILES="CC[CH]C=O"), Molecule(SMILES="CCC=C[O]")]),
 'c3h6o1-2': Species(label="c3h6o1-2", molecule=[Molecule(SMILES="CC1CO1")]),
 'c3h6o1-3': Species(label="c3h6o1-3", molecule=[Molecule(SMILES="C1COC1")]),
 'c3h6oh': Species(label="c3h6oh", molecule=[Molecule(SMILES="[CH2]CCO")]),
 'c3h6oh-1': Species(label="c3h6oh-1", molecule=[Molecule(SMILES="CC[CH]O")]),
 'c3h6oh-2': Species(label="c3h6oh-2", molecule=[Molecule(SMILES="C[CH]CO")]),
 'c3h6ooh1-2': Species(label="c3h6ooh1-2", molecule=[Molecule(SMILES="C[CH]COO")]),
 'c3h6ooh1-2o2': Species(label="c3h6ooh1-2o2", molecule=[Molecule(SMILES="CC(COO)O[O]")]),
 'c3h6ooh1-3': Species(label="c3h6ooh1-3", molecule=[Molecule(SMILES="[CH2]CCOO")]),
 'c3h6ooh1-3o2': Species(label="c3h6ooh1-3o2", molecule=[Molecule(SMILES="[O]OCCCOO")]),
 'c3h6ooh2-1': Species(label="c3h6ooh2-1", molecule=[Molecule(SMILES="[CH2]C(C)OO")]),
 'c3h6ooh2-1o2': Species(label="c3h6ooh2-1o2", molecule=[Molecule(SMILES="CC(CO[O])OO")]),
 'c3h6ooh2-2': Species(label="c3h6ooh2-2", molecule=[Molecule(SMILES="C[C](C)OO")]),
 'c3h8': Species(label="c3h8", molecule=[Molecule(SMILES="CCC")]),
 'c3ket12': Species(label="c3ket12", molecule=[Molecule(SMILES="CC(C=O)OO")]),
 'c3ket13': Species(label="c3ket13", molecule=[Molecule(SMILES="O=CCCOO")]),
 'c3ket21': Species(label="c3ket21", molecule=[Molecule(SMILES="CC(=O)COO")]),
 'c4h10': Species(label="c4h10", molecule=[Molecule(SMILES="CCCC")]),
 'c4h2': Species(label="c4h2", molecule=[Molecule(SMILES="C#CC#C")]),
 'c4h3-i': Species(label="c4h3-i", molecule=[Molecule(SMILES="C#C[C]=C"), Molecule(SMILES="[CH]=C=C=C")]),
 'c4h3-n': Species(label="c4h3-n", molecule=[Molecule(SMILES="[CH]=CC#C")]),
 'c4h4': Species(label="c4h4", molecule=[Molecule(SMILES="C#CC=C")]),
 'c4h4o': Species(label="c4h4o", molecule=[Molecule(SMILES="C1C=COC=1")]),
 'c4h5-2': Species(label="c4h5-2", molecule=[Molecule(SMILES="C=C=[C]C"), Molecule(SMILES="[CH2]C#CC")]),
 'c4h5-i': Species(label="c4h5-i", molecule=[Molecule(SMILES="C=[C]C=C"), Molecule(SMILES="[CH2]C=C=C")]),
 'c4h5-n': Species(label="c4h5-n", molecule=[Molecule(SMILES="[CH]=CC=C")]),
 'c4h5oh-13': Species(label="c4h5oh-13", molecule=[Molecule(SMILES="C=CC=CO")]),
 'c4h6': Species(label="c4h6", molecule=[Molecule(SMILES="C=CC=C")]),
 'c4h6-2': Species(label="c4h6-2", molecule=[Molecule(SMILES="CC#CC")]),
 'c4h612': Species(label="c4h612", molecule=[Molecule(SMILES="C=C=CC")]),
 'c4h6o23': Species(label="c4h6o23", molecule=[Molecule(SMILES="C1=COCC1")]),
 'c4h6o25': Species(label="c4h6o25", molecule=[Molecule(SMILES="C1=CCOC1")]),
 'c4h6oh1-13': Species(label="c4h6oh1-13", molecule=[Molecule(SMILES="CC=C[CH]O"), Molecule(SMILES="C[CH]C=CO")]),
 'c4h6oh1-32': Species(label="c4h6oh1-32", molecule=[Molecule(SMILES="C=C(O)[CH]C"), Molecule(SMILES="[CH2]C(O)=CC")]),
 'c4h71-1': Species(label="c4h71-1", molecule=[Molecule(SMILES="[CH]=CCC")]),
 'c4h71-2': Species(label="c4h71-2", molecule=[Molecule(SMILES="C=[C]CC")]),
 'c4h71-3': Species(label="c4h71-3", molecule=[Molecule(SMILES="C=C[CH]C"), Molecule(SMILES="[CH2]C=CC")]),
 'c4h71-4': Species(label="c4h71-4", molecule=[Molecule(SMILES="[CH2]CC=C")]),
 'c4h72-2': Species(label="c4h72-2", molecule=[Molecule(SMILES="C[C]=CC")]),
 'c4h7o': Species(label="c4h7o", molecule=[Molecule(SMILES="C=CC(C)[O]")]),
 'c4h7oh-1ooh-2': Species(label="c4h7oh-1ooh-2", molecule=[Molecule(SMILES="CC[CH]C(O)OO")]),
 'c4h7oh-1ooh-2o2': Species(label="c4h7oh-1ooh-2o2", molecule=[Molecule(SMILES="CCC(O[O])C(O)OO")]),
 'c4h7oh-1ooh-3': Species(label="c4h7oh-1ooh-3", molecule=[Molecule(SMILES="C[CH]CC(O)OO")]),
 'c4h7oh-1ooh-3o2': Species(label="c4h7oh-1ooh-3o2", molecule=[Molecule(SMILES="CC(CC(O)OO)O[O]")]),
 'c4h7oh-1ooh-4': Species(label="c4h7oh-1ooh-4", molecule=[Molecule(SMILES="[CH2]CCC(O)OO")]),
 'c4h7oh-1ooh-4o2': Species(label="c4h7oh-1ooh-4o2", molecule=[Molecule(SMILES="[O]OCCCC(O)OO")]),
 'c4h7oh-2ooh-1': Species(label="c4h7oh-2ooh-1", molecule=[Molecule(SMILES="CCC([CH]O)OO")]),
 'c4h7oh-2ooh-1o2': Species(label="c4h7oh-2ooh-1o2", molecule=[Molecule(SMILES="CCC(OO)C(O)O[O]")]),
 'c4h7oh-2ooh-3': Species(label="c4h7oh-2ooh-3", molecule=[Molecule(SMILES="C[CH]C(CO)OO")]),
 'c4h7oh-2ooh-3o2': Species(label="c4h7oh-2ooh-3o2", molecule=[Molecule(SMILES="CC(O[O])C(CO)OO")]),
 'c4h7oh-2ooh-4': Species(label="c4h7oh-2ooh-4", molecule=[Molecule(SMILES="[CH2]CC(CO)OO")]),
 'c4h7oh-2ooh-4o2': Species(label="c4h7oh-2ooh-4o2", molecule=[Molecule(SMILES="[O]OCCC(CO)OO")]),
 'c4h7oh-3ooh-1': Species(label="c4h7oh-3ooh-1", molecule=[Molecule(SMILES="CC(C[CH]O)OO")]),
 'c4h7oh-3ooh-1o2': Species(label="c4h7oh-3ooh-1o2", molecule=[Molecule(SMILES="CC(CC(O)O[O])OO")]),
 'c4h7oh-3ooh-2': Species(label="c4h7oh-3ooh-2", molecule=[Molecule(SMILES="CC([CH]CO)OO")]),
 'c4h7oh-3ooh-2o2': Species(label="c4h7oh-3ooh-2o2", molecule=[Molecule(SMILES="CC(OO)C(CO)O[O]")]),
 'c4h7oh-3ooh-4': Species(label="c4h7oh-3ooh-4", molecule=[Molecule(SMILES="[CH2]C(CCO)OO")]),
 'c4h7oh-3ooh-4o2': Species(label="c4h7oh-3ooh-4o2", molecule=[Molecule(SMILES="[O]OCC(CCO)OO")]),
 'c4h7oh-4ooh-1': Species(label="c4h7oh-4ooh-1", molecule=[Molecule(SMILES="O[CH]CCCOO")]),
 'c4h7oh-4ooh-1o2': Species(label="c4h7oh-4ooh-1o2", molecule=[Molecule(SMILES="[O]OC(O)CCCOO")]),
 'c4h7oh-4ooh-2': Species(label="c4h7oh-4ooh-2", molecule=[Molecule(SMILES="OC[CH]CCOO")]),
 'c4h7oh-4ooh-2o2': Species(label="c4h7oh-4ooh-2o2", molecule=[Molecule(SMILES="[O]OC(CO)CCOO")]),
 'c4h7oh-4ooh-3': Species(label="c4h7oh-4ooh-3", molecule=[Molecule(SMILES="OCC[CH]COO")]),
 'c4h7oh-4ooh-3o2': Species(label="c4h7oh-4ooh-3o2", molecule=[Molecule(SMILES="[O]OC(CCO)COO")]),
 'c4h7oh1-1': Species(label="c4h7oh1-1", molecule=[Molecule(SMILES="CCC=CO")]),
 'c4h7oh1-2': Species(label="c4h7oh1-2", molecule=[Molecule(SMILES="C=C(O)CC")]),
 'c4h7oh1-3': Species(label="c4h7oh1-3", molecule=[Molecule(SMILES="C=CC(C)O")]),
 'c4h7oh1-4': Species(label="c4h7oh1-4", molecule=[Molecule(SMILES="C=CCCO")]),
 'c4h7oh2-1': Species(label="c4h7oh2-1", molecule=[Molecule(SMILES="CC=CCO")]),
 'c4h7oh2-2': Species(label="c4h7oh2-2", molecule=[Molecule(SMILES="CC=C(C)O")]),
 'c4h7oho1-2': Species(label="c4h7oho1-2", molecule=[Molecule(SMILES="CC1CC(O)O1")]),
 'c4h7oho1-3': Species(label="c4h7oho1-3", molecule=[Molecule(SMILES="CC1CC(O)O1")]),
 'c4h7oho1-4': Species(label="c4h7oho1-4", molecule=[Molecule(SMILES="OC1CCCO1")]),
 'c4h7oho2-3': Species(label="c4h7oho2-3", molecule=[Molecule(SMILES="CC1OC1CO")]),
 'c4h7oho2-4': Species(label="c4h7oho2-4", molecule=[Molecule(SMILES="OCC1CCO1")]),
 'c4h7oho3-4': Species(label="c4h7oho3-4", molecule=[Molecule(SMILES="OCCC1CO1")]),
 'c4h8-1': Species(label="c4h8-1", molecule=[Molecule(SMILES="C=CCC")]),
 'c4h8-2': Species(label="c4h8-2", molecule=[Molecule(SMILES="CC=CC")]),
 'c4h8o1-2': Species(label="c4h8o1-2", molecule=[Molecule(SMILES="CCC1CO1")]),
 'c4h8o1-3': Species(label="c4h8o1-3", molecule=[Molecule(SMILES="CC1CCO1")]),
 'c4h8o1-4': Species(label="c4h8o1-4", molecule=[Molecule(SMILES="C1CCOC1")]),
 'c4h8o2-3': Species(label="c4h8o2-3", molecule=[Molecule(SMILES="CC1OC1C")]),
 'c4h8oh-1': Species(label="c4h8oh-1", molecule=[Molecule(SMILES="CCC[CH]O")]),
 'c4h8oh-1o': Species(label="c4h8oh-1o", molecule=[Molecule(SMILES="CCCC([O])O")]),
 'c4h8oh-1o2': Species(label="c4h8oh-1o2", molecule=[Molecule(SMILES="CCCC(O)O[O]")]),
 'c4h8oh-1o2h': Species(label="c4h8oh-1o2h", molecule=[Molecule(SMILES="CCCC(O)OO")]),
 'c4h8oh-2': Species(label="c4h8oh-2", molecule=[Molecule(SMILES="CC[CH]CO")]),
 'c4h8oh-2o': Species(label="c4h8oh-2o", molecule=[Molecule(SMILES="CCC([O])CO")]),
 'c4h8oh-2o2': Species(label="c4h8oh-2o2", molecule=[Molecule(SMILES="CCC(CO)O[O]")]),
 'c4h8oh-2o2h': Species(label="c4h8oh-2o2h", molecule=[Molecule(SMILES="CCC(CO)OO")]),
 'c4h8oh-3': Species(label="c4h8oh-3", molecule=[Molecule(SMILES="C[CH]CCO")]),
 'c4h8oh-3o': Species(label="c4h8oh-3o", molecule=[Molecule(SMILES="CC([O])CCO")]),
 'c4h8oh-3o2': Species(label="c4h8oh-3o2", molecule=[Molecule(SMILES="CC(CCO)O[O]")]),
 'c4h8oh-3o2h': Species(label="c4h8oh-3o2h", molecule=[Molecule(SMILES="CC(CCO)OO")]),
 'c4h8oh-4': Species(label="c4h8oh-4", molecule=[Molecule(SMILES="[CH2]CCCO")]),
 'c4h8oh-4o': Species(label="c4h8oh-4o", molecule=[Molecule(SMILES="[O]CCCCO")]),
 'c4h8oh-4o2': Species(label="c4h8oh-4o2", molecule=[Molecule(SMILES="[O]OCCCCO")]),
 'c4h8oh-4o2h': Species(label="c4h8oh-4o2h", molecule=[Molecule(SMILES="OCCCCOO")]),
 'c4h8ooh1-1': Species(label="c4h8ooh1-1", molecule=[Molecule(SMILES="CCC[CH]OO")]),
 'c4h8ooh1-2': Species(label="c4h8ooh1-2", molecule=[Molecule(SMILES="CC[CH]COO")]),
 'c4h8ooh1-2o2': Species(label="c4h8ooh1-2o2", molecule=[Molecule(SMILES="CCC(COO)O[O]")]),
 'c4h8ooh1-3': Species(label="c4h8ooh1-3", molecule=[Molecule(SMILES="C[CH]CCOO")]),
 'c4h8ooh1-3o2': Species(label="c4h8ooh1-3o2", molecule=[Molecule(SMILES="CC(CCOO)O[O]")]),
 'c4h8ooh1-4': Species(label="c4h8ooh1-4", molecule=[Molecule(SMILES="[CH2]CCCOO")]),
 'c4h8ooh1-4o2': Species(label="c4h8ooh1-4o2", molecule=[Molecule(SMILES="[O]OCCCCOO")]),
 'c4h8ooh2-1': Species(label="c4h8ooh2-1", molecule=[Molecule(SMILES="[CH2]C(CC)OO")]),
 'c4h8ooh2-1o2': Species(label="c4h8ooh2-1o2", molecule=[Molecule(SMILES="CCC(CO[O])OO")]),
 'c4h8ooh2-2': Species(label="c4h8ooh2-2", molecule=[Molecule(SMILES="CC[C](C)OO")]),
 'c4h8ooh2-3': Species(label="c4h8ooh2-3", molecule=[Molecule(SMILES="C[CH]C(C)OO")]),
 'c4h8ooh2-3o2': Species(label="c4h8ooh2-3o2", molecule=[Molecule(SMILES="CC(O[O])C(C)OO")]),
 'c4h8ooh2-4': Species(label="c4h8ooh2-4", molecule=[Molecule(SMILES="[CH2]CC(C)OO")]),
 'c4h8ooh2-4o2': Species(label="c4h8ooh2-4o2", molecule=[Molecule(SMILES="CC(CCO[O])OO")]),
 'c4ohket1-2': Species(label="c4ohket1-2", molecule=[Molecule(SMILES="CCC(OO)C(=O)O")]),
 'c4ohket1-3': Species(label="c4ohket1-3", molecule=[Molecule(SMILES="CC(CC(=O)O)OO")]),
 'c4ohket1-4': Species(label="c4ohket1-4", molecule=[Molecule(SMILES="O=C(O)CCCOO")]),
 'c4ohket2-1': Species(label="c4ohket2-1", molecule=[Molecule(SMILES="CCC(=O)C(O)OO")]),
 'c4ohket2-3': Species(label="c4ohket2-3", molecule=[Molecule(SMILES="CC(OO)C(=O)CO")]),
 'c4ohket2-4': Species(label="c4ohket2-4", molecule=[Molecule(SMILES="O=C(CO)CCOO")]),
 'c4ohket3-1': Species(label="c4ohket3-1", molecule=[Molecule(SMILES="CC(=O)CC(O)OO")]),
 'c4ohket3-2': Species(label="c4ohket3-2", molecule=[Molecule(SMILES="CC(=O)C(CO)OO")]),
 'c4ohket3-4': Species(label="c4ohket3-4", molecule=[Molecule(SMILES="O=C(CCO)COO")]),
 'c4ohket4-1': Species(label="c4ohket4-1", molecule=[Molecule(SMILES="O=CCCC(O)OO")]),
 'c4ohket4-2': Species(label="c4ohket4-2", molecule=[Molecule(SMILES="O=CCC(CO)OO")]),
 'c4ohket4-3': Species(label="c4ohket4-3", molecule=[Molecule(SMILES="O=CC(CCO)OO")]),
 'cc3h4': Species(label="cc3h4", molecule=[Molecule(SMILES="C1=CC1")]),
 'cc4h8o': Species(label="cc4h8o", molecule=[Molecule(SMILES="CC1COC1")]),
 'ch': Species(label="ch", molecule=[Molecule(SMILES="[CH]")]),
 'ch*': Species(label="ch*", molecule=[Molecule(SMILES="[CH]")]),
 'ch2': Species(label="ch2", molecule=[Molecule(SMILES="[CH2]")]),
 'ch2(s)': Species(label="ch2(s)", molecule=[Molecule(SMILES="[CH2]")]),
 'ch2cch2oh': Species(label="ch2cch2oh", molecule=[Molecule(SMILES="C=[C]CO")]),
 'ch2ch2cho': Species(label="ch2ch2cho", molecule=[Molecule(SMILES="[CH2]CC=O")]),
 'ch2ch2coch3': Species(label="ch2ch2coch3", molecule=[Molecule(SMILES="[CH2]CC(C)=O")]),
 'ch2chchcho': Species(label="ch2chchcho", molecule=[Molecule(SMILES="[CH2]C=CC=O"), Molecule(SMILES="C=C[CH]C=O"), Molecule(SMILES="C=CC=C[O]")]),
 'ch2cho': Species(label="ch2cho", molecule=[Molecule(SMILES="C=C[O]"), Molecule(SMILES="[CH2]C=O")]),
 'ch2choohcoch3': Species(label="ch2choohcoch3", molecule=[Molecule(SMILES="[CH2]C(OO)C(C)=O")]),
 'ch2co': Species(label="ch2co", molecule=[Molecule(SMILES="C=C=O")]),
 'ch2o': Species(label="ch2o", molecule=[Molecule(SMILES="C=O")]),
 'ch2o2h': Species(label="ch2o2h", molecule=[Molecule(SMILES="[CH2]OO")]),
 'ch2och2o2h': Species(label="ch2och2o2h", molecule=[Molecule(SMILES="[CH2]OCOO")]),
 'ch2ocho': Species(label="ch2ocho", molecule=[Molecule(SMILES="[CH2]OC=O")]),
 'ch2oh': Species(label="ch2oh", molecule=[Molecule(SMILES="[CH2]O")]),
 'ch3': Species(label="ch3", molecule=[Molecule(SMILES="[CH3]")]),
 'ch3chchcho': Species(label="ch3chchcho", molecule=[Molecule(SMILES="CC=CC=O")]),
 'ch3chchco': Species(label="ch3chchco", molecule=[Molecule(SMILES="CC=C[C]=O"), Molecule(SMILES="C[CH]C=C=O")]),
 'ch3chchoh': Species(label="ch3chchoh", molecule=[Molecule(SMILES="CC=CO")]),
 'ch3chco': Species(label="ch3chco", molecule=[Molecule(SMILES="CC=C=O")]),
 'ch3chcoch3': Species(label="ch3chcoch3", molecule=[Molecule(SMILES="CC=C(C)[O]"), Molecule(SMILES="C[CH]C(C)=O")]),
 'ch3cho': Species(label="ch3cho", molecule=[Molecule(SMILES="CC=O")]),
 'ch3choococh3': Species(label="ch3choococh3", molecule=[Molecule(SMILES="CC(=O)C(C)O[O]")]),
 'ch3co': Species(label="ch3co", molecule=[Molecule(SMILES="C[C]=O")]),
 'ch3co2': Species(label="ch3co2", molecule=[Molecule(SMILES="CC([O])=O"), Molecule(SMILES="CC([O])=O")]),
 'ch3co3': Species(label="ch3co3", molecule=[Molecule(SMILES="CC(=O)O[O]")]),
 'ch3co3h': Species(label="ch3co3h", molecule=[Molecule(SMILES="CC(=O)OO")]),
 'ch3coch2': Species(label="ch3coch2", molecule=[Molecule(SMILES="[CH2]C(C)=O"), Molecule(SMILES="C=C(C)[O]")]),
 'ch3coch2o2': Species(label="ch3coch2o2", molecule=[Molecule(SMILES="CC(=O)CO[O]")]),
 'ch3coch3': Species(label="ch3coch3", molecule=[Molecule(SMILES="CC(C)=O")]),
 'ch3o': Species(label="ch3o", molecule=[Molecule(SMILES="C[O]")]),
 'ch3o2': Species(label="ch3o2", molecule=[Molecule(SMILES="CO[O]")]),
 'ch3o2h': Species(label="ch3o2h", molecule=[Molecule(SMILES="COO")]),
 'ch3och2': Species(label="ch3och2", molecule=[Molecule(SMILES="[CH2]OC")]),
 'ch3och2o': Species(label="ch3och2o", molecule=[Molecule(SMILES="COC[O]")]),
 'ch3och2o2': Species(label="ch3och2o2", molecule=[Molecule(SMILES="COCO[O]")]),
 'ch3och2o2h': Species(label="ch3och2o2h", molecule=[Molecule(SMILES="COCOO")]),
 'ch3och3': Species(label="ch3och3", molecule=[Molecule(SMILES="COC")]),
 'ch3ocho': Species(label="ch3ocho", molecule=[Molecule(SMILES="COC=O")]),
 'ch3oco': Species(label="ch3oco", molecule=[Molecule(SMILES="CO[C]=O")]),
 'ch3oh': Species(label="ch3oh", molecule=[Molecule(SMILES="CO")]),
 'ch4': Species(label="ch4", molecule=[Molecule(SMILES="C")]),
 'co': Species(label="co", molecule=[Molecule(SMILES="[C-]#[O+]")]),
 'co2': Species(label="co2", molecule=[Molecule(SMILES="O=C=O")]),
 'h': Species(label="h", molecule=[Molecule(SMILES="[H]")]),
 'h2': Species(label="h2", molecule=[Molecule(SMILES="[H][H]")]),
 'h2c4o': Species(label="h2c4o", molecule=[Molecule(SMILES="C=C=C=C=O")]),
 'h2cc': Species(label="h2cc", molecule=[Molecule(SMILES="[C]=C")]),
 'h2o': Species(label="h2o", molecule=[Molecule(SMILES="O")]),
 'h2o2': Species(label="h2o2", molecule=[Molecule(SMILES="OO")]),
 'hcco': Species(label="hcco", molecule=[Molecule(SMILES="C#C[O]"), Molecule(SMILES="[CH]=C=O")]),
 'hccoh': Species(label="hccoh", molecule=[Molecule(SMILES="C#CO")]),
 'hco': Species(label="hco", molecule=[Molecule(SMILES="[CH]=O")]),
 'hcoh': Species(label="hcoh", molecule=[Molecule(SMILES="[CH]O")]),
 'ho2': Species(label="ho2", molecule=[Molecule(SMILES="[O]O")]),
 'ho2ch2co': Species(label="ho2ch2co", molecule=[Molecule(SMILES="O=[C]COO")]),
 'ho2ch2ocho': Species(label="ho2ch2ocho", molecule=[Molecule(SMILES="O=COCOO")]),
 'ho2cho': Species(label="ho2cho", molecule=[Molecule(SMILES="O=COO")]),
 'hoc2h4cho': Species(label="hoc2h4cho", molecule=[Molecule(SMILES="O=CCCO")]),
 'hoc2h4co': Species(label="hoc2h4co", molecule=[Molecule(SMILES="O=[C]CCO")]),
 'hoc3h6o2': Species(label="hoc3h6o2", molecule=[Molecule(SMILES="[O]OCCCO")]),
 'hoch2cho': Species(label="hoch2cho", molecule=[Molecule(SMILES="O=CCO")]),
 'hoch2co': Species(label="hoch2co", molecule=[Molecule(SMILES="O=[C]CO")]),
 'hoch2o': Species(label="hoch2o", molecule=[Molecule(SMILES="[O]CO")]),
 'hoch2o2': Species(label="hoch2o2", molecule=[Molecule(SMILES="[O]OCO")]),
 'hoch2o2h': Species(label="hoch2o2h", molecule=[Molecule(SMILES="OCOO")]),
 'hoch2oco': Species(label="hoch2oco", molecule=[Molecule(SMILES="O=[C]OCO")]),
 'hocho': Species(label="hocho", molecule=[Molecule(SMILES="O=CO")]),
 'ic3h5ch2oh': Species(label="ic3h5ch2oh", molecule=[Molecule(SMILES="C=C(C)CO")]),
 'ic3h5cho': Species(label="ic3h5cho", molecule=[Molecule(SMILES="C=C(C)C=O")]),
 'ic3h5co': Species(label="ic3h5co", molecule=[Molecule(SMILES="C=C(C)[C]=O"), Molecule(SMILES="[CH2]C(C)=C=O")]),
 'ic3h5o2hcho': Species(label="ic3h5o2hcho", molecule=[Molecule(SMILES="[CH2]C(C)(C=O)OO")]),
 'ic3h5oh': Species(label="ic3h5oh", molecule=[Molecule(SMILES="C=C(C)O")]),
 'ic3h6cho': Species(label="ic3h6cho", molecule=[Molecule(SMILES="[CH2]C(C)C=O")]),
 'ic3h6choh': Species(label="ic3h6choh", molecule=[Molecule(SMILES="CC(C)=CO")]),
 'ic3h6co': Species(label="ic3h6co", molecule=[Molecule(SMILES="CC(C)=C=O")]),
 'ic3h6oh': Species(label="ic3h6oh", molecule=[Molecule(SMILES="[CH2]C(C)O")]),
 'ic3h7': Species(label="ic3h7", molecule=[Molecule(SMILES="C[CH]C")]),
 'ic3h7cho': Species(label="ic3h7cho", molecule=[Molecule(SMILES="CC(C)C=O")]),
 'ic3h7co': Species(label="ic3h7co", molecule=[Molecule(SMILES="CC(C)[C]=O")]),
 'ic3h7o': Species(label="ic3h7o", molecule=[Molecule(SMILES="CC(C)[O]")]),
 'ic3h7o2': Species(label="ic3h7o2", molecule=[Molecule(SMILES="CC(C)O[O]")]),
 'ic3h7o2h': Species(label="ic3h7o2h", molecule=[Molecule(SMILES="CC(C)OO")]),
 'ic4h10': Species(label="ic4h10", molecule=[Molecule(SMILES="CC(C)C")]),
 'ic4h6oh': Species(label="ic4h6oh", molecule=[Molecule(SMILES="[CH2]C(=C)CO"), Molecule(SMILES="[CH2]C(=C)CO")]),
 'ic4h7': Species(label="ic4h7", molecule=[Molecule(SMILES="[CH2]C(=C)C"), Molecule(SMILES="[CH2]C(=C)C")]),
 'ic4h7o': Species(label="ic4h7o", molecule=[Molecule(SMILES="C=C(C)C[O]")]),
 'ic4h7oh': Species(label="ic4h7oh", molecule=[Molecule(SMILES="C=C(C)CO")]),
 'ic4h7oh-1ooh-2': Species(label="ic4h7oh-1ooh-2", molecule=[Molecule(SMILES="C[C](C)C(O)OO")]),
 'ic4h7oh-1ooh-2o2': Species(label="ic4h7oh-1ooh-2o2", molecule=[Molecule(SMILES="CC(C)(O[O])C(O)OO")]),
 'ic4h7oh-1ooh-3': Species(label="ic4h7oh-1ooh-3", molecule=[Molecule(SMILES="[CH2]C(C)C(O)OO")]),
 'ic4h7oh-1ooh-3o2': Species(label="ic4h7oh-1ooh-3o2", molecule=[Molecule(SMILES="CC(CO[O])C(O)OO")]),
 'ic4h7oh-2ooh-1': Species(label="ic4h7oh-2ooh-1", molecule=[Molecule(SMILES="CC(C)([CH]O)OO")]),
 'ic4h7oh-2ooh-1o2': Species(label="ic4h7oh-2ooh-1o2", molecule=[Molecule(SMILES="CC(C)(OO)C(O)O[O]")]),
 'ic4h7oh-2ooh-3': Species(label="ic4h7oh-2ooh-3", molecule=[Molecule(SMILES="[CH2]C(C)(CO)OO")]),
 'ic4h7oh-2ooh-3o2': Species(label="ic4h7oh-2ooh-3o2", molecule=[Molecule(SMILES="CC(CO)(CO[O])OO")]),
 'ic4h7oh-3ooh-1': Species(label="ic4h7oh-3ooh-1", molecule=[Molecule(SMILES="CC([CH]O)COO")]),
 'ic4h7oh-3ooh-1o2': Species(label="ic4h7oh-3ooh-1o2", molecule=[Molecule(SMILES="CC(COO)C(O)O[O]")]),
 'ic4h7oh-3ooh-2': Species(label="ic4h7oh-3ooh-2", molecule=[Molecule(SMILES="C[C](CO)COO")]),
 'ic4h7oh-3ooh-2o2': Species(label="ic4h7oh-3ooh-2o2", molecule=[Molecule(SMILES="CC(CO)(COO)O[O]")]),
 'ic4h7oh-3ooh-3': Species(label="ic4h7oh-3ooh-3", molecule=[Molecule(SMILES="[CH2]C(CO)COO")]),
 'ic4h7oh-3ooh-3o2': Species(label="ic4h7oh-3ooh-3o2", molecule=[Molecule(SMILES="[O]OCC(CO)COO")]),
 'ic4h7oho1-2': Species(label="ic4h7oho1-2", molecule=[Molecule(SMILES="CC1(C)OC1O")]),
 'ic4h7oho1-3': Species(label="ic4h7oho1-3", molecule=[Molecule(SMILES="CC1COC1O")]),
 'ic4h7oho2-3': Species(label="ic4h7oho2-3", molecule=[Molecule(SMILES="CC1(CO)CO1")]),
 'ic4h7oho3-3': Species(label="ic4h7oho3-3", molecule=[Molecule(SMILES="OCC1COC1")]),
 'ic4h7ooh': Species(label="ic4h7ooh", molecule=[Molecule(SMILES="C=C(C)COO")]),
 'ic4h8': Species(label="ic4h8", molecule=[Molecule(SMILES="C=C(C)C")]),
 'ic4h8o': Species(label="ic4h8o", molecule=[Molecule(SMILES="[CH2]C(C)C[O]")]),
 'ic4h8o2h-i': Species(label="ic4h8o2h-i", molecule=[Molecule(SMILES="[CH2]C(C)COO")]),
 'ic4h8o2h-t': Species(label="ic4h8o2h-t", molecule=[Molecule(SMILES="C[C](C)COO")]),
 'ic4h8oh': Species(label="ic4h8oh", molecule=[Molecule(SMILES="C[C](C)CO")]),
 'ic4h8oh-1': Species(label="ic4h8oh-1", molecule=[Molecule(SMILES="CC(C)[CH]O")]),
 'ic4h8oh-1o': Species(label="ic4h8oh-1o", molecule=[Molecule(SMILES="CC(C)C([O])O")]),
 'ic4h8oh-1o2': Species(label="ic4h8oh-1o2", molecule=[Molecule(SMILES="CC(C)C(O)O[O]")]),
 'ic4h8oh-1o2h': Species(label="ic4h8oh-1o2h", molecule=[Molecule(SMILES="CC(C)C(O)OO")]),
 'ic4h8oh-2': Species(label="ic4h8oh-2", molecule=[Molecule(SMILES="C[C](C)CO")]),
 'ic4h8oh-2o': Species(label="ic4h8oh-2o", molecule=[Molecule(SMILES="CC(C)([O])CO")]),
 'ic4h8oh-2o2': Species(label="ic4h8oh-2o2", molecule=[Molecule(SMILES="CC(C)(CO)O[O]")]),
 'ic4h8oh-2o2h': Species(label="ic4h8oh-2o2h", molecule=[Molecule(SMILES="CC(C)(CO)OO")]),
 'ic4h8oh-3': Species(label="ic4h8oh-3", molecule=[Molecule(SMILES="[CH2]C(C)CO")]),
 'ic4h8oh-3o': Species(label="ic4h8oh-3o", molecule=[Molecule(SMILES="CC(C[O])CO")]),
 'ic4h8oh-3o2': Species(label="ic4h8oh-3o2", molecule=[Molecule(SMILES="CC(CO)CO[O]")]),
 'ic4h8oh-3o2h': Species(label="ic4h8oh-3o2h", molecule=[Molecule(SMILES="CC(CO)COO")]),
 'ic4h8ooh-io2': Species(label="ic4h8ooh-io2", molecule=[Molecule(SMILES="CC(CO[O])COO")]),
 'ic4h8ooh-to2': Species(label="ic4h8ooh-to2", molecule=[Molecule(SMILES="CC(C)(COO)O[O]")]),
 'ic4h9': Species(label="ic4h9", molecule=[Molecule(SMILES="[CH2]C(C)C")]),
 'ic4h9o': Species(label="ic4h9o", molecule=[Molecule(SMILES="CC(C)C[O]")]),
 'ic4h9o2': Species(label="ic4h9o2", molecule=[Molecule(SMILES="CC(C)CO[O]")]),
 'ic4h9o2h': Species(label="ic4h9o2h", molecule=[Molecule(SMILES="CC(C)COO")]),
 'ic4h9oh': Species(label="ic4h9oh", molecule=[Molecule(SMILES="CC(C)CO")]),
 'ic4ketii': Species(label="ic4ketii", molecule=[Molecule(SMILES="CC(C=O)COO")]),
 'ic4ketit': Species(label="ic4ketit", molecule=[Molecule(SMILES="CC(C)(C=O)OO")]),
 'ic4ohket1-2': Species(label="ic4ohket1-2", molecule=[Molecule(SMILES="CC(C)(OO)C(=O)O")]),
 'ic4ohket1-3': Species(label="ic4ohket1-3", molecule=[Molecule(SMILES="CC(COO)C(=O)O")]),
 'ic4ohket3-1': Species(label="ic4ohket3-1", molecule=[Molecule(SMILES="CC(C=O)C(O)OO")]),
 'ic4ohket3-2': Species(label="ic4ohket3-2", molecule=[Molecule(SMILES="CC(C=O)(CO)OO")]),
 'ic4ohket3-3': Species(label="ic4ohket3-3", molecule=[Molecule(SMILES="O=CC(CO)COO")]),
 'iic4h7q2-i': Species(label="iic4h7q2-i", molecule=[Molecule(SMILES="[CH2]C(COO)COO")]),
 'iic4h7q2-t': Species(label="iic4h7q2-t", molecule=[Molecule(SMILES="C[C](COO)COO")]),
 'n2': Species(label="n2", molecule=[Molecule(SMILES="N#N")]),
 'nc3h7': Species(label="nc3h7", molecule=[Molecule(SMILES="[CH2]CC")]),
 'nc3h7cho': Species(label="nc3h7cho", molecule=[Molecule(SMILES="CCCC=O")]),
 'nc3h7co': Species(label="nc3h7co", molecule=[Molecule(SMILES="CCC[C]=O")]),
 'nc3h7o': Species(label="nc3h7o", molecule=[Molecule(SMILES="CCC[O]")]),
 'nc3h7o2': Species(label="nc3h7o2", molecule=[Molecule(SMILES="CCCO[O]")]),
 'nc3h7o2h': Species(label="nc3h7o2h", molecule=[Molecule(SMILES="CCCOO")]),
 'nc4h9oh': Species(label="nc4h9oh", molecule=[Molecule(SMILES="CCCCO")]),
 'nc4ket12': Species(label="nc4ket12", molecule=[Molecule(SMILES="CCC(C=O)OO")]),
 'nc4ket13': Species(label="nc4ket13", molecule=[Molecule(SMILES="CC(CC=O)OO")]),
 'nc4ket14': Species(label="nc4ket14", molecule=[Molecule(SMILES="O=CCCCOO")]),
 'nc4ket21': Species(label="nc4ket21", molecule=[Molecule(SMILES="CCC(=O)COO")]),
 'nc4ket23': Species(label="nc4ket23", molecule=[Molecule(SMILES="CC(=O)C(C)OO")]),
 'nc4ket24': Species(label="nc4ket24", molecule=[Molecule(SMILES="CC(=O)CCOO")]),
 'o': Species(label="o", molecule=[Molecule(SMILES="[O]")]),
 'o2': Species(label="o2", molecule=[Molecule(SMILES="[O][O]")]),
 'o2c2h4oh': Species(label="o2c2h4oh", molecule=[Molecule(SMILES="[O]OCCO")]),
 'o2c4h8cho': Species(label="o2c4h8cho", molecule=[Molecule(SMILES="CC(C)(C=O)CO[O]")]),
 'o2ch2cho': Species(label="o2ch2cho", molecule=[Molecule(SMILES="[O]OCC=O")]),
 'o2ch2och2o2h': Species(label="o2ch2och2o2h", molecule=[Molecule(SMILES="[O]OCOCOO")]),
 'o2cho': Species(label="o2cho", molecule=[Molecule(SMILES="[O]OC=O")]),
 'o2hc4h8co': Species(label="o2hc4h8co", molecule=[Molecule(SMILES="CC(C)([C]=O)COO")]),
 'och2o2h': Species(label="och2o2h", molecule=[Molecule(SMILES="[O]COO")]),
 'och2ocho': Species(label="och2ocho", molecule=[Molecule(SMILES="[O]COC=O")]),
 'ocho': Species(label="ocho", molecule=[Molecule(SMILES="[O]C=O"), Molecule(SMILES="[O]C=O")]),
 'oh': Species(label="oh", molecule=[Molecule(SMILES="[OH]")]),
 'oh*': Species(label="oh*", molecule=[Molecule(SMILES="[OH]")]),
 'pc2h4oh': Species(label="pc2h4oh", molecule=[Molecule(SMILES="[CH2]CO")]),
 'pc4h9': Species(label="pc4h9", molecule=[Molecule(SMILES="[CH2]CCC")]),
 'pc4h9o': Species(label="pc4h9o", molecule=[Molecule(SMILES="CCCC[O]")]),
 'pc4h9o2': Species(label="pc4h9o2", molecule=[Molecule(SMILES="CCCCO[O]")]),
 'pc4h9o2h': Species(label="pc4h9o2h", molecule=[Molecule(SMILES="CCCCOO")]),
 'sc2h4oh': Species(label="sc2h4oh", molecule=[Molecule(SMILES="C[CH]O")]),
 'sc3h5cho': Species(label="sc3h5cho", molecule=[Molecule(SMILES="CC=CC=O")]),
 'sc3h5co': Species(label="sc3h5co", molecule=[Molecule(SMILES="CC=C[C]=O"), Molecule(SMILES="C[CH]C=C=O")]),
 'sc4h7oh-1ooh-2': Species(label="sc4h7oh-1ooh-2", molecule=[Molecule(SMILES="C[CH]C(C)(O)OO")]),
 'sc4h7oh-1ooh-2o2': Species(label="sc4h7oh-1ooh-2o2", molecule=[Molecule(SMILES="CC(O[O])C(C)(O)OO")]),
 'sc4h7oh-1ooh-3': Species(label="sc4h7oh-1ooh-3", molecule=[Molecule(SMILES="[CH2]CC(C)(O)OO")]),
 'sc4h7oh-1ooh-3o2': Species(label="sc4h7oh-1ooh-3o2", molecule=[Molecule(SMILES="CC(O)(CCO[O])OO")]),
 'sc4h7oh-1ooh-m': Species(label="sc4h7oh-1ooh-m", molecule=[Molecule(SMILES="[CH2]C(O)(CC)OO")]),
 'sc4h7oh-1ooh-mo2': Species(label="sc4h7oh-1ooh-mo2", molecule=[Molecule(SMILES="CCC(O)(CO[O])OO")]),
 'sc4h7oh-2ooh-1': Species(label="sc4h7oh-2ooh-1", molecule=[Molecule(SMILES="C[C](O)C(C)OO")]),
 'sc4h7oh-2ooh-1o2': Species(label="sc4h7oh-2ooh-1o2", molecule=[Molecule(SMILES="CC(OO)C(C)(O)O[O]")]),
 'sc4h7oh-2ooh-3': Species(label="sc4h7oh-2ooh-3", molecule=[Molecule(SMILES="[CH2]C(OO)C(C)O")]),
 'sc4h7oh-2ooh-3o2': Species(label="sc4h7oh-2ooh-3o2", molecule=[Molecule(SMILES="CC(O)C(CO[O])OO")]),
 'sc4h7oh-2ooh-m': Species(label="sc4h7oh-2ooh-m", molecule=[Molecule(SMILES="[CH2]C(O)C(C)OO")]),
 'sc4h7oh-2ooh-mo2': Species(label="sc4h7oh-2ooh-mo2", molecule=[Molecule(SMILES="CC(OO)C(O)CO[O]")]),
 'sc4h7oh-3ooh-1': Species(label="sc4h7oh-3ooh-1", molecule=[Molecule(SMILES="C[C](O)CCOO")]),
 'sc4h7oh-3ooh-1o2': Species(label="sc4h7oh-3ooh-1o2", molecule=[Molecule(SMILES="CC(O)(CCOO)O[O]")]),
 'sc4h7oh-3ooh-2': Species(label="sc4h7oh-3ooh-2", molecule=[Molecule(SMILES="CC(O)[CH]COO")]),
 'sc4h7oh-3ooh-2o2': Species(label="sc4h7oh-3ooh-2o2", molecule=[Molecule(SMILES="CC(O)C(COO)O[O]")]),
 'sc4h7oh-3ooh-m': Species(label="sc4h7oh-3ooh-m", molecule=[Molecule(SMILES="[CH2]C(O)CCOO")]),
 'sc4h7oh-3ooh-mo2': Species(label="sc4h7oh-3ooh-mo2", molecule=[Molecule(SMILES="[O]OCC(O)CCOO")]),
 'sc4h7oh-mooh-1': Species(label="sc4h7oh-mooh-1", molecule=[Molecule(SMILES="CC[C](O)COO")]),
 'sc4h7oh-mooh-1o2': Species(label="sc4h7oh-mooh-1o2", molecule=[Molecule(SMILES="CCC(O)(COO)O[O]")]),
 'sc4h7oh-mooh-2': Species(label="sc4h7oh-mooh-2", molecule=[Molecule(SMILES="C[CH]C(O)COO")]),
 'sc4h7oh-mooh-2o2': Species(label="sc4h7oh-mooh-2o2", molecule=[Molecule(SMILES="CC(O[O])C(O)COO")]),
 'sc4h7oh-mooh-3': Species(label="sc4h7oh-mooh-3", molecule=[Molecule(SMILES="[CH2]CC(O)COO")]),
 'sc4h7oh-mooh-3o2': Species(label="sc4h7oh-mooh-3o2", molecule=[Molecule(SMILES="[O]OCCC(O)COO")]),
 'sc4h7oho1-2': Species(label="sc4h7oho1-2", molecule=[Molecule(SMILES="CC1OC1(C)O")]),
 'sc4h7oho1-3': Species(label="sc4h7oho1-3", molecule=[Molecule(SMILES="CC1OC1(C)O")]),
 'sc4h7oho1-m': Species(label="sc4h7oho1-m", molecule=[Molecule(SMILES="CCC1(O)CO1")]),
 'sc4h7oho2-3': Species(label="sc4h7oho2-3", molecule=[Molecule(SMILES="CC(O)C1CO1")]),
 'sc4h7oho2-m': Species(label="sc4h7oho2-m", molecule=[Molecule(SMILES="CC1OCC1O")]),
 'sc4h7oho3-m': Species(label="sc4h7oho3-m", molecule=[Molecule(SMILES="OC1CCOC1")]),
 'sc4h8oh-1': Species(label="sc4h8oh-1", molecule=[Molecule(SMILES="CC[C](C)O")]),
 'sc4h8oh-1o': Species(label="sc4h8oh-1o", molecule=[Molecule(SMILES="CCC(C)([O])O")]),
 'sc4h8oh-1o2': Species(label="sc4h8oh-1o2", molecule=[Molecule(SMILES="CCC(C)(O)O[O]")]),
 'sc4h8oh-1o2h': Species(label="sc4h8oh-1o2h", molecule=[Molecule(SMILES="CCC(C)(O)OO")]),
 'sc4h8oh-2': Species(label="sc4h8oh-2", molecule=[Molecule(SMILES="C[CH]C(C)O")]),
 'sc4h8oh-2o': Species(label="sc4h8oh-2o", molecule=[Molecule(SMILES="CC([O])C(C)O")]),
 'sc4h8oh-2o2': Species(label="sc4h8oh-2o2", molecule=[Molecule(SMILES="CC(O)C(C)O[O]")]),
 'sc4h8oh-2o2h': Species(label="sc4h8oh-2o2h", molecule=[Molecule(SMILES="CC(O)C(C)OO")]),
 'sc4h8oh-3': Species(label="sc4h8oh-3", molecule=[Molecule(SMILES="[CH2]CC(C)O")]),
 'sc4h8oh-3o': Species(label="sc4h8oh-3o", molecule=[Molecule(SMILES="CC(O)CC[O]")]),
 'sc4h8oh-3o2': Species(label="sc4h8oh-3o2", molecule=[Molecule(SMILES="CC(O)CCO[O]")]),
 'sc4h8oh-3o2h': Species(label="sc4h8oh-3o2h", molecule=[Molecule(SMILES="CC(O)CCOO")]),
 'sc4h8oh-mo': Species(label="sc4h8oh-mo", molecule=[Molecule(SMILES="CCC(O)C[O]")]),
 'sc4h8oh-mo2': Species(label="sc4h8oh-mo2", molecule=[Molecule(SMILES="CCC(O)CO[O]")]),
 'sc4h8oh-mo2h': Species(label="sc4h8oh-mo2h", molecule=[Molecule(SMILES="CCC(O)COO")]),
 'sc4h8ohm': Species(label="sc4h8ohm", molecule=[Molecule(SMILES="[CH2]C(O)CC")]),
 'sc4h9': Species(label="sc4h9", molecule=[Molecule(SMILES="C[CH]CC")]),
 'sc4h9o': Species(label="sc4h9o", molecule=[Molecule(SMILES="CCC(C)[O]")]),
 'sc4h9o2': Species(label="sc4h9o2", molecule=[Molecule(SMILES="CCC(C)O[O]")]),
 'sc4h9o2h': Species(label="sc4h9o2h", molecule=[Molecule(SMILES="CCC(C)OO")]),
 'sc4h9oh': Species(label="sc4h9oh", molecule=[Molecule(SMILES="CCC(C)O")]),
 'sc4ohket2-1': Species(label="sc4ohket2-1", molecule=[Molecule(SMILES="CC(=O)C(C)(O)OO")]),
 'sc4ohket2-3': Species(label="sc4ohket2-3", molecule=[Molecule(SMILES="CC(O)C(=O)COO")]),
 'sc4ohket2-m': Species(label="sc4ohket2-m", molecule=[Molecule(SMILES="CC(=O)C(O)COO")]),
 'sc4ohket3-1': Species(label="sc4ohket3-1", molecule=[Molecule(SMILES="CC(O)C(C=O)OO")]),
 'sc4ohket3-2': Species(label="sc4ohket3-2", molecule=[Molecule(SMILES="CC(O)(CC=O)OO")]),
 'sc4ohket3-m': Species(label="sc4ohket3-m", molecule=[Molecule(SMILES="O=CCC(O)COO")]),
 'sc4ohketm-1': Species(label="sc4ohketm-1", molecule=[Molecule(SMILES="CCC(O)(C=O)OO")]),
 'sc4ohketm-2': Species(label="sc4ohketm-2", molecule=[Molecule(SMILES="CCC(O)(C=O)OO")]),
 'sc4ohketm-3': Species(label="sc4ohketm-3", molecule=[Molecule(SMILES="O=CC(O)CCOO")]),
 'tc3h6cho': Species(label="tc3h6cho", molecule=[Molecule(SMILES="C[C](C)C=O"), Molecule(SMILES="CC(C)=C[O]")]),
 'tc3h6o2cho': Species(label="tc3h6o2cho", molecule=[Molecule(SMILES="CC(C)(C=O)O[O]")]),
 'tc3h6o2hco': Species(label="tc3h6o2hco", molecule=[Molecule(SMILES="CC(C)([C]=O)OO")]),
 'tc3h6ocho': Species(label="tc3h6ocho", molecule=[Molecule(SMILES="CC(C)([O])C=O")]),
 'tc3h6oh': Species(label="tc3h6oh", molecule=[Molecule(SMILES="C[C](C)O")]),
 'tc3h6ohcho': Species(label="tc3h6ohcho", molecule=[Molecule(SMILES="CC(C)(O)C=O")]),
 'tc4h7oh-ooh': Species(label="tc4h7oh-ooh", molecule=[Molecule(SMILES="[CH2]C(C)(O)COO")]),
 'tc4h7oh-ooh-o2': Species(label="tc4h7oh-ooh-o2", molecule=[Molecule(SMILES="CC(O)(CO[O])COO")]),
 'tc4h7oho': Species(label="tc4h7oho", molecule=[Molecule(SMILES="CC1(O)COC1")]),
 'tc4h8cho': Species(label="tc4h8cho", molecule=[Molecule(SMILES="[CH2]C(C)(C)C=O")]),
 'tc4h8o2h-i': Species(label="tc4h8o2h-i", molecule=[Molecule(SMILES="[CH2]C(C)(C)OO")]),
 'tc4h8oh': Species(label="tc4h8oh", molecule=[Molecule(SMILES="[CH2]C(C)(C)O")]),
 'tc4h8oh-o': Species(label="tc4h8oh-o", molecule=[Molecule(SMILES="CC(C)(O)C[O]")]),
 'tc4h8oh-o2': Species(label="tc4h8oh-o2", molecule=[Molecule(SMILES="CC(C)(O)CO[O]")]),
 'tc4h8oh-o2h': Species(label="tc4h8oh-o2h", molecule=[Molecule(SMILES="CC(C)(O)COO")]),
 'tc4h8ooh-io2': Species(label="tc4h8ooh-io2", molecule=[Molecule(SMILES="CC(C)(CO[O])OO")]),
 'tc4h9': Species(label="tc4h9", molecule=[Molecule(SMILES="C[C](C)C")]),
 'tc4h9o': Species(label="tc4h9o", molecule=[Molecule(SMILES="CC(C)(C)[O]")]),
 'tc4h9o2': Species(label="tc4h9o2", molecule=[Molecule(SMILES="CC(C)(C)O[O]")]),
 'tc4h9o2h': Species(label="tc4h9o2h", molecule=[Molecule(SMILES="CC(C)(C)OO")]),
 'tc4h9oh': Species(label="tc4h9oh", molecule=[Molecule(SMILES="CC(C)(C)O")]),
 'tc4ohket': Species(label="tc4ohket", molecule=[Molecule(SMILES="CC(O)(C=O)COO")]),
 'tic4h7q2-i': Species(label="tic4h7q2-i", molecule=[Molecule(SMILES="[CH2]C(C)(COO)OO")])}
In [7]:
speciesList = species_dict.values()
len(speciesList)
Out[7]:
426
In [8]:
print "These species have not been identified:"
rs = [str(r).split() for r in parser.reactions]
for s in parser.speciesList:
    if s.label not in species_dict:
        print s.label,
        print "which participates in {} reactions".format(sum([s.label in r for r in rs]))
These species have not been identified:
he which participates in 0 reactions
pc4h8oh which participates in 0 reactions
sc4h8oh which participates in 0 reactions
io2c4h8oh which participates in 0 reactions
tc4h8o-ooh which participates in 0 reactions
In [9]:
def is_unimolecular_dissociation(cti_reaction):
    "One reactant and two products"
    return ( sum([nu for nu,spec in cti_reaction.reactants]) == 1 
           and sum([nu for nu,spec in cti_reaction.products]) == 2)
def is_bimolecular_recombination(cti_reaction):
    "Two reactants and one product"
    return ( sum([nu for nu,spec in cti_reaction.reactants]) == 2 
           and sum([nu for nu,spec in cti_reaction.products]) == 1)

def get_rmg_species(cti_species):
    "get the RMG species corresponding to the cti parser species"
    return species_dict[cti_species.label]

def is_radical_recombination(r):
    if not is_bimolecular_recombination(r): return False
    if r.reactants[0][0] == 2:
        if not get_rmg_species(r.reactants[0][1]).isRadical(): return False
        
def is_homolytic_fission(r):
    "reverse is radical recombination"
    raise NotImplementedError

# Test it out
for r in parser.reactions:
    print r
    print r.reactants
    print r.products
    print r.kinetics
    if is_unimolecular_dissociation(r): break
    if is_radical_recombination(r): break
h + o2 <=> o + oh
[(1, <cantera.ck2cti.Species object at 0x102635c10>), (1, <cantera.ck2cti.Species object at 0x102643790>)]
[(1, <cantera.ck2cti.Species object at 0x102635e10>), (1, <cantera.ck2cti.Species object at 0x102643810>)]
<cantera.ck2cti.Arrhenius object at 0x11058c990>
o + h2 <=> h + oh
[(1, <cantera.ck2cti.Species object at 0x102635e10>), (1, <cantera.ck2cti.Species object at 0x102635e50>)]
[(1, <cantera.ck2cti.Species object at 0x102635c10>), (1, <cantera.ck2cti.Species object at 0x102643810>)]
<cantera.ck2cti.Arrhenius object at 0x11058cc10>
oh + h2 <=> h + h2o
[(1, <cantera.ck2cti.Species object at 0x102643810>), (1, <cantera.ck2cti.Species object at 0x102635e50>)]
[(1, <cantera.ck2cti.Species object at 0x102635c10>), (1, <cantera.ck2cti.Species object at 0x102643950>)]
<cantera.ck2cti.Arrhenius object at 0x11058cc90>
o + h2o <=> oh + oh
[(1, <cantera.ck2cti.Species object at 0x102635e10>), (1, <cantera.ck2cti.Species object at 0x102643950>)]
[(1, <cantera.ck2cti.Species object at 0x102643810>), (1, <cantera.ck2cti.Species object at 0x102643810>)]
<cantera.ck2cti.Arrhenius object at 0x11058cd10>
h2 <=> h + h
[(1, <cantera.ck2cti.Species object at 0x102635e50>)]
[(1, <cantera.ck2cti.Species object at 0x102635c10>), (1, <cantera.ck2cti.Species object at 0x102635c10>)]
<cantera.ck2cti.ThirdBody object at 0x11058cdd0>
In [10]:
rxnFamilies = ['R_Recombination']  # Only looking at R_Recombination
rmgDatabase = RMGDatabase()
databasePath = os.path.abspath(os.path.join(os.getenv('RMGpy', '..'), '..', 'RMG-database', 'input'))
print(databasePath)
rmgDatabase.load(databasePath,
                 kineticsFamilies=rxnFamilies,
                 transportLibraries=[],
                 reactionLibraries=[],
                 seedMechanisms=[],
                 thermoLibraries=['primaryThermoLibrary', 'BurkeH2O2', 'thermo_DFT_CCSDTF12_BAC', 'CBS_QB3_1dHR' ],
                 solvation=False,
                )
INFO:root:Loading thermodynamics library from primaryThermoLibrary.py in /Users/rwest/Code/RMG-database/input/thermo/libraries...
INFO:root:Loading thermodynamics library from BurkeH2O2.py in /Users/rwest/Code/RMG-database/input/thermo/libraries...
INFO:root:Loading thermodynamics library from thermo_DFT_CCSDTF12_BAC.py in /Users/rwest/Code/RMG-database/input/thermo/libraries...
/Users/rwest/Code/RMG-database/input
INFO:root:Loading thermodynamics library from CBS_QB3_1dHR.py in /Users/rwest/Code/RMG-database/input/thermo/libraries...
INFO:root:Loading thermodynamics group database from /Users/rwest/Code/RMG-database/input/thermo/groups...
INFO:root:Loading transport group database from /Users/rwest/Code/RMG-database/input/transport/groups...
INFO:root:Loading the user-specified kinetics families from /Users/rwest/Code/RMG-database/input/kinetics/families
INFO:root:Loading frequencies group database from /Users/rwest/Code/RMG-database/input/statmech/groups...
In [11]:
str(r)
Out[11]:
'h2 <=> h + h'
In [12]:
def expand_reagent_list(cti_reagent_list):
    """
    Expand a list of tuples like
    [(2,'A'),(1,'B'),(1,'B')]
    (which is how cantera reactions have their reactants and products)
    into a straightforward list like
    ['A', 'A', 'B', 'B']
    """
    # cti_reagent_list = [(2,'A'),(1,'B'),(1,'B')]
    reagents=[]
    for nu,species in cti_reagent_list:
        reagents.extend([species]*nu)
    return reagents
In [13]:
# Generate resonance isomers
print "These species have more than one resonance isomer:"
for species in speciesList:
    species.generateResonanceIsomers()
    if len(species.molecule)>1:
        print(species.label, species.molecule)
These species have more than one resonance isomer:
('ch3chchco', [Molecule(SMILES="CC=C[C]=O"), Molecule(SMILES="C[CH]C=C=O")])
('ocho', [Molecule(SMILES="[O]C=O"), Molecule(SMILES="[O]C=O")])
('sc3h5co', [Molecule(SMILES="CC=C[C]=O"), Molecule(SMILES="C[CH]C=C=O")])
('hcco', [Molecule(SMILES="C#C[O]"), Molecule(SMILES="[CH]=C=O")])
('c4h5-2', [Molecule(SMILES="C=C=[C]C"), Molecule(SMILES="[CH2]C#CC")])
('c4h5-i', [Molecule(SMILES="C=[C]C=C"), Molecule(SMILES="[CH2]C=C=C")])
('ic4h7', [Molecule(SMILES="[CH2]C(=C)C"), Molecule(SMILES="[CH2]C(=C)C")])
('c4h3-i', [Molecule(SMILES="C#C[C]=C"), Molecule(SMILES="[CH]=C=C=C")])
('c2h3co', [Molecule(SMILES="C=C[C]=O"), Molecule(SMILES="[CH2]C=C=O")])
('c2h3choch2', [Molecule(SMILES="[CH2]C=CO[CH2]"), Molecule(SMILES="[CH2]O[CH]C=C")])
('ch3co2', [Molecule(SMILES="CC([O])=O"), Molecule(SMILES="CC([O])=O")])
('c4h71-3', [Molecule(SMILES="C=C[CH]C"), Molecule(SMILES="[CH2]C=CC")])
('ic4h6oh', [Molecule(SMILES="[CH2]C(=C)CO"), Molecule(SMILES="[CH2]C(=C)CO")])
('c3h5-a', [Molecule(SMILES="[CH2]C=C"), Molecule(SMILES="[CH2]C=C")])
('ch2cho', [Molecule(SMILES="C=C[O]"), Molecule(SMILES="[CH2]C=O")])
('c2h5coch2', [Molecule(SMILES="[CH2]C(=O)CC"), Molecule(SMILES="C=C([O])CC")])
('c4h6oh1-32', [Molecule(SMILES="C=C(O)[CH]C"), Molecule(SMILES="[CH2]C(O)=CC")])
('c3h6cho-3', [Molecule(SMILES="CC[CH]C=O"), Molecule(SMILES="CCC=C[O]")])
('c3h3', [Molecule(SMILES="C#C[CH2]"), Molecule(SMILES="[CH]=C=C")])
('ch3coch2', [Molecule(SMILES="[CH2]C(C)=O"), Molecule(SMILES="C=C(C)[O]")])
('ch2chchcho', [Molecule(SMILES="[CH2]C=CC=O"), Molecule(SMILES="C=C[CH]C=O"), Molecule(SMILES="C=CC=C[O]")])
('ch3chcoch3', [Molecule(SMILES="CC=C(C)[O]"), Molecule(SMILES="C[CH]C(C)=O")])
('c4h6oh1-13', [Molecule(SMILES="CC=C[CH]O"), Molecule(SMILES="C[CH]C=CO")])
('ic3h5co', [Molecule(SMILES="C=C(C)[C]=O"), Molecule(SMILES="[CH2]C(C)=C=O")])
('tc3h6cho', [Molecule(SMILES="C[C](C)C=O"), Molecule(SMILES="CC(C)=C[O]")])
In [14]:
print r
expand_reagent_list(r.products)
h2 <=> h + h
Out[14]:
[<cantera.ck2cti.Species at 0x102635c10>,
 <cantera.ck2cti.Species at 0x102635c10>]
In [15]:
def make_rmg_reaction(cti_reaction):
    """
    Make an RMG reaction from the cantera reaction.
    Reactant and species lists are Species, not Molecules.
    """
    return rmgpy.reaction.Reaction(reactants=[get_rmg_species(s) for s in expand_reagent_list(r.reactants)],
             products=[get_rmg_species(s) for s in expand_reagent_list(r.products)],
             reversible=True)
make_rmg_reaction(r)
Out[15]:

RMG normally doesn't store the atom labels once it has generated the reaction (and determined what nodes in the kinetics tree it will use), so it needs modifying to make it do so. Furthermore, because we're interested in the labels on the "product" structure (of a radical recombination reaction), these were not stored at all, previously. So RMG needs to be edited. Rather than require users of this notebook to get and compile a separate fork of RMG, we will instead monkey-patch it. Unfortunately this involves replacing a rather long and private method rmgpy.data.kinetics.family.KineticsFamily.__generateReactions. Fortunately in Python, "private" just means "harder to modify by mistake", and we can still modify it with a bit of name mangling. Most of the following cell is copied from RMG source code. To see the changes, refer to the git history of this repository.

In [16]:
def storeLabeledProductAtoms(reaction):
    """
    Store the labeled product atoms on the reaction so we can recover them later
    """
    labeledProductAtoms = []
    for product in reaction.products:
        for label, atom in product.getLabeledAtoms().items():
            labeledProductAtoms.append((label, atom))
    reaction.labeledProductAtoms = labeledProductAtoms
        
def __generateReactions(self, reactants, products=None, forward=True):
        from rmgpy.data.base import ForbiddenStructureException
        """
        Generate a list of all of the possible reactions of this family between
        the list of `reactants`. The number of reactants provided must match
        the number of reactants expected by the template, or this function
        will return an empty list. Each item in the list of reactants should
        be a list of :class:`Molecule` objects, each representing a resonance
        isomer of the species of interest.
        """

        rxnList = []; speciesList = []

        # Wrap each reactant in a list if not already done (this is done to 
        # allow for passing multiple resonance structures for each molecule)
        # This also makes a copy of the reactants list so we don't modify the
        # original
        reactants = [reactant if isinstance(reactant, list) else [reactant] for reactant in reactants]

                    
        if forward:
            template = self.forwardTemplate
        elif self.reverseTemplate is None:
            return []
        else:
            template = self.reverseTemplate

        # Unimolecular reactants: A --> products
        if len(reactants) == 1 and len(template.reactants) == 1:

            # Iterate over all resonance isomers of the reactant
            for molecule in reactants[0]:

                mappings = self._KineticsFamily__matchReactantToTemplate(molecule, template.reactants[0])
                for map in mappings:
                    reactantStructures = [molecule]
                    try:
                        productStructures = self._KineticsFamily__generateProductStructures(reactantStructures, [map], forward)
                    except ForbiddenStructureException:
                        pass
                    else:
                        if productStructures is not None:
                            rxn = self._KineticsFamily__createReaction(reactantStructures, productStructures, forward)
                            if rxn:
                                storeLabeledProductAtoms(rxn)
                                rxnList.append(rxn)

        # Bimolecular reactants: A + B --> products
        elif len(reactants) == 2 and len(template.reactants) == 2:

            moleculesA = reactants[0]
            moleculesB = reactants[1]

            # Iterate over all resonance isomers of the reactant
            for moleculeA in moleculesA:
                for moleculeB in moleculesB:

                    # Reactants stored as A + B
                    mappingsA = self._KineticsFamily__matchReactantToTemplate(moleculeA, template.reactants[0])
                    mappingsB = self._KineticsFamily__matchReactantToTemplate(moleculeB, template.reactants[1])

                    # Iterate over each pair of matches (A, B)
                    for mapA in mappingsA:
                        for mapB in mappingsB:
                            reactantStructures = [moleculeA, moleculeB]
                            try:
                                productStructures = self._KineticsFamily__generateProductStructures(reactantStructures, [mapA, mapB], forward)
                            except ForbiddenStructureException:
                                pass
                            else:
                                if productStructures is not None:
                                    rxn = self._KineticsFamily__createReaction(reactantStructures, productStructures, forward)
                                    if rxn:
                                        storeLabeledProductAtoms(rxn)
                                        rxnList.append(rxn)

                    # Only check for swapped reactants if they are different
                    if reactants[0] is not reactants[1]:

                        # Reactants stored as B + A
                        mappingsA = self._KineticsFamily__matchReactantToTemplate(moleculeA, template.reactants[1])
                        mappingsB = self._KineticsFamily__matchReactantToTemplate(moleculeB, template.reactants[0])

                        # Iterate over each pair of matches (A, B)
                        for mapA in mappingsA:
                            for mapB in mappingsB:
                                reactantStructures = [moleculeA, moleculeB]
                                try:
                                    productStructures = self._KineticsFamily__generateProductStructures(reactantStructures, [mapA, mapB], forward)
                                except ForbiddenStructureException:
                                    pass
                                else:
                                    if productStructures is not None:
                                        rxn = self._KineticsFamily__createReaction(reactantStructures, productStructures, forward)
                                        if rxn: 
                                            storeLabeledProductAtoms(rxn)
                                            rxnList.append(rxn)
        # If products is given, remove reactions from the reaction list that
        # don't generate the given products
        if products is not None:
 
            products = [product.generateResonanceIsomers() for product in products]
            
            rxnList0 = rxnList[:]
            rxnList = []
            index = 0
            for reaction in rxnList0:
            
                products0 = reaction.products if forward else reaction.reactants
                    
                # Skip reactions that don't match the given products
                match = False

                if len(products) == len(products0) == 1:
                    for product in products[0]:
                        if products0[0].isIsomorphic(product):
                            match = True
                            break
                elif len(products) == len(products0) == 2:
                    for productA in products[0]:
                        for productB in products[1]:
                            if products0[0].isIsomorphic(productA) and products0[1].isIsomorphic(productB):
                                match = True
                                break
                            elif products0[0].isIsomorphic(productB) and products0[1].isIsomorphic(productA):
                                match = True
                                break
                elif len(products) == len(products0):
                    raise NotImplementedError("Can't yet filter reactions with {} products".format(len(products)))
                    
                if match: 
                    rxnList.append(reaction)

        
        
        # The reaction list may contain duplicates of the same reaction
        # These duplicates should be combined (by increasing the degeneracy of
        # one of the copies and removing the others)
        index0 = 0
        while index0 < len(rxnList):
            reaction0 = rxnList[index0]
            
            products0 = reaction0.products if forward else reaction0.reactants
            products0 = [product.generateResonanceIsomers() for product in products0]
            
            # Remove duplicates from the reaction list
            index = index0 + 1
            while index < len(rxnList):
                reaction = rxnList[index]
            
                products = reaction.products if forward else reaction.reactants
                
                # We know the reactants are the same, so we only need to compare the products
                match = False
                if len(products) == len(products0) == 1:
                    for product in products0[0]: # for each resonance isomer of the only product0
                        if products[0].isIsomorphic(product):
                            match = True
                            break
                elif len(products) == len(products0) == 2:
                    for productA in products0[0]:
                        for productB in products0[1]:
                            if products[0].isIsomorphic(productA) and products[1].isIsomorphic(productB):
                                match = True
                                break
                            elif products[0].isIsomorphic(productB) and products[1].isIsomorphic(productA):
                                match = True
                                break
                elif len(products) == len(products0) == 3:
                    for productA, productB, productC in itertools.product(products0[0], products0[1], products0[2]):
                    # This is equivalent to three nested for loops,
                    # but allows us to break out of them all at once
                    # with a single break statement.
                        if (    products[0].isIsomorphic(productA) and
                                products[1].isIsomorphic(productB) and
                                products[2].isIsomorphic(productC) ):
                            match = True
                            break
                        elif (  products[0].isIsomorphic(productA) and
                                products[1].isIsomorphic(productC) and
                                products[2].isIsomorphic(productB) ):
                            match = True
                            break
                        elif (  products[0].isIsomorphic(productB) and
                                products[1].isIsomorphic(productA) and
                                products[2].isIsomorphic(productC) ):
                            match = True
                            break
                        elif (  products[0].isIsomorphic(productC) and
                                products[1].isIsomorphic(productA) and
                                products[2].isIsomorphic(productB) ):
                            match = True
                            break
                        elif (  products[0].isIsomorphic(productB) and
                                products[1].isIsomorphic(productC) and
                                products[2].isIsomorphic(productA) ):
                            match = True
                            break
                        elif (  products[0].isIsomorphic(productC) and
                                products[1].isIsomorphic(productB) and
                                products[2].isIsomorphic(productA) ):
                            match = True
                            break
                elif len(products) == len(products0):
                    raise NotImplementedError(
                        "Can't yet check degeneracy of reactions with {0} products".format(len(products))
                        )

                # If we found a match, remove it from the list
                # Also increment the reaction path degeneracy of the remaining reaction
                if match:
                    rxnList.remove(reaction)
                    reaction0.degeneracy += 1
                else:
                    index += 1
            
            index0 += 1
        
        # For R_Recombination reactions, the degeneracy is twice what it should
        # be, so divide those by two
        # This is hardcoding of reaction families!
        if self.label.lower().startswith('r_recombination'):
            for rxn in rxnList:
                assert(rxn.degeneracy % 2 == 0)
                rxn.degeneracy /= 2
                
        # Determine the reactant-product pairs to use for flux analysis
        # Also store the reaction template (useful so we can easily get the kinetics later)
        for reaction in rxnList:
            
            # Restore the labeled atoms long enough to generate some metadata
            for reactant in reaction.reactants:
                reactant.clearLabeledAtoms()
            for label, atom in reaction.labeledAtoms:
                atom.label = label
            
            # Generate metadata about the reaction that we will need later
            reaction.pairs = self.getReactionPairs(reaction)
            reaction.template = self.getReactionTemplateLabels(reaction)
            if not forward:
                reaction.degeneracy = self.calculateDegeneracy(reaction)

            # Unlabel the atoms
            for label, atom in reaction.labeledAtoms:
                atom.label = ''
            
            # We're done with the labeled atoms, so delete the attribute
            # MODIFICATION (commented the following line)
            # del reaction.labeledAtoms
            # END MOD
            
        # This reaction list has only checked for duplicates within itself, not
        # with the global list of reactions
        return rxnList

rmgpy.data.kinetics.family.KineticsFamily._KineticsFamily__generateReactions = __generateReactions
In [17]:
class NoMatchingReactionsException(Exception):
    "Couldn't find a matching radical recombination reaction."
    pass
class MultipleMatchingReactionsException(Exception):
    "Found more than one radical recombination reaction that matches."
    def __init__(self, message, reactions=None):
        super(Exception, self).__init__(self, message)
        self.reactions = reactions or []
class CombinedMoleculeIsRadicalException(Exception):
    "The product of the matching radical recombination is itself a radical."
    def __init__(self, message, species=None):
        super(Exception, self).__init__(self, message)
        self.species = species
    

def make_labeled_rmg_reaction(cantera_reaction):

    unlabeled_rmg_reaction = make_rmg_reaction(cantera_reaction)
    
    reactant_molecules = [species.molecule for species in unlabeled_rmg_reaction.reactants]
    # reactant_molecules is a list of lists of resonance isomers,
    # eg. a bimolecular reaction where the second reactant has 2 isomers is: [[r1],[r2i1,r2i2]]

    products = [species.molecule[0] for species in unlabeled_rmg_reaction.products]
    # products is a list of molecule objects (only one resonance form of each product), eg [p1, p2]
    
    matching_reactions = []
    for reactants in itertools.product(*reactant_molecules):
        # reactants is now a tuple of molecules, one for each reactant,
        # eg. (r1, r2i1), and on the next iteration (r1, r2i2)
        matching_reactions.extend(rmgDatabase.kinetics.generateReactionsFromFamilies(reactants, products, only_families=rxnFamilies))

    logging.debug("Generated these reactions:")
    for reaction in matching_reactions:
        logging.debug(reaction)
    if len(matching_reactions) == 0:
        raise NoMatchingReactionsException(
            "Couldn't generate any reactions matching {} in families {}".format(unlabeled_rmg_reaction, rxnFamilies)
        )
    if len(matching_reactions) > 1:
        raise MultipleMatchingReactionsException(
            "Generated {} reactions matching {} in family {}".format(len(matching_reactions),unlabeled_rmg_reaction, rxnFamilies),
            matching_reactions,
        )

    labeled_rmg_reaction = matching_reactions[0]
    logging.debug("The reaction of interest is as follows: ")
    logging.debug(labeled_rmg_reaction)

    logging.debug("asserting that the matching reaction is Isomorphic")
    assert unlabeled_rmg_reaction.isIsomorphic(labeled_rmg_reaction)
    
    assert len(labeled_rmg_reaction.products) == 1
    product = labeled_rmg_reaction.products[0]
    if product.isRadical():
        raise CombinedMoleculeIsRadicalException(
            'The product of the radical recombination reaction {} is itself a radical'.format(product.toSMILES()),
            product)
    
    if not unlabeled_rmg_reaction.isIsomorphic(labeled_rmg_reaction,eitherDirection=False):
        # Need to reverse the direction
        labeled_rmg_reaction.reactants, labeled_rmg_reaction.products = labeled_rmg_reaction.products, labeled_rmg_reaction.reactants
    
    logging.debug("reaction: {!r}".format(labeled_rmg_reaction))
    return labeled_rmg_reaction
    
make_labeled_rmg_reaction(r)
Out[17]:
In [18]:
r2 =make_labeled_rmg_reaction(r)
print r2.labeledAtoms
print r2.labeledProductAtoms
[('*', <Atom 'H.'>), ('*', <Atom 'H.'>)]
[('*1', <Atom 'H'>), ('*2', <Atom 'H'>)]
In [19]:
no_matching_reactions = OrderedDict()
multiple_matching_reactions = OrderedDict()
parent_is_radical = OrderedDict()
matched_reactions = OrderedDict()
for r in parser.reactions:
    if is_radical_recombination(r) or is_unimolecular_dissociation(r):
        print '{:50s}'.format(r) ,
        try:
            labeled_rmg_reaction = make_labeled_rmg_reaction(r)
        except NoMatchingReactionsException as e:
            no_matching_reactions[r] = make_rmg_reaction(r)
            print("❗️ No match")
        except MultipleMatchingReactionsException as e:
            multiple_matching_reactions[r] = [make_rmg_reaction(r2) for r2 in e.reactions]
            print("‼️ Multiple matches")
        except CombinedMoleculeIsRadicalException as e:
            parent_is_radical[r] = e.species
            print("⚠️ Parent is radical")
        else:
            matched_reactions[r] = labeled_rmg_reaction
            print("✅ Unique match")
h2 <=> h + h                                       ✅ Unique match
h2o2 (+ M) <=> oh + oh (+ M)                       ✅ Unique match
h2o2 (+ he) <=> oh + oh (+ he)                     ✅ Unique match
h2o2 (+ h2o) <=> oh + oh (+ h2o)                   ✅ Unique match
hco <=> h + co                                     ❗️ No match
hoch2o <=> hocho + h                               ❗️ No match
hocho <=> co + h2o                                 ❗️ No match
hocho <=> co2 + h2                                 ❗️ No match
ch3o (+ M) <=> ch2o + h (+ M)                      ❗️ No match
ch3oh (+ M) <=> ch3 + oh (+ M)                     ✅ Unique match
ch3oh (+ M) <=> ch2(s) + h2o (+ M)                 ❗️ No match
ch3oh (+ M) <=> ch2oh + h (+ M)                    ✅ Unique match
ch3o2h <=> ch3o + oh                               ✅ Unique match
c2h5o2h <=> c2h5o + oh                             ✅ Unique match
c2h5o2 <=> ch3cho + oh                             ❗️ No match
c2h5o2 <=> c2h4 + ho2                              ❗️ No match
c2h5o2 <=> c2h4o1-2 + oh                           ❗️ No match
c2h4o2h <=> c2h4o1-2 + oh                          ❗️ No match
c2h4o2h <=> c2h4 + ho2                             ❗️ No match
c2h4o2h <=> ch3cho + oh                            ❗️ No match
c2h4o1-2 <=> ch3 + hco                             ❗️ No match
ch3cho (+ M) <=> ch3 + hco (+ M)                   ✅ Unique match
ch3cho (+ M) <=> ch4 + co (+ M)                    ❗️ No match
ch3co (+ M) <=> ch3 + co (+ M)                     ❗️ No match
ch3co3h <=> ch3co2 + oh                            ✅ Unique match
ch3co2 <=> ch3 + co2                               ❗️ No match
ch2cho (+ M) <=> ch2co + h (+ M)                   ❗️ No match
ch2cho (+ M) <=> ch3 + co (+ M)                    ❗️ No match
o2ch2cho <=> ch2co + ho2                           ❗️ No match
ho2ch2co <=> ch2co + ho2                           ❗️ No match
ch3co (+ M) <=> ch2co + h (+ M)                    ❗️ No match
c2h4 (+ M) <=> h2 + h2cc (+ M)                     ❗️ No match
c2h3oh -> c2h3 + oh                                ✅ Unique match
c2h3oh -> ch2cho + h                               ✅ Unique match
c2h5oh <=> c2h4 + h2o                              ❗️ No match
c2h5oh <=> ch3 + ch2oh                             ✅ Unique match
c2h5oh <=> c2h5 + oh                               ✅ Unique match
sc2h4oh <=> ch3cho + h                             ❗️ No match
sc2h4oh <=> c2h3oh + h                             ❗️ No match
o2c2h4oh <=> pc2h4oh + o2                          ⚠️ Parent is radical
ch3coch3 (+ M) <=> ch3co + ch3 (+ M)               ✅ Unique match
ch3och3 (+ M) <=> ch3 + ch3o (+ M)                 ✅ Unique match
ch3och2 <=> ch2o + ch3                             ❗️ No match
o2ch2och2o2h <=> ho2ch2ocho + oh                   ❗️ No match
ho2ch2ocho <=> och2ocho + oh                       ✅ Unique match
ch3ocho (+ M) <=> ch3oh + co (+ M)                 ❗️ No match
c3h8 (+ M) <=> ch3 + c2h5 (+ M)                    ✅ Unique match
c3h6 <=> c3h5-s + h                                ✅ Unique match
c3h6 <=> c3h5-t + h                                ✅ Unique match
nc3h7o2h <=> nc3h7o + oh                           ✅ Unique match
c3h6ooh1-2 <=> c3h6o1-2 + oh                       ❗️ No match
c3h6ooh1-3 <=> c3h6o1-3 + oh                       ❗️ No match
c3h6ooh2-1 <=> c3h6o1-2 + oh                       ❗️ No match
c3h6ooh2-1 <=> c2h3ooh + ch3                       ❗️ No match
c3h6ooh2-2 <=> ch3coch3 + oh                       ❗️ No match
c3h6ooh1-2o2 <=> c3ket12 + oh                      ❗️ No match
c3h6ooh1-3o2 <=> c3ket13 + oh                      ❗️ No match
c3h6ooh2-1o2 <=> c3ket21 + oh                      ❗️ No match
c3h51-2,3ooh <=> ac3h5ooh + ho2                    ❗️ No match
c3h52-1,3ooh <=> ac3h5ooh + ho2                    ❗️ No match
c3h5o <=> c2h3cho + h                              ❗️ No match
c2h3ooh <=> ch2cho + oh                            ✅ Unique match
c3h6o1-2 <=> c2h4 + ch2o                           ❗️ No match
c3h6o1-3 <=> c2h4 + ch2o                           ❗️ No match
ic3h7o2 <=> c3h6 + ho2                             ❗️ No match
nc3h7o2 <=> c3h6 + ho2                             ❗️ No match
c4h10 (+ M) <=> c2h5 + c2h5 (+ M)                  ✅ Unique match
c4h10 (+ M) <=> nc3h7 + ch3 (+ M)                  ✅ Unique match
c4h7o <=> ch3cho + c2h3                            ❗️ No match
c4h7o <=> c2h3cho + ch3                            ❗️ No match
c4h6 <=> c4h5-i + h                                ✅ Unique match
c4h6 <=> c4h5-n + h                                ✅ Unique match
c4h6 <=> c4h4 + h2                                 ❗️ No match
c4h71-4 <=> c4h6 + h                               ❗️ No match
c4h612 <=> c4h5-i + h                              ✅ Unique match
c4h6-2 <=> h + c4h5-2                              ✅ Unique match
c4h6o23 <=> c2h4 + ch2co                           ❗️ No match
c4h6o23 <=> c2h2 + c2h4o1-2                        ❗️ No match
c4h6o25 <=> c4h4o + h2                             ❗️ No match
c4h4o <=> co + c3h4-p                              ❗️ No match
c4h4o <=> c2h2 + ch2co                             ❗️ No match
ch3chchcho <=> c3h6 + co                           ❗️ No match
ch3chchco <=> c3h5-s + co                          ❗️ No match
ch2chchcho <=> c3h5-a + co                         ❗️ No match
pc4h9o2 <=> pc4h9 + o2                             ⚠️ Parent is radical
sc4h9o2 <=> sc4h9 + o2                             ⚠️ Parent is radical
pc4h9o2h <=> pc4h9o + oh                           ✅ Unique match
pc4h9o2 <=> c4h8-1 + ho2                           ❗️ No match
sc4h9o2 <=> c4h8-1 + ho2                           ❗️ No match
sc4h9o2 <=> c4h8-2 + ho2                           ❗️ No match
c4h8ooh1-2 <=> c4h8o1-2 + oh                       ❗️ No match
c4h8ooh1-3 <=> c4h8o1-3 + oh                       ❗️ No match
c4h8ooh1-4 <=> c4h8o1-4 + oh                       ❗️ No match
c4h8ooh2-1 <=> c4h8o1-2 + oh                       ❗️ No match
c4h8ooh2-3 <=> c4h8o2-3 + oh                       ❗️ No match
c4h8ooh2-4 <=> c4h8o1-3 + oh                       ❗️ No match
c4h8ooh1-1 <=> nc3h7cho + oh                       ❗️ No match
c4h8ooh2-2 <=> c2h5coch3 + oh                      ❗️ No match
c4h8ooh1-2o2 <=> nc4ket12 + oh                     ❗️ No match
c4h8ooh1-3o2 <=> nc4ket13 + oh                     ❗️ No match
c4h8ooh1-4o2 <=> nc4ket14 + oh                     ❗️ No match
c4h8ooh2-1o2 <=> nc4ket21 + oh                     ❗️ No match
c4h8ooh2-3o2 <=> nc4ket23 + oh                     ❗️ No match
c4h8ooh2-4o2 <=> nc4ket24 + oh                     ❗️ No match
ch2ch2cho <=> c2h4 + hco                           ❗️ No match
ch2ch2coch3 <=> c2h4 + ch3co                       ❗️ No match
c2h5coch2 <=> ch2co + c2h5                         ❗️ No match
nc3h7co <=> nc3h7 + co                             ❗️ No match
c3h6cho-1 <=> c2h4 + ch2cho                        ❗️ No match
ic4h10 (+ M) <=> ch3 + ic3h7 (+ M)                 ✅ Unique match
ic4h10 <=> tc4h9 + h                               ✅ Unique match
ic4h10 <=> ic4h9 + h                               ✅ Unique match
ic4h9o2h <=> ic4h9o + oh                           ✅ Unique match
tc4h9o2h <=> tc4h9o + oh                           ✅ Unique match
ic4h9o2 <=> ic4h8 + ho2                            ❗️ No match
tc4h9o2 <=> ic4h8 + ho2                            ❗️ No match
ic4h8ooh-io2 <=> ic4ketii + oh                     ❗️ No match
ic4h8ooh-to2 <=> ic4ketit + oh                     ❗️ No match
ch2o2h <=> ch2o + oh                               ❗️ No match
ic4h8o2h-i <=> cc4h8o + oh                         ❗️ No match
ic4h8o2h-t <=> ic4h8o + oh                         ❗️ No match
tc4h8o2h-i <=> ic4h8o + oh                         ❗️ No match
ic4h8 <=> c3h5-t + ch3                             ✅ Unique match
ic4h8 <=> ic4h7 + h                                ✅ Unique match
ic4h7 <=> c3h4-a + ch3                             ❗️ No match
ic4h7o <=> ic3h5cho + h                            ❗️ No match
ic3h5co <=> c3h5-t + co                            ❗️ No match
tc3h6ocho <=> ch3coch3 + hco                       ❗️ No match
tc4h8cho <=> ic3h5cho + ch3                        ❗️ No match
tc4h8cho <=> ic4h8 + hco                           ❗️ No match
ch2cch2oh <=> c2h2 + ch2oh                         ❗️ No match
nc4h9oh (+ M) <=> ch3 + c3h6oh (+ M)               ✅ Unique match
nc4h9oh (+ M) <=> c2h5 + pc2h4oh (+ M)             ✅ Unique match
nc4h9oh (+ M) <=> nc3h7 + ch2oh (+ M)              ✅ Unique match
nc4h9oh (+ M) <=> oh + pc4h9 (+ M)                 ✅ Unique match
nc4h9oh (+ M) <=> h + pc4h9o (+ M)                 ✅ Unique match
nc4h9oh (+ M) <=> c4h8-1 + h2o (+ M)               ❗️ No match
c4h6oh1-32 <=> c4h6 + oh                           ❗️ No match
c4h6oh1-13 <=> c4h5oh-13 + h                       ❗️ No match
c4h7oh1-3 <=> c4h71-3 + oh                         ✅ Unique match
c4h7oh1-3 <=> c2h3 + sc2h4oh                       ✅ Unique match
c4h7oh2-1 <=> c4h71-3 + oh                         ✅ Unique match
c4h7oh2-1 <=> c3h5-a + ch2oh                       ❗️ No match
c4h7oh1-4 <=> c4h71-4 + oh                         ✅ Unique match
c4h7oh1-4 <=> c2h3 + pc2h4oh                       ✅ Unique match
c4h7oh2-2 <=> c4h72-2 + oh                         ✅ Unique match
c4h7oh1-2 <=> c4h71-2 + oh                         ✅ Unique match
c4h7oh1-2 <=> c2h5 + ch2cho                        ❗️ No match
c4h7oh1-1 <=> c2h5 + ch2cho                        ❗️ No match
c4h7oh1-1 <=> c4h71-1 + oh                         ✅ Unique match
c4h5oh-13 <=> c4h5-n + oh                          ✅ Unique match
c4h5oh-13 <=> c2h3 + ch2cho                        ❗️ No match
tc4h9oh (+ M) <=> ch3 + tc3h6oh (+ M)              ✅ Unique match
tc4h9oh (+ M) <=> oh + tc4h9 (+ M)                 ✅ Unique match
tc4h9oh (+ M) <=> h + tc4h9o (+ M)                 ✅ Unique match
tc4h9oh (+ M) <=> h + tc4h8oh (+ M)                ✅ Unique match
tc4h9oh (+ M) <=> h2o + ic4h8 (+ M)                ❗️ No match
sc4h9oh (+ M) <=> ch3 + ic3h6oh (+ M)              ✅ Unique match
sc4h9oh (+ M) <=> c2h5 + sc2h4oh (+ M)             ✅ Unique match
sc4h9oh (+ M) <=> ch3 + c3h6oh-1 (+ M)             ✅ Unique match
sc4h9oh (+ M) <=> oh + sc4h9 (+ M)                 ✅ Unique match
sc4h9oh (+ M) <=> h + sc4h8ohm (+ M)               ✅ Unique match
sc4h9oh (+ M) <=> h + sc4h8oh-1 (+ M)              ✅ Unique match
sc4h9oh (+ M) <=> h + sc4h8oh-2 (+ M)              ✅ Unique match
sc4h9oh (+ M) <=> h + sc4h8oh-3 (+ M)              ✅ Unique match
sc4h9oh (+ M) <=> h + sc4h9o (+ M)                 ✅ Unique match
sc4h9oh (+ M) <=> h2o + c4h8-1 (+ M)               ❗️ No match
sc4h9oh (+ M) <=> h2o + c4h8-2 (+ M)               ❗️ No match
ic4h9oh (+ M) <=> ic3h7 + ch2oh (+ M)              ✅ Unique match
ic4h9oh (+ M) <=> c3h6oh-2 + ch3 (+ M)             ✅ Unique match
ic4h9oh (+ M) <=> oh + ic4h9 (+ M)                 ✅ Unique match
ic4h9oh (+ M) <=> ic4h8oh-1 + h (+ M)              ✅ Unique match
ic4h9oh (+ M) <=> ic4h8oh-2 + h (+ M)              ✅ Unique match
ic4h9oh (+ M) <=> ic4h8oh-3 + h (+ M)              ✅ Unique match
ic4h9oh (+ M) <=> ic4h9o + h (+ M)                 ✅ Unique match
ic4h9oh (+ M) <=> h2o + ic4h8 (+ M)                ❗️ No match
c4h8oh-1o2 <=> c4h7oh1-1 + ho2                     ❗️ No match
c4h8oh-2o2 <=> c4h7oh1-1 + ho2                     ❗️ No match
c4h8oh-2o2 <=> c4h7oh2-1 + ho2                     ❗️ No match
c4h8oh-3o2 <=> ho2 + c4h7oh2-1                     ❗️ No match
c4h8oh-3o2 <=> c4h7oh1-4 + ho2                     ❗️ No match
c4h8oh-4o2 <=> ho2 + c4h7oh1-4                     ❗️ No match
c4h8oh-1o2h -> c4h8oh-1o + oh                      ✅ Unique match
c4h8oh-2o2h -> c4h8oh-2o + oh                      ✅ Unique match
c4h8oh-3o2h -> c4h8oh-3o + oh                      ✅ Unique match
c4h8oh-4o2h -> c4h8oh-4o + oh                      ✅ Unique match
c4h7oh-1ooh-2 -> c4h7oho1-2 + oh                   ❗️ No match
c4h7oh-1ooh-3 -> c4h7oho1-3 + oh                   ❗️ No match
c4h7oh-1ooh-4 -> c4h7oho1-4 + oh                   ❗️ No match
c4h7oh-2ooh-1 -> c4h7oho1-2 + oh                   ❗️ No match
c4h7oh-2ooh-3 -> c4h7oho2-3 + oh                   ❗️ No match
c4h7oh-2ooh-4 -> c4h7oho2-4 + oh                   ❗️ No match
c4h7oh-3ooh-1 -> c4h7oho1-3 + oh                   ❗️ No match
c4h7oh-3ooh-2 -> c4h7oho2-3 + oh                   ❗️ No match
c4h7oh-3ooh-4 -> c4h7oho3-4 + oh                   ❗️ No match
c4h7oh-4ooh-1 -> c4h7oho1-4 + oh                   ❗️ No match
c4h7oh-4ooh-2 -> c4h7oho2-4 + oh                   ❗️ No match
c4h7oh-4ooh-3 -> c4h7oho3-4 + oh                   ❗️ No match
c4h7oh-1ooh-2o2 <=> c4ohket1-2 + oh                ❗️ No match
c4h7oh-1ooh-3o2 <=> c4ohket1-3 + oh                ❗️ No match
c4h7oh-1ooh-4o2 <=> c4ohket1-4 + oh                ❗️ No match
c4h7oh-2ooh-1o2 <=> c4ohket2-1 + oh                ❗️ No match
c4h7oh-2ooh-3o2 <=> c4ohket2-3 + oh                ❗️ No match
c4h7oh-2ooh-4o2 <=> c4ohket2-4 + oh                ❗️ No match
c4h7oh-3ooh-1o2 <=> c4ohket3-1 + oh                ❗️ No match
c4h7oh-3ooh-2o2 <=> c4ohket3-2 + oh                ❗️ No match
c4h7oh-3ooh-4o2 <=> c4ohket3-4 + oh                ❗️ No match
c4h7oh-4ooh-1o2 <=> c4ohket4-1 + oh                ❗️ No match
c4h7oh-4ooh-2o2 <=> c4ohket4-2 + oh                ❗️ No match
c4h7oh-4ooh-3o2 <=> c4ohket4-3 + oh                ❗️ No match
hoch2co <=> ch2oh + co                             ❗️ No match
hoc2h4co <=> pc2h4oh + co                          ❗️ No match
ic4h8oh-1o2 <=> ic3h6choh + ho2                    ❗️ No match
ic4h8oh-2o2 <=> ic3h6choh + ho2                    ❗️ No match
ic4h8oh-2o2 <=> ic3h5ch2oh + ho2                   ❗️ No match
ic4h8oh-3o2 <=> ic3h5ch2oh + ho2                   ❗️ No match
ic4h8oh-1o2h -> ic4h8oh-1o + oh                    ✅ Unique match
ic4h8oh-2o2h -> ic4h8oh-2o + oh                    ✅ Unique match
ic4h8oh-3o2h -> ic4h8oh-3o + oh                    ✅ Unique match
ic4h7oh-1ooh-2 -> ic4h7oho1-2 + oh                 ❗️ No match
ic4h7oh-1ooh-3 -> ic4h7oho1-3 + oh                 ❗️ No match
ic4h7oh-2ooh-1 -> ic4h7oho1-2 + oh                 ❗️ No match
ic4h7oh-2ooh-3 -> ic4h7oho2-3 + oh                 ❗️ No match
ic4h7oh-3ooh-1 -> ic4h7oho1-3 + oh                 ❗️ No match
ic4h7oh-3ooh-2 -> ic4h7oho2-3 + oh                 ❗️ No match
ic4h7oh-3ooh-3 -> ic4h7oho3-3 + oh                 ❗️ No match
ic4h7oh-1ooh-2o2 <=> ic4ohket1-2 + oh              ❗️ No match
ic4h7oh-1ooh-3o2 <=> ic4ohket1-3 + oh              ❗️ No match
ic4h7oh-3ooh-1o2 <=> ic4ohket3-1 + oh              ❗️ No match
ic4h7oh-3ooh-2o2 <=> ic4ohket3-2 + oh              ❗️ No match
ic4h7oh-3ooh-3o2 <=> ic4ohket3-3 + oh              ❗️ No match
tc4h8oh-o2 -> tc4h8oh + o2                         ⚠️ Parent is radical
tc4h8oh-o2 -> c3ket12 + ch3                        ❗️ No match
tc4h8oh-o2h -> tc4h8oh-o + oh                      ✅ Unique match
tc4h7oh-ooh -> tc4h7oho + oh                       ❗️ No match
tc4h7oh-ooh-o2 -> tc4h7oh-ooh + o2                 ⚠️ Parent is radical
tc4h7oh-ooh-o2 <=> tc4ohket + oh                   ❗️ No match
sc4h8oh-2o2 -> c3ket12 + ch3                       ❗️ No match
sc4h8oh-1o2 <=> c4h7oh1-2 + ho2                    ❗️ No match
sc4h8oh-1o2 <=> c4h7oh2-2 + ho2                    ❗️ No match
sc4h8oh-2o2 <=> c4h7oh2-2 + ho2                    ❗️ No match
sc4h8oh-2o2 <=> c4h7oh1-3 + ho2                    ❗️ No match
sc4h8oh-3o2 <=> ho2 + c4h7oh1-3                    ❗️ No match
sc4h8oh-mo2 <=> ho2 + c4h7oh1-2                    ❗️ No match
sc4h8oh-1o2h -> sc4h8oh-1o + oh                    ✅ Unique match
sc4h8oh-2o2h -> sc4h8oh-2o + oh                    ✅ Unique match
sc4h8oh-3o2h -> sc4h8oh-3o + oh                    ✅ Unique match
sc4h8oh-mo2h -> sc4h8oh-mo + oh                    ✅ Unique match
sc4h7oh-1ooh-2 -> sc4h7oho1-2 + oh                 ❗️ No match
sc4h7oh-1ooh-3 -> sc4h7oho1-3 + oh                 ❗️ No match
sc4h7oh-1ooh-m -> sc4h7oho1-m + oh                 ❗️ No match
sc4h7oh-2ooh-1 -> sc4h7oho1-2 + oh                 ❗️ No match
sc4h7oh-2ooh-3 -> sc4h7oho2-3 + oh                 ❗️ No match
sc4h7oh-2ooh-m -> sc4h7oho2-m + oh                 ❗️ No match
sc4h7oh-3ooh-1 -> sc4h7oho1-3 + oh                 ❗️ No match
sc4h7oh-3ooh-2 -> sc4h7oho2-3 + oh                 ❗️ No match
sc4h7oh-3ooh-m -> sc4h7oho3-m + oh                 ❗️ No match
sc4h7oh-mooh-1 -> sc4h7oho1-m + oh                 ❗️ No match
sc4h7oh-mooh-2 -> sc4h7oho2-m + oh                 ❗️ No match
sc4h7oh-mooh-3 -> sc4h7oho3-m + oh                 ❗️ No match
sc4h7oh-2ooh-1o2 <=> sc4ohket2-1 + oh              ❗️ No match
sc4h7oh-2ooh-3o2 <=> sc4ohket2-3 + oh              ❗️ No match
sc4h7oh-2ooh-mo2 <=> sc4ohket2-m + oh              ❗️ No match
sc4h7oh-1ooh-2o2 <=> sc4ohket2-1 + oh              ❗️ No match
sc4h7oh-1ooh-3o2 <=> sc4ohket2-3 + oh              ❗️ No match
sc4h7oh-1ooh-mo2 <=> sc4ohket2-m + oh              ❗️ No match
sc4h7oh-3ooh-1o2 <=> sc4ohket3-1 + oh              ❗️ No match
sc4h7oh-3ooh-2o2 <=> sc4ohket3-2 + oh              ❗️ No match
sc4h7oh-3ooh-mo2 <=> sc4ohket3-m + oh              ❗️ No match
sc4h7oh-mooh-1o2 <=> sc4ohketm-1 + oh              ❗️ No match
sc4h7oh-mooh-2o2 <=> sc4ohketm-2 + oh              ❗️ No match
sc4h7oh-mooh-3o2 <=> sc4ohketm-3 + oh              ❗️ No match
In [20]:
mprint('# Unmatched reactions ({})\n These reactions are unimolecular dissociation (or bimolecular recombination) but did *not* match any radical recombination in RMG'.format(len(no_matching_reactions)))
for r, r2 in no_matching_reactions.iteritems():
    display(r2)
    print str(r)
    print '-'*40

Unmatched reactions (185)

These reactions are unimolecular dissociation (or bimolecular recombination) but did not match any radical recombination in RMG

hco <=> h + co
----------------------------------------
hoch2o <=> hocho + h
----------------------------------------
hocho <=> co + h2o
----------------------------------------
hocho <=> co2 + h2
----------------------------------------
ch3o (+ M) <=> ch2o + h (+ M)
----------------------------------------
ch3oh (+ M) <=> ch2(s) + h2o (+ M)
----------------------------------------
c2h5o2 <=> ch3cho + oh
----------------------------------------
c2h5o2 <=> c2h4 + ho2
----------------------------------------
c2h5o2 <=> c2h4o1-2 + oh
----------------------------------------
c2h4o2h <=> c2h4o1-2 + oh
----------------------------------------
c2h4o2h <=> c2h4 + ho2
----------------------------------------
c2h4o2h <=> ch3cho + oh
----------------------------------------
c2h4o1-2 <=> ch3 + hco
----------------------------------------
ch3cho (+ M) <=> ch4 + co (+ M)
----------------------------------------
ch3co (+ M) <=> ch3 + co (+ M)
----------------------------------------
ch3co2 <=> ch3 + co2
----------------------------------------
ch2cho (+ M) <=> ch2co + h (+ M)
----------------------------------------
ch2cho (+ M) <=> ch3 + co (+ M)
----------------------------------------
o2ch2cho <=> ch2co + ho2
----------------------------------------
ho2ch2co <=> ch2co + ho2
----------------------------------------
ch3co (+ M) <=> ch2co + h (+ M)
----------------------------------------
c2h4 (+ M) <=> h2 + h2cc (+ M)
----------------------------------------
c2h5oh <=> c2h4 + h2o
----------------------------------------
sc2h4oh <=> ch3cho + h
----------------------------------------
sc2h4oh <=> c2h3oh + h
----------------------------------------
ch3och2 <=> ch2o + ch3
----------------------------------------
o2ch2och2o2h <=> ho2ch2ocho + oh
----------------------------------------
ch3ocho (+ M) <=> ch3oh + co (+ M)
----------------------------------------
c3h6ooh1-2 <=> c3h6o1-2 + oh
----------------------------------------
c3h6ooh1-3 <=> c3h6o1-3 + oh
----------------------------------------
c3h6ooh2-1 <=> c3h6o1-2 + oh
----------------------------------------
c3h6ooh2-1 <=> c2h3ooh + ch3
----------------------------------------
c3h6ooh2-2 <=> ch3coch3 + oh
----------------------------------------
c3h6ooh1-2o2 <=> c3ket12 + oh
----------------------------------------
c3h6ooh1-3o2 <=> c3ket13 + oh
----------------------------------------
c3h6ooh2-1o2 <=> c3ket21 + oh
----------------------------------------
c3h51-2,3ooh <=> ac3h5ooh + ho2
----------------------------------------
c3h52-1,3ooh <=> ac3h5ooh + ho2
----------------------------------------
c3h5o <=> c2h3cho + h
----------------------------------------
c3h6o1-2 <=> c2h4 + ch2o
----------------------------------------
c3h6o1-3 <=> c2h4 + ch2o
----------------------------------------
ic3h7o2 <=> c3h6 + ho2
----------------------------------------
nc3h7o2 <=> c3h6 + ho2
----------------------------------------
c4h7o <=> ch3cho + c2h3
----------------------------------------
c4h7o <=> c2h3cho + ch3
----------------------------------------
c4h6 <=> c4h4 + h2
----------------------------------------
c4h71-4 <=> c4h6 + h
----------------------------------------
c4h6o23 <=> c2h4 + ch2co
----------------------------------------
c4h6o23 <=> c2h2 + c2h4o1-2
----------------------------------------
c4h6o25 <=> c4h4o + h2
----------------------------------------
c4h4o <=> co + c3h4-p
----------------------------------------
c4h4o <=> c2h2 + ch2co
----------------------------------------
ch3chchcho <=> c3h6 + co
----------------------------------------
ch3chchco <=> c3h5-s + co
----------------------------------------
ch2chchcho <=> c3h5-a + co
----------------------------------------
pc4h9o2 <=> c4h8-1 + ho2
----------------------------------------
sc4h9o2 <=> c4h8-1 + ho2
----------------------------------------
sc4h9o2 <=> c4h8-2 + ho2
----------------------------------------
c4h8ooh1-2 <=> c4h8o1-2 + oh
----------------------------------------
c4h8ooh1-3 <=> c4h8o1-3 + oh
----------------------------------------
c4h8ooh1-4 <=> c4h8o1-4 + oh
----------------------------------------
c4h8ooh2-1 <=> c4h8o1-2 + oh
----------------------------------------
c4h8ooh2-3 <=> c4h8o2-3 + oh
----------------------------------------
c4h8ooh2-4 <=> c4h8o1-3 + oh
----------------------------------------
c4h8ooh1-1 <=> nc3h7cho + oh
----------------------------------------
c4h8ooh2-2 <=> c2h5coch3 + oh
----------------------------------------
c4h8ooh1-2o2 <=> nc4ket12 + oh
----------------------------------------
c4h8ooh1-3o2 <=> nc4ket13 + oh
----------------------------------------
c4h8ooh1-4o2 <=> nc4ket14 + oh
----------------------------------------
c4h8ooh2-1o2 <=> nc4ket21 + oh
----------------------------------------
c4h8ooh2-3o2 <=> nc4ket23 + oh
----------------------------------------
c4h8ooh2-4o2 <=> nc4ket24 + oh
----------------------------------------
ch2ch2cho <=> c2h4 + hco
----------------------------------------
ch2ch2coch3 <=> c2h4 + ch3co
----------------------------------------
c2h5coch2 <=> ch2co + c2h5
----------------------------------------
nc3h7co <=> nc3h7 + co
----------------------------------------
c3h6cho-1 <=> c2h4 + ch2cho
----------------------------------------
ic4h9o2 <=> ic4h8 + ho2
----------------------------------------
tc4h9o2 <=> ic4h8 + ho2
----------------------------------------
ic4h8ooh-io2 <=> ic4ketii + oh
----------------------------------------
ic4h8ooh-to2 <=> ic4ketit + oh
----------------------------------------
ch2o2h <=> ch2o + oh
----------------------------------------
ic4h8o2h-i <=> cc4h8o + oh
----------------------------------------
ic4h8o2h-t <=> ic4h8o + oh
----------------------------------------
tc4h8o2h-i <=> ic4h8o + oh
----------------------------------------
ic4h7 <=> c3h4-a + ch3
----------------------------------------
ic4h7o <=> ic3h5cho + h
----------------------------------------
ic3h5co <=> c3h5-t + co
----------------------------------------
tc3h6ocho <=> ch3coch3 + hco
----------------------------------------
tc4h8cho <=> ic3h5cho + ch3
----------------------------------------
tc4h8cho <=> ic4h8 + hco
----------------------------------------
ch2cch2oh <=> c2h2 + ch2oh
----------------------------------------
nc4h9oh (+ M) <=> c4h8-1 + h2o (+ M)
----------------------------------------
c4h6oh1-32 <=> c4h6 + oh
----------------------------------------
c4h6oh1-13 <=> c4h5oh-13 + h
----------------------------------------
c4h7oh2-1 <=> c3h5-a + ch2oh
----------------------------------------
c4h7oh1-2 <=> c2h5 + ch2cho
----------------------------------------
c4h7oh1-1 <=> c2h5 + ch2cho
----------------------------------------
c4h5oh-13 <=> c2h3 + ch2cho
----------------------------------------
tc4h9oh (+ M) <=> h2o + ic4h8 (+ M)
----------------------------------------
sc4h9oh (+ M) <=> h2o + c4h8-1 (+ M)
----------------------------------------
sc4h9oh (+ M) <=> h2o + c4h8-2 (+ M)
----------------------------------------
ic4h9oh (+ M) <=> h2o + ic4h8 (+ M)
----------------------------------------
c4h8oh-1o2 <=> c4h7oh1-1 + ho2
----------------------------------------
c4h8oh-2o2 <=> c4h7oh1-1 + ho2
----------------------------------------
c4h8oh-2o2 <=> c4h7oh2-1 + ho2
----------------------------------------
c4h8oh-3o2 <=> ho2 + c4h7oh2-1
----------------------------------------
c4h8oh-3o2 <=> c4h7oh1-4 + ho2
----------------------------------------
c4h8oh-4o2 <=> ho2 + c4h7oh1-4
----------------------------------------
c4h7oh-1ooh-2 -> c4h7oho1-2 + oh
----------------------------------------
c4h7oh-1ooh-3 -> c4h7oho1-3 + oh
----------------------------------------
c4h7oh-1ooh-4 -> c4h7oho1-4 + oh
----------------------------------------
c4h7oh-2ooh-1 -> c4h7oho1-2 + oh
----------------------------------------
c4h7oh-2ooh-3 -> c4h7oho2-3 + oh
----------------------------------------
c4h7oh-2ooh-4 -> c4h7oho2-4 + oh
----------------------------------------
c4h7oh-3ooh-1 -> c4h7oho1-3 + oh
----------------------------------------
c4h7oh-3ooh-2 -> c4h7oho2-3 + oh
----------------------------------------
c4h7oh-3ooh-4 -> c4h7oho3-4 + oh
----------------------------------------
c4h7oh-4ooh-1 -> c4h7oho1-4 + oh
----------------------------------------
c4h7oh-4ooh-2 -> c4h7oho2-4 + oh
----------------------------------------
c4h7oh-4ooh-3 -> c4h7oho3-4 + oh
----------------------------------------
c4h7oh-1ooh-2o2 <=> c4ohket1-2 + oh
----------------------------------------
c4h7oh-1ooh-3o2 <=> c4ohket1-3 + oh
----------------------------------------
c4h7oh-1ooh-4o2 <=> c4ohket1-4 + oh
----------------------------------------
c4h7oh-2ooh-1o2 <=> c4ohket2-1 + oh
----------------------------------------
c4h7oh-2ooh-3o2 <=> c4ohket2-3 + oh
----------------------------------------
c4h7oh-2ooh-4o2 <=> c4ohket2-4 + oh
----------------------------------------
c4h7oh-3ooh-1o2 <=> c4ohket3-1 + oh
----------------------------------------
c4h7oh-3ooh-2o2 <=> c4ohket3-2 + oh
----------------------------------------
c4h7oh-3ooh-4o2 <=> c4ohket3-4 + oh
----------------------------------------
c4h7oh-4ooh-1o2 <=> c4ohket4-1 + oh
----------------------------------------
c4h7oh-4ooh-2o2 <=> c4ohket4-2 + oh
----------------------------------------
c4h7oh-4ooh-3o2 <=> c4ohket4-3 + oh
----------------------------------------
hoch2co <=> ch2oh + co
----------------------------------------
hoc2h4co <=> pc2h4oh + co
----------------------------------------
ic4h8oh-1o2 <=> ic3h6choh + ho2
----------------------------------------
ic4h8oh-2o2 <=> ic3h6choh + ho2
----------------------------------------
ic4h8oh-2o2 <=> ic3h5ch2oh + ho2
----------------------------------------
ic4h8oh-3o2 <=> ic3h5ch2oh + ho2
----------------------------------------
ic4h7oh-1ooh-2 -> ic4h7oho1-2 + oh
----------------------------------------
ic4h7oh-1ooh-3 -> ic4h7oho1-3 + oh
----------------------------------------
ic4h7oh-2ooh-1 -> ic4h7oho1-2 + oh
----------------------------------------
ic4h7oh-2ooh-3 -> ic4h7oho2-3 + oh
----------------------------------------
ic4h7oh-3ooh-1 -> ic4h7oho1-3 + oh
----------------------------------------
ic4h7oh-3ooh-2 -> ic4h7oho2-3 + oh
----------------------------------------
ic4h7oh-3ooh-3 -> ic4h7oho3-3 + oh
----------------------------------------
ic4h7oh-1ooh-2o2 <=> ic4ohket1-2 + oh
----------------------------------------
ic4h7oh-1ooh-3o2 <=> ic4ohket1-3 + oh
----------------------------------------
ic4h7oh-3ooh-1o2 <=> ic4ohket3-1 + oh
----------------------------------------
ic4h7oh-3ooh-2o2 <=> ic4ohket3-2 + oh
----------------------------------------
ic4h7oh-3ooh-3o2 <=> ic4ohket3-3 + oh
----------------------------------------
tc4h8oh-o2 -> c3ket12 + ch3
----------------------------------------
tc4h7oh-ooh -> tc4h7oho + oh
----------------------------------------
tc4h7oh-ooh-o2 <=> tc4ohket + oh
----------------------------------------
sc4h8oh-2o2 -> c3ket12 + ch3
----------------------------------------
sc4h8oh-1o2 <=> c4h7oh1-2 + ho2
----------------------------------------
sc4h8oh-1o2 <=> c4h7oh2-2 + ho2
----------------------------------------
sc4h8oh-2o2 <=> c4h7oh2-2 + ho2
----------------------------------------
sc4h8oh-2o2 <=> c4h7oh1-3 + ho2
----------------------------------------
sc4h8oh-3o2 <=> ho2 + c4h7oh1-3
----------------------------------------
sc4h8oh-mo2 <=> ho2 + c4h7oh1-2
----------------------------------------
sc4h7oh-1ooh-2 -> sc4h7oho1-2 + oh
----------------------------------------
sc4h7oh-1ooh-3 -> sc4h7oho1-3 + oh
----------------------------------------
sc4h7oh-1ooh-m -> sc4h7oho1-m + oh
----------------------------------------
sc4h7oh-2ooh-1 -> sc4h7oho1-2 + oh
----------------------------------------
sc4h7oh-2ooh-3 -> sc4h7oho2-3 + oh
----------------------------------------
sc4h7oh-2ooh-m -> sc4h7oho2-m + oh
----------------------------------------
sc4h7oh-3ooh-1 -> sc4h7oho1-3 + oh
----------------------------------------
sc4h7oh-3ooh-2 -> sc4h7oho2-3 + oh
----------------------------------------
sc4h7oh-3ooh-m -> sc4h7oho3-m + oh
----------------------------------------
sc4h7oh-mooh-1 -> sc4h7oho1-m + oh
----------------------------------------
sc4h7oh-mooh-2 -> sc4h7oho2-m + oh
----------------------------------------
sc4h7oh-mooh-3 -> sc4h7oho3-m + oh
----------------------------------------
sc4h7oh-2ooh-1o2 <=> sc4ohket2-1 + oh
----------------------------------------
sc4h7oh-2ooh-3o2 <=> sc4ohket2-3 + oh
----------------------------------------
sc4h7oh-2ooh-mo2 <=> sc4ohket2-m + oh
----------------------------------------
sc4h7oh-1ooh-2o2 <=> sc4ohket2-1 + oh
----------------------------------------
sc4h7oh-1ooh-3o2 <=> sc4ohket2-3 + oh
----------------------------------------
sc4h7oh-1ooh-mo2 <=> sc4ohket2-m + oh
----------------------------------------
sc4h7oh-3ooh-1o2 <=> sc4ohket3-1 + oh
----------------------------------------
sc4h7oh-3ooh-2o2 <=> sc4ohket3-2 + oh
----------------------------------------
sc4h7oh-3ooh-mo2 <=> sc4ohket3-m + oh
----------------------------------------
sc4h7oh-mooh-1o2 <=> sc4ohketm-1 + oh
----------------------------------------
sc4h7oh-mooh-2o2 <=> sc4ohketm-2 + oh
----------------------------------------
sc4h7oh-mooh-3o2 <=> sc4ohketm-3 + oh
----------------------------------------
In [21]:
mprint('# Multiple matching reactions ({})\n These reactions are unimolecular dissociation (or bimolecular recombination) but matched *multiple* radical recombination in RMG'.format(len(multiple_matching_reactions)))
if not multiple_matching_reactions: print "None!"
for r,rlist in multiple_matching_reactions.iteritems():
    display(make_rmg_reaction(r))
    print str(r)
    for rx in rlist:
        display(rx)
    print '-'*40

Multiple matching reactions (0)

These reactions are unimolecular dissociation (or bimolecular recombination) but matched multiple radical recombination in RMG

None!
In [22]:
mprint(('# Parent molecule is a radical ({})\n'
       'These reactions are unimolecular dissociation (or bimolecular recombination) '
        'but the unimolecular parent (or product of recombination) is itself a radical '
        'so we are excluding them').format(len(parent_is_radical)))
if not parent_is_radical: print "None!"
for r,species in parent_is_radical.iteritems():
    display(make_rmg_reaction(r))
    print str(r)
    print '-'*40

Parent molecule is a radical (5)

These reactions are unimolecular dissociation (or bimolecular recombination) but the unimolecular parent (or product of recombination) is itself a radical so we are excluding them

o2c2h4oh <=> pc2h4oh + o2
----------------------------------------
pc4h9o2 <=> pc4h9 + o2
----------------------------------------
sc4h9o2 <=> sc4h9 + o2
----------------------------------------
tc4h8oh-o2 -> tc4h8oh + o2
----------------------------------------
tc4h7oh-ooh-o2 -> tc4h7oh-ooh + o2
----------------------------------------
In [23]:
mprint('# Matched reactions ({})\n These reactions each matched a unique radical recombinations in RMG'.format(len(matched_reactions)))
for r,r2 in matched_reactions.iteritems():
    display(r2)
    print str(r)
    print '-'*40

Matched reactions (82)

These reactions each matched a unique radical recombinations in RMG

h2 <=> h + h
----------------------------------------
h2o2 (+ M) <=> oh + oh (+ M)
----------------------------------------
h2o2 (+ he) <=> oh + oh (+ he)
----------------------------------------
h2o2 (+ h2o) <=> oh + oh (+ h2o)
----------------------------------------
ch3oh (+ M) <=> ch3 + oh (+ M)
----------------------------------------
ch3oh (+ M) <=> ch2oh + h (+ M)
----------------------------------------
ch3o2h <=> ch3o + oh
----------------------------------------
c2h5o2h <=> c2h5o + oh
----------------------------------------
ch3cho (+ M) <=> ch3 + hco (+ M)
----------------------------------------
ch3co3h <=> ch3co2 + oh
----------------------------------------
c2h3oh -> c2h3 + oh
----------------------------------------
c2h3oh -> ch2cho + h
----------------------------------------
c2h5oh <=> ch3 + ch2oh
----------------------------------------
c2h5oh <=> c2h5 + oh
----------------------------------------
ch3coch3 (+ M) <=> ch3co + ch3 (+ M)
----------------------------------------
ch3och3 (+ M) <=> ch3 + ch3o (+ M)
----------------------------------------
ho2ch2ocho <=> och2ocho + oh
----------------------------------------
c3h8 (+ M) <=> ch3 + c2h5 (+ M)
----------------------------------------
c3h6 <=> c3h5-s + h
----------------------------------------
c3h6 <=> c3h5-t + h
----------------------------------------
nc3h7o2h <=> nc3h7o + oh
----------------------------------------
c2h3ooh <=> ch2cho + oh
----------------------------------------
c4h10 (+ M) <=> c2h5 + c2h5 (+ M)
----------------------------------------
c4h10 (+ M) <=> nc3h7 + ch3 (+ M)
----------------------------------------
c4h6 <=> c4h5-i + h
----------------------------------------
c4h6 <=> c4h5-n + h
----------------------------------------
c4h612 <=> c4h5-i + h
----------------------------------------
c4h6-2 <=> h + c4h5-2
----------------------------------------
pc4h9o2h <=> pc4h9o + oh
----------------------------------------
ic4h10 (+ M) <=> ch3 + ic3h7 (+ M)
----------------------------------------
ic4h10 <=> tc4h9 + h
----------------------------------------
ic4h10 <=> ic4h9 + h
----------------------------------------
ic4h9o2h <=> ic4h9o + oh
----------------------------------------
tc4h9o2h <=> tc4h9o + oh
----------------------------------------
ic4h8 <=> c3h5-t + ch3
----------------------------------------
ic4h8 <=> ic4h7 + h
----------------------------------------
nc4h9oh (+ M) <=> ch3 + c3h6oh (+ M)
----------------------------------------
nc4h9oh (+ M) <=> c2h5 + pc2h4oh (+ M)
----------------------------------------
nc4h9oh (+ M) <=> nc3h7 + ch2oh (+ M)
----------------------------------------
nc4h9oh (+ M) <=> oh + pc4h9 (+ M)
----------------------------------------
nc4h9oh (+ M) <=> h + pc4h9o (+ M)
----------------------------------------
c4h7oh1-3 <=> c4h71-3 + oh
----------------------------------------
c4h7oh1-3 <=> c2h3 + sc2h4oh
----------------------------------------
c4h7oh2-1 <=> c4h71-3 + oh
----------------------------------------
c4h7oh1-4 <=> c4h71-4 + oh
----------------------------------------
c4h7oh1-4 <=> c2h3 + pc2h4oh
----------------------------------------
c4h7oh2-2 <=> c4h72-2 + oh
----------------------------------------
c4h7oh1-2 <=> c4h71-2 + oh
----------------------------------------
c4h7oh1-1 <=> c4h71-1 + oh
----------------------------------------
c4h5oh-13 <=> c4h5-n + oh
----------------------------------------
tc4h9oh (+ M) <=> ch3 + tc3h6oh (+ M)
----------------------------------------
tc4h9oh (+ M) <=> oh + tc4h9 (+ M)
----------------------------------------
tc4h9oh (+ M) <=> h + tc4h9o (+ M)
----------------------------------------
tc4h9oh (+ M) <=> h + tc4h8oh (+ M)
----------------------------------------
sc4h9oh (+ M) <=> ch3 + ic3h6oh (+ M)
----------------------------------------
sc4h9oh (+ M) <=> c2h5 + sc2h4oh (+ M)
----------------------------------------
sc4h9oh (+ M) <=> ch3 + c3h6oh-1 (+ M)
----------------------------------------
sc4h9oh (+ M) <=> oh + sc4h9 (+ M)
----------------------------------------
sc4h9oh (+ M) <=> h + sc4h8ohm (+ M)
----------------------------------------
sc4h9oh (+ M) <=> h + sc4h8oh-1 (+ M)
----------------------------------------
sc4h9oh (+ M) <=> h + sc4h8oh-2 (+ M)
----------------------------------------
sc4h9oh (+ M) <=> h + sc4h8oh-3 (+ M)
----------------------------------------
sc4h9oh (+ M) <=> h + sc4h9o (+ M)
----------------------------------------
ic4h9oh (+ M) <=> ic3h7 + ch2oh (+ M)
----------------------------------------
ic4h9oh (+ M) <=> c3h6oh-2 + ch3 (+ M)
----------------------------------------
ic4h9oh (+ M) <=> oh + ic4h9 (+ M)
----------------------------------------
ic4h9oh (+ M) <=> ic4h8oh-1 + h (+ M)
----------------------------------------
ic4h9oh (+ M) <=> ic4h8oh-2 + h (+ M)
----------------------------------------
ic4h9oh (+ M) <=> ic4h8oh-3 + h (+ M)
----------------------------------------
ic4h9oh (+ M) <=> ic4h9o + h (+ M)
----------------------------------------
c4h8oh-1o2h -> c4h8oh-1o + oh
----------------------------------------
c4h8oh-2o2h -> c4h8oh-2o + oh
----------------------------------------
c4h8oh-3o2h -> c4h8oh-3o + oh
----------------------------------------
c4h8oh-4o2h -> c4h8oh-4o + oh
----------------------------------------
ic4h8oh-1o2h -> ic4h8oh-1o + oh
----------------------------------------
ic4h8oh-2o2h -> ic4h8oh-2o + oh
----------------------------------------
ic4h8oh-3o2h -> ic4h8oh-3o + oh
----------------------------------------
tc4h8oh-o2h -> tc4h8oh-o + oh
----------------------------------------
sc4h8oh-1o2h -> sc4h8oh-1o + oh
----------------------------------------
sc4h8oh-2o2h -> sc4h8oh-2o + oh
----------------------------------------
sc4h8oh-3o2h -> sc4h8oh-3o + oh
----------------------------------------
sc4h8oh-mo2h -> sc4h8oh-mo + oh
----------------------------------------
In [24]:
# Testing
display(r2)
print r2.labeledAtoms
print r2.labeledAtoms[0][1].bonds
print r2.reactants[0].getLabeledAtoms()
print r2.labeledProductAtoms
r2.labeledProductAtoms[0][1].bonds
[('*', <Atom 'O.'>), ('*', <Atom 'O.'>)]
{<Atom 'H'>: <Bond "1.0">}
{'*1': <Atom 'H'>, '*2': <Atom 'O'>}
[('*1', <Atom 'O'>), ('*2', <Atom 'O'>)]
Out[24]:
{<Atom 'C'>: <Bond "1.0">, <Atom 'O'>: <Bond "1.0">}
In [25]:
# preserve the previously loaded family(s) but add/replace any new ones
old_families = rmgDatabase.kinetics.families
rmgDatabase.kinetics.loadFamilies(path='.', families=['R_Roaming', 'R_Roaming_alpha'])
old_families.update(rmgDatabase.kinetics.families)
rmgDatabase.kinetics.families = old_families
rmgDatabase.kinetics.families
INFO:root:Loading the user-specified kinetics families from .
Out[25]:
{'R_Recombination': <ReactionFamily "R_Recombination">,
 'R_Roaming': <ReactionFamily "R_Roaming">,
 'R_Roaming_alpha': <ReactionFamily "R_Roaming_alpha">}

We have to perform another monkey-patch on RMG to make it use atom labels (if present) to restrict the subgraph isomorphism when matching a species to a reaction template, so that we only generate the roaming reaction that corresponds to our identified homolytic fission reaction (otherwise we'd get all the roamings associated with all the homolytic fissions from the parent molecule).

In [26]:
# Another monkey-patch
def __matchReactantToTemplate(self, reactant, templateReactant):
        """
        Return a complete list of the mappings if the provided reactant 
        matches the provided template reactant, or an empty list if not.
        """
        from rmgpy.data.base import LogicNode
        from rmgpy.molecule import Group

        if isinstance(templateReactant, list): templateReactant = templateReactant[0]
        struct = templateReactant.item
        
        if isinstance(struct, LogicNode):
            mappings = []
            for child_structure in struct.getPossibleStructures(self.groups.entries):
                mappings.extend(reactant.findSubgraphIsomorphisms(child_structure))
            return mappings
        elif isinstance(struct, Group):
            ## MOD
            template_labels = struct.getLabeledAtoms()
            initial_mapping = {}
            for label, atom in reactant.getLabeledAtoms().items():
                initial_mapping[atom] = template_labels[label]
            ## END MOD
            return reactant.findSubgraphIsomorphisms(struct, initial_mapping)
        else:
            raise NotImplementedError("Not expecting template of type {}".format(type(struct)))
    
rmgpy.data.kinetics.family.KineticsFamily._KineticsFamily__matchReactantToTemplate = __matchReactantToTemplate
In [27]:
mprint("# Some roaming reactions!")
all_roaming_reactions_parents = {}
all_roaming_reactions_by_parent = defaultdict(list)
for r1,r2 in matched_reactions.iteritems():
    roaming = rmgDatabase.kinetics.families['R_Roaming']
    roaming_alpha = rmgDatabase.kinetics.families['R_Roaming_alpha']
    print "The homolytic fission reaction"
    display(r2)
    if len(r2.reactants) == 1:
        reactant = r2.reactants[0]
        reactant.clearLabeledAtoms()
        for label, atom in r2.labeledProductAtoms:
            atom.label = label
        reverse = False
    elif len(r2.products) == 1:
        raise NotImplementedError, "Not got the label passing fixed in this direction"
        reactant = r2.products[0]
        for label,atom in r2.labeledAtoms:
            atom.label = label
        reverse = True
    else:
        raise Exception
    #print reactant.toAdjacencyList()

    roaming_reactions = roaming.generateReactions([reactant])
    roaming_reactions.extend(roaming_alpha.generateReactions([reactant]))

    # Restore the labels in case they got erased
    reactant.clearLabeledAtoms()
    for label, atom in r2.labeledProductAtoms:
        atom.label = label
    # now swap the labels
    old_labels = reactant.getLabeledAtoms()
    old_labels['*1'].label='*2'
    old_labels['*2'].label='*1'
    roaming_reactions.extend(roaming.generateReactions([reactant]))
    roaming_reactions.extend(roaming_alpha.generateReactions([reactant]))

    print "Has {} roaming reaction alternative pathways:".format(len(roaming_reactions))
    for r in roaming_reactions:
        display(r)
        if r.family != 'R_Roaming':
            print "Generated by reaction family {}".format(r.family)
        all_roaming_reactions_parents[r] = r1
        all_roaming_reactions_by_parent[r1].append(r)
    print '-'*40

Some roaming reactions!

The homolytic fission reaction
Has 0 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 0 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 0 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 0 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 0 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 1 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 1 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 1 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 1 roaming reaction alternative pathways:
Generated by reaction family R_Roaming_alpha
----------------------------------------
The homolytic fission reaction
Has 0 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 1 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 1 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 1 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 1 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 1 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 1 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 2 roaming reaction alternative pathways:
Generated by reaction family R_Roaming_alpha
----------------------------------------
The homolytic fission reaction
Has 1 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 1 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 2 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 1 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 1 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 2 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 1 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 2 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 1 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 1 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 0 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 1 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 1 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 1 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 1 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 1 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 0 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 2 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 0 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 1 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 2 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 2 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 1 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 1 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 2 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 3 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 1 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 1 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 2 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 2 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 2 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 1 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 1 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 2 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 1 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 0 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 0 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 1 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 3 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 2 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 2 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 1 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 3 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 2 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 1 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 1 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 2 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 2 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 1 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 2 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 2 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 1 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 1 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 1 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 1 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 1 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 1 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 1 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 0 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 1 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 1 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 0 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 1 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 1 roaming reaction alternative pathways:
----------------------------------------
The homolytic fission reaction
Has 1 roaming reaction alternative pathways:
----------------------------------------
In [28]:
n = len(all_roaming_reactions_parents)
m = len(all_roaming_reactions_by_parent)
print "In total there are {} roaming reactions generated from {} parent reactions".format(n,m)
In total there are 94 roaming reactions generated from 69 parent reactions
In [29]:
# What types of kinetics do we need to deal with?
kinetics_types = Counter()
for r in all_roaming_reactions_by_parent.keys():
    kinetics_types[type(r.kinetics)] += 1
kinetics_types
Out[29]:
Counter({cantera.ck2cti.Arrhenius: 36,
         cantera.ck2cti.PDepArrhenius: 2,
         cantera.ck2cti.Falloff: 31})
In [30]:
species_lists_by_formula = defaultdict(list)
for species in speciesList:
    species_lists_by_formula[species.molecule[0].getFormula()].append(species)
    
    
all_new_species = []
for r, parent in all_roaming_reactions_parents.iteritems():
    # convert the reactants from Molecules into Species, although these won't be new
    assert len(r.reactants) == 1, "Going in unexpected direction"
    molecule = r.reactants[0]
    if type(molecule) == rmgpy.species.Species:
        # already converted (run this cell before?). Convert back!
        molecule = molecule.molecule[0]
    formula = molecule.getFormula()
    possibles = species_lists_by_formula[formula]
    for possible in possibles:
        if possible.isIsomorphic(molecule):
            species = possible
            break
    else:
        raise Exception("Wasn't expecting a new species as a reactant!")
    r.reactants[0] = species
            
    # now convert the products
    new_species = []
    for i, molecule in enumerate(r.products):
        if type(molecule) == rmgpy.species.Species:
            # already converted (run this cell before?). Convert back!
            molecule = molecule.molecule[0]
        formula = molecule.getFormula()
        possibles = species_lists_by_formula[formula]
        for possible in possibles:
            if possible.isIsomorphic(molecule):
                species = possible
                break
        else: # didn't break, so didn't find existing species
            species = rmgpy.species.Species(molecule=[molecule])
            species.generateResonanceIsomers()
            species_lists_by_formula[formula].append(species)
            new_species.append(species)
        r.products[i] = species
    if new_species:
        print "The roaming reaction"
        display(r)
        print "generated {} new species".format(len(new_species))
        for s in new_species:
            display(s)
            print s.molecule[0].getFormula(), s.molecule[0].toSMILES()
        print '-'*40
        all_new_species.extend(new_species)
        del(r.pairs) # no longer points to reagents, and not useful anyway
        
The roaming reaction
generated 1 new species
C4H4 C=C=C=C
----------------------------------------
The roaming reaction
generated 1 new species
C2H2O3 O=COC=O
----------------------------------------
The roaming reaction
generated 1 new species
C4H8O2 CC(=O)C(C)O
----------------------------------------
The roaming reaction
generated 1 new species
C4H6 C#CCC
----------------------------------------
The roaming reaction
generated 1 new species
C4H8O2 CC(O)CC=O
----------------------------------------
The roaming reaction
generated 1 new species
C4H8O2 O=CCCCO
----------------------------------------
The roaming reaction
generated 1 new species
C4H8O2 CC(=O)CCO
----------------------------------------
The roaming reaction
generated 1 new species
C4H8O2 CCCC(=O)O
----------------------------------------
The roaming reaction
generated 1 new species
C4H8O2 CCC(=O)CO
----------------------------------------
The roaming reaction
generated 1 new species
C4H8O2 CCC(O)C=O
----------------------------------------
The roaming reaction
generated 1 new species
C4H8O2 CC(C=O)CO
----------------------------------------
The roaming reaction
generated 1 new species
C4H8O2 CC(C)C(=O)O
----------------------------------------
In [31]:
mprint("## In total there are {} new species".format(len(all_new_species)))
mprint("We will need to get names, thermo, etc. for these")
for s in all_new_species:
    display(s)
    print s.molecule[0].getFormula(), s.molecule[0].toSMILES()

In total there are 12 new species

We will need to get names, thermo, etc. for these

C4H4 C=C=C=C
C2H2O3 O=COC=O
C4H8O2 CC(=O)C(C)O
C4H6 C#CCC
C4H8O2 CC(O)CC=O
C4H8O2 O=CCCCO
C4H8O2 CC(=O)CCO
C4H8O2 CCCC(=O)O
C4H8O2 CCC(=O)CO
C4H8O2 CCC(O)C=O
C4H8O2 CC(C=O)CO
C4H8O2 CC(C)C(=O)O
In [32]:
# Save/add these in a csv file, for use in the other notebook.
csv_filename = 'new-species-{}.csv'.format(model_name)
import pandas as pd
if not os.path.exists(csv_filename):
    with open(csv_filename,'w') as f:
        print "Making new file {}".format(csv_filename)
        f.write('SMILES, Name\n')
df = pd.read_csv(csv_filename, index_col=0)
for s in all_new_species:
    smiles = s.molecule[0].toSMILES()
    if smiles not in df.index:
        print "Adding {} to csv file".format(smiles)
        df.loc[smiles] = None
df.to_csv(csv_filename)
df
Out[32]:
Name
SMILES
CCC(=O)CO hydroxybutan2one
C=C=C=C butatriene
O=COC=O formicanhydride
CC(=O)C(C)O Acethoin
CC(C)C(=O)O isobutyricacid
C#CCC but1yne
CCC(O)C=O hydroxybutanal
O=CCCCO hydroxybutan4al
CCCC(=O)O butanoicacid
CC(C=O)CO C(OH)C(C)CHO
CC(=O)CCO hydroxybutan3one
CC(O)CC=O Acetaldol

New Species Data

Now go off and run the second workbook to generate data for the new species, then come back here to read it in.

In [33]:
# Naming new species
df = pd.read_csv(csv_filename, index_col=0)
for s in all_new_species:
    smiles = s.molecule[0].toSMILES()
    s.label = df.loc[smiles][0]
    display(s)
    print s.label
butatriene
formicanhydride
Acethoin
but1yne
Acetaldol
hydroxybutan4al
hydroxybutan3one
butanoicacid
hydroxybutan2one
hydroxybutanal
C(OH)C(C)CHO
isobutyricacid
In [34]:
new_parser = ck2cti.Parser()
new_thermo_filename = 'new-species-{}-thermo.txt'.format(model_name)
new_transport_filename = 'new-species-{}-transport.txt'.format(model_name)

surfaces = new_parser.convertMech(inputFile=new_thermo_filename,
                              thermoFile=None,
                              transportFile=new_transport_filename,
                                surfaceFile=None,
                              phaseName='gas',
                              outName=os.path.join(outdir, model_name+'.new-species.cti'),
                                  permissive=True)
# Copy the new species definitions into the previous parser
parser.speciesDict.update(new_parser.speciesDict)
for s in new_parser.speciesList:
    if s not in parser.speciesList:
        parser.speciesList.append(s)
parser.species_tokens.update(new_parser.species_tokens)
Wrote CTI mechanism file to 'CanteraFiles/butanol.new-species.cti'.
Mechanism contains 12 species and 0 reactions.

Model generation

Now how about finally making some alterative models?

In [35]:
"""
Remove reactions that make products we don't have in the model
because we don't have names, thermo, transport data yet.

For this check, we assume that anything with a label, we have data for,
and anything we don't have data for, does not have a label.

Now that we have generated data for the new species, this cell
should do nothing and report nothing.
"""
to_remove = []
for roaming,parent in all_roaming_reactions_parents.iteritems():
    if all([s.label for s in roaming.products]):
        # all species are identified and in model
        continue # to next reaction
    to_remove.append((roaming, parent))
for roaming,parent in to_remove:
    print("Removing roaming reaction {} because a product is not in the model".format(roaming))
    del(all_roaming_reactions_parents[roaming])
    all_roaming_reactions_by_parent[parent].remove(roaming)
In [36]:
def to_cantera(rmg_reaction, cti_parent):
    "Make a cantera reaction, and copy across the kinetics"
    if not all([s.label for s in rmg_reaction.products]):
        raise NotImplementedError("Generated species {} with no data".format(s.molecule[0].toSMILES()))
    reactants = [(1, parser.speciesDict[s.label]) for s in rmg_reaction.reactants]
    products = [(1, parser.speciesDict[s.label]) for s in rmg_reaction.products]
    cti_reaction = ck2cti.Reaction(reactants=reactants, products=products)
    cti_reaction.comment = "ROAMING: from parent reaction {} {!s}".format(cti_parent.index, cti_parent)
    k = cti_parent.kinetics
    if isinstance(k, ck2cti.Arrhenius):
        cti_reaction.kinetics = ck2cti.Arrhenius(A=k.A, T0=k.T0, b=k.b, Ea=k.Ea)
    elif isinstance(k, ck2cti.Falloff):
        klo = k.arrheniusLow
        khi = k.arrheniusHigh
        cti_reaction.kinetics = ck2cti.Falloff(
            arrheniusLow = ck2cti.Arrhenius(A=klo.A, T0=klo.T0, b=klo.b, Ea=klo.Ea, parser=parser),
            arrheniusHigh = ck2cti.Arrhenius(A=khi.A, T0=khi.T0, b=khi.b, Ea=khi.Ea, parser=parser),
            efficiencies = k.efficiencies,
            F = k.F,
        )
        cti_reaction.thirdBody = cti_parent.thirdBody
    elif isinstance(k, ck2cti.PDepArrhenius):
        cti_reaction.kinetics = ck2cti.PDepArrhenius(
            pressures = k.pressures,
            arrhenius = [ck2cti.Arrhenius(A=k0.A, T0=k0.T0, b=k0.b, Ea=k0.Ea, parser=parser) for k0 in k.arrhenius],
            parser = parser,
        )
        cti_reaction.thirdBody = cti_parent.thirdBody
    else:
        cti_reaction.kinetics = ck2cti.Arrhenius(A=(0, '1/s'), b=0, Ea=(0, 'cal/mol'))
        cti_reaction.comment += "\n  Parent kinetics of type {} couldn't be copied.".format(type(cti_parent.kinetics))
    cti_reaction.kinetics.parser = cti_parent.kinetics.parser
    cti_reaction.line_number = cti_parent.line_number
    return cti_reaction

We want to store the number of roaming reactions as an attribute number_of_roaming_reactions on the reaction object, that it knows how to print itself later.

In [37]:
# More monkeypatching, so that it works for FallOff and PLOG reactions

# When you try to set the number of roaming reactions on a Falloff kinetics type
# store that on BOTH of the Arrhenius objects (high and low),
# so they can both report the ALPHA thing
def falloff_roaming_setter(self, value):
    self.arrheniusHigh.number_of_roaming_reactions = value
    self.arrheniusLow.number_of_roaming_reactions = value
def falloff_roaming_getter(self):
    return self.arrheniusHigh.number_of_roaming_reactions
ck2cti.Falloff.number_of_roaming_reactions = property(falloff_roaming_getter, falloff_roaming_setter)

# When you try to set the number of roaming reactions on a PDepArrhenius kinetics type
# store that on EACH of the Arrhenius objects, so they can each report the ALPHA thing
def plog_roaming_setter(self, value):
    for k in self.arrhenius:
        k.number_of_roaming_reactions = value
def plog_roaming_getter(self):
    return self.arrhenius[0].number_of_roaming_reactions
ck2cti.PDepArrhenius.number_of_roaming_reactions = property(plog_roaming_getter, plog_roaming_setter)
In [38]:
# Monkey patch the ck2cti translator
def arrhenius_rateStr(self):
    number_of_roaming_reactions = getattr(self, 'number_of_roaming_reactions', 0)
    if number_of_roaming_reactions > 0:
        Anumber = '(ALPHA/{1:d}.)*{0:e}'.format(self.A[0], number_of_roaming_reactions)
    elif number_of_roaming_reactions < 0:
        Anumber = '(1-ALPHA)*{0:e}'.format(self.A[0])
    else:
        Anumber = '{0:e}'.format(self.A[0])
    
    if ck2cti.compatible_quantities(self.parser.output_quantity_units, self.A[1]):
        A = '{0}'.format(Anumber)
    else:
        A = "({0}, '{1}')".format(Anumber, self.A[1])

    if 'k' + self.Ea[1] == self.parser.output_energy_units:
        # If stored in kcal but output is in cal, just convert
        self.Ea[1] = self.parser.output_energy_units
        self.Ea[0] *= 1000.0
    if self.Ea[1] == self.parser.output_energy_units:
        Ea = str(self.Ea[0])
    else:
        Ea = "({0}, '{1}')".format(*self.Ea)
    return '[{0}, {1}, {2}]'.format(A, self.b, Ea)
ck2cti.Arrhenius.rateStr = arrhenius_rateStr
In [39]:
# Another monkey-patch
def pdeparrhenius_to_cti(self, reactantstr, arrow, productstr, indent=0):
    """
    This is actually the method in the dev version of cantera,
    as of 2017-02-20 (7b7aea2) but not yet in the 2.3.0a3 release.
    """
    rxnstring = reactantstr + arrow + productstr
    lines = ['pdep_arrhenius({0!r},'.format(rxnstring)]
    prefix = ' '*(indent+15)
    template = '[({0}, {1!r}), {2}],'
    for pressure, arrhenius in zip(self.pressures[0], self.arrhenius):
        lines.append(prefix + template.format(pressure,
                                              self.pressures[1],
                                              arrhenius.rateStr()[1:-1]))
    lines[-1] = lines[-1][:-1] + ')'
    return '\n'.join(lines)
ck2cti.PDepArrhenius.to_cti = pdeparrhenius_to_cti
In [40]:
def print_comment(r):
    if r.comment.strip():
        for line in r.comment.split('\n'):
            print "# "+line
In [41]:
def reactions_are_duplicate(r1,r2):
    """
    Compare two cantera-style reactions and 
    return True iff they're equivalent (ignoring
    pressure-depndence, and direction)
    """
    if ((Counter(expand_reagent_list(r1.reactants)) == Counter(expand_reagent_list(r2.reactants))) and 
        (Counter(expand_reagent_list(r1.products)) == Counter(expand_reagent_list(r2.products)))  
       ): return True
    if ((Counter(expand_reagent_list(r1.reactants)) == Counter(expand_reagent_list(r2.products))) and 
        (Counter(expand_reagent_list(r1.products)) == Counter(expand_reagent_list(r2.reactants)))
       ): return True
    return False
In [42]:
def find_duplicate(reaction, list_of_reactions=parser.reactions):
    """
    If the reaction has a duplicate already in the list_of_reactions,
    returns that duplicate, else None.
    """
    # no attempt at efficiency here
    for r in list_of_reactions:
        if reactions_are_duplicate(r,reaction):
            return r
    else:
        return None
In [43]:
# convert to cti
rmg_to_cti_reaction_dict = {}
for rmg_reaction, cti_parent in all_roaming_reactions_parents.items():
    cantera_reaction = to_cantera(rmg_reaction, cti_parent)
    rmg_to_cti_reaction_dict[rmg_reaction] = cantera_reaction
print "Converted {} reactions into cantera objects".format(len(rmg_to_cti_reaction_dict))
Converted 94 reactions into cantera objects
In [44]:
# Detect duplicates
mprint("## Duplicates\nthat you should manually remove from the CTI file if not intended.")
roaming_duplicates = OrderedDict()
for rmg_reaction, cti_parent in all_roaming_reactions_parents.items():
    cantera_reaction = rmg_to_cti_reaction_dict[rmg_reaction]
    dup = find_duplicate(cantera_reaction, list_of_reactions=parser.reactions)
    if dup:
        cantera_reaction.comment += '\n  This is a DUPLICATE of original rxn {} {!s}'.format(dup.index, dup)
        dup.comment += '\n  This DUPLICATED by new roaming rxn {!s}'.format(cantera_reaction)
        roaming_duplicates[cantera_reaction] = dup
        display(rmg_reaction)
        cantera_reaction.duplicate = True
        dup.duplicate = True
        print "{!s} is a duplicate of {}:".format(cantera_reaction, dup.index, dup)
        print dup.to_cti()
    rmg_to_cti_reaction_dict[rmg_reaction] = cantera_reaction
    # print cantera_reaction.comment
    # print cantera_reaction.to_cti()
print "\nOf the {} roaming reactions, {} are duplicates of things already there".format(len(all_roaming_reactions_parents),len(roaming_duplicates))

Duplicates

that you should manually remove from the CTI file if not intended.

ch3cho (+ M) <=> ch4 + co (+ M) is a duplicate of 245:
falloff_reaction('ch3cho (+ M) <=> ch4 + co (+ M)',
                 kf=[2.720000e+21, -1.74, 86355.02],
                 kf0=[1.144180e+58, -11.3, 95912.49],
                 falloff=Troe(A=0.00249, T3=718.11861, T1=6.08949, T2=3780.01844),
                 options='duplicate')
nc4h9oh (+ M) <=> h2o + c4h8-1 (+ M) is a duplicate of 1539:
falloff_reaction('nc4h9oh (+ M) <=> c4h8-1 + h2o (+ M)',
                 kf=[3.520000e+13, 0.0, 67230.0],
                 kf0=[1.690000e+75, -17.04, 64750.0],
                 falloff=Troe(A=0.08, T3=1.0, T1=9924000000.0, T2=9924000000.0),
                 options='duplicate')
sc4h9oh (+ M) <=> h2o + c4h8-2 (+ M) is a duplicate of 1742:
falloff_reaction('sc4h9oh (+ M) <=> h2o + c4h8-2 (+ M)',
                 kf=[3.500000e+13, 0.0, 65900.0],
                 kf0=[4.627300e+101, -24.473, 83466.0],
                 falloff=Troe(A=0.0029457, T3=293.4, T1=52057000000.0, T2=5081.2),
                 options='duplicate')
sc4h9oh (+ M) <=> h2o + c4h8-1 (+ M) is a duplicate of 1741:
falloff_reaction('sc4h9oh (+ M) <=> h2o + c4h8-1 (+ M)',
                 kf=[5.000000e+13, 0.0, 67960.0],
                 kf0=[4.820600e+94, -22.464, 83529.0],
                 falloff=Troe(A=0.00028246, T3=361.97, T1=12873.0, T2=4491.0),
                 options='duplicate')
c4h6 <=> h2 + c4h4 is a duplicate of 891:
reaction('c4h6 <=> c4h4 + h2', [2.500000e+15, 0.0, 94700.0],
         options='duplicate')
ic4h9oh (+ M) <=> h2o + ic4h8 (+ M) is a duplicate of 1750:
falloff_reaction('ic4h9oh (+ M) <=> h2o + ic4h8 (+ M)',
                 kf=[4.560000e+13, 0.0, 64970.0],
                 kf0=[6.096700e+101, -23.781, 106720.0],
                 falloff=Troe(A=0.20182, T3=1286.4, T1=1282.4, T2=67921.0),
                 options='duplicate')
c2h5oh <=> h2o + c2h4 is a duplicate of 358:
pdep_arrhenius('c2h5oh <=> c2h4 + h2o',
               [(0.001, 'atm'), 3.410000e+59, -14.2, 83672.57],
               [(0.01, 'atm'), 2.620000e+57, -13.3, 85262.17],
               [(0.1, 'atm'), 1.650000e+52, -11.5, 84745.55],
               [(1.0, 'atm'), 5.230000e+43, -8.9, 81506.74],
               [(10.0, 'atm'), 4.590000e+32, -5.6, 76062.36],
               [(100.0, 'atm'), 3.840000e+20, -2.06, 69465.52],
               options='duplicate')
tc4h9oh (+ M) <=> h2o + ic4h8 (+ M) is a duplicate of 1731:
falloff_reaction('tc4h9oh (+ M) <=> h2o + ic4h8 (+ M)',
                 kf=[1.480000e+14, 0.0, 64200.0],
                 kf0=[5.870500e+95, -22.63, 79171.0],
                 falloff=Troe(A=3.2677e-05, T3=332.6, T1=14141000000.0, T2=3823.8),
                 options='duplicate')
c4h6 <=> h2 + c4h4 is a duplicate of 891:
reaction('c4h6 <=> c4h4 + h2', [2.500000e+15, 0.0, 94700.0],
         options='duplicate')

Of the 94 roaming reactions, 9 are duplicates of things already there
In [45]:
mprint("## Roaming pathways, from different parents, that end up duplicates.")
new_roaming_reactions = rmg_to_cti_reaction_dict.values()
for i, cantera_reaction in enumerate(new_roaming_reactions):
    dup = find_duplicate(cantera_reaction, list_of_reactions=new_roaming_reactions[i+1:])
    if dup:
        cantera_reaction.comment += '\n  This is a DUPLICATE of another roaming pathway {!s}'.format(dup)
        cantera_reaction.duplicate = True
        dup.comment += '\n  This is a DUPLICATE of another roaming pathway {!s}'.format(dup)
        dup.duplicate = True
        print "{!s} is a duplicate:".format(cantera_reaction)
        print_comment(cantera_reaction)
        print cantera_reaction.to_cti()
        print_comment(dup)
        print dup.to_cti()
        print

Roaming pathways, from different parents, that end up duplicates.

sc4h9oh (+ M) <=> h2 + c4h7oh1-3 (+ M) is a duplicate:
# ROAMING: from parent reaction 1738 sc4h9oh (+ M) <=> h + sc4h8oh-2 (+ M)
#   This is a DUPLICATE of another roaming pathway sc4h9oh (+ M) <=> h2 + c4h7oh1-3 (+ M)
falloff_reaction('sc4h9oh (+ M) <=> h2 + c4h7oh1-3 (+ M)',
                 kf=[3.630000e+20, -1.323, 102100.0],
                 kf0=[2.706300e+71, -15.706, 113570.0],
                 falloff=Troe(A=0.18033, T3=274.39, T1=10791000.0, T2=2148.0),
                 options='duplicate')
# ROAMING: from parent reaction 1739 sc4h9oh (+ M) <=> h + sc4h8oh-3 (+ M)
#   This is a DUPLICATE of another roaming pathway sc4h9oh (+ M) <=> h2 + c4h7oh1-3 (+ M)
falloff_reaction('sc4h9oh (+ M) <=> h2 + c4h7oh1-3 (+ M)',
                 kf=[1.310000e+16, 0.018, 101830.0],
                 kf0=[1.741400e+67, -14.434, 113350.0],
                 falloff=Troe(A=0.16051, T3=285.87, T1=1544400.0, T2=2057.6),
                 options='duplicate')

c3h6 <=> h2 + c3h4-p is a duplicate:
# ROAMING: from parent reaction 542 c3h6 <=> c3h5-t + h
#   This is a DUPLICATE of another roaming pathway c3h6 <=> h2 + c3h4-p
reaction('c3h6 <=> h2 + c3h4-p', [5.620000e+71, -16.58, 139300.0],
         options='duplicate')
# ROAMING: from parent reaction 541 c3h6 <=> c3h5-s + h
#   This is a DUPLICATE of another roaming pathway c3h6 <=> h2 + c3h4-p
reaction('c3h6 <=> h2 + c3h4-p', [7.710000e+69, -16.09, 140000.0],
         options='duplicate')

c4h6 <=> h2 + c4h4 is a duplicate:
# ROAMING: from parent reaction 890 c4h6 <=> c4h5-n + h
#   This is a DUPLICATE of original rxn 891 c4h6 <=> c4h4 + h2
#   This is a DUPLICATE of another roaming pathway c4h6 <=> h2 + c4h4
reaction('c4h6 <=> h2 + c4h4', [5.300000e+44, -8.62, 123608.0],
         options='duplicate')
# ROAMING: from parent reaction 889 c4h6 <=> c4h5-i + h
#   This is a DUPLICATE of original rxn 891 c4h6 <=> c4h4 + h2
#   This is a DUPLICATE of another roaming pathway c4h6 <=> h2 + c4h4
reaction('c4h6 <=> h2 + c4h4', [5.700000e+36, -6.27, 112353.0],
         options='duplicate')

sc4h9oh (+ M) <=> h2 + c2h5coch3 (+ M) is a duplicate:
# ROAMING: from parent reaction 1740 sc4h9oh (+ M) <=> h + sc4h9o (+ M)
#   This is a DUPLICATE of another roaming pathway sc4h9oh (+ M) <=> h2 + c2h5coch3 (+ M)
falloff_reaction('sc4h9oh (+ M) <=> h2 + c2h5coch3 (+ M)',
                 kf=[2.200000e+14, 0.245, 104850.0],
                 kf0=[8.597000e+62, -13.509, 115890.0],
                 falloff=Troe(A=0.48822, T3=27.191, T1=21032000000.0, T2=2246100.0),
                 options='duplicate')
# ROAMING: from parent reaction 1737 sc4h9oh (+ M) <=> h + sc4h8oh-1 (+ M)
#   This is a DUPLICATE of another roaming pathway sc4h9oh (+ M) <=> h2 + c2h5coch3 (+ M)
falloff_reaction('sc4h9oh (+ M) <=> h2 + c2h5coch3 (+ M)',
                 kf=[8.860000e+18, -0.818, 94238.0],
                 kf0=[6.424200e+75, -16.831, 106460.0],
                 falloff=Troe(A=0.10896, T3=86.767, T1=5708700000.0, T2=2439.2),
                 options='duplicate')

ic4h10 <=> h2 + ic4h8 is a duplicate:
# ROAMING: from parent reaction 1223 ic4h10 <=> tc4h9 + h
#   This is a DUPLICATE of another roaming pathway ic4h10 <=> h2 + ic4h8
reaction('ic4h10 <=> h2 + ic4h8', [2.510000e+98, -23.81, 145300.0],
         options='duplicate')
# ROAMING: from parent reaction 1224 ic4h10 <=> ic4h9 + h
#   This is a DUPLICATE of another roaming pathway ic4h10 <=> h2 + ic4h8
reaction('ic4h10 <=> h2 + ic4h8', [9.850000e+95, -23.11, 147600.0],
         options='duplicate')

sc4h9oh (+ M) <=> h2 + c4h7oh1-2 (+ M) is a duplicate:
# ROAMING: from parent reaction 1736 sc4h9oh (+ M) <=> h + sc4h8ohm (+ M)
#   This is a DUPLICATE of another roaming pathway sc4h9oh (+ M) <=> h2 + c4h7oh1-2 (+ M)
falloff_reaction('sc4h9oh (+ M) <=> h2 + c4h7oh1-2 (+ M)',
                 kf=[1.330000e+16, 0.017, 102430.0],
                 kf0=[5.218000e+66, -14.289, 113840.0],
                 falloff=Troe(A=0.089358, T3=336.51, T1=7835200000.0, T2=1663.2),
                 options='duplicate')
# ROAMING: from parent reaction 1737 sc4h9oh (+ M) <=> h + sc4h8oh-1 (+ M)
#   This is a DUPLICATE of another roaming pathway sc4h9oh (+ M) <=> h2 + c4h7oh1-2 (+ M)
falloff_reaction('sc4h9oh (+ M) <=> h2 + c4h7oh1-2 (+ M)',
                 kf=[8.860000e+18, -0.818, 94238.0],
                 kf0=[6.424200e+75, -16.831, 106460.0],
                 falloff=Troe(A=0.10896, T3=86.767, T1=5708700000.0, T2=2439.2),
                 options='duplicate')

sc4h9oh (+ M) <=> h2 + c4h7oh2-2 (+ M) is a duplicate:
# ROAMING: from parent reaction 1738 sc4h9oh (+ M) <=> h + sc4h8oh-2 (+ M)
#   This is a DUPLICATE of another roaming pathway sc4h9oh (+ M) <=> h2 + c4h7oh2-2 (+ M)
falloff_reaction('sc4h9oh (+ M) <=> h2 + c4h7oh2-2 (+ M)',
                 kf=[3.630000e+20, -1.323, 102100.0],
                 kf0=[2.706300e+71, -15.706, 113570.0],
                 falloff=Troe(A=0.18033, T3=274.39, T1=10791000.0, T2=2148.0),
                 options='duplicate')
# ROAMING: from parent reaction 1737 sc4h9oh (+ M) <=> h + sc4h8oh-1 (+ M)
#   This is a DUPLICATE of another roaming pathway sc4h9oh (+ M) <=> h2 + c4h7oh2-2 (+ M)
falloff_reaction('sc4h9oh (+ M) <=> h2 + c4h7oh2-2 (+ M)',
                 kf=[8.860000e+18, -0.818, 94238.0],
                 kf0=[6.424200e+75, -16.831, 106460.0],
                 falloff=Troe(A=0.10896, T3=86.767, T1=5708700000.0, T2=2439.2),
                 options='duplicate')

c4h10 (+ M) <=> c2h6 + c2h4 (+ M) is a duplicate:
# ROAMING: from parent reaction 767 c4h10 (+ M) <=> c2h5 + c2h5 (+ M)
#   This is a DUPLICATE of another roaming pathway c4h10 (+ M) <=> c2h6 + c2h4 (+ M)
falloff_reaction('c4h10 (+ M) <=> c2h6 + c2h4 (+ M)',
                 kf=[1.355400e+37, -6.036, 92929.0],
                 kf0=[4.720000e+18, 0.0, 49578.0],
                 falloff=Troe(A=0.079982, T3=1e-20, T1=32428.0, T2=4858.2),
                 options='duplicate')
# ROAMING: from parent reaction 767 c4h10 (+ M) <=> c2h5 + c2h5 (+ M)
#   This is a DUPLICATE of another roaming pathway c4h10 (+ M) <=> c2h6 + c2h4 (+ M)
falloff_reaction('c4h10 (+ M) <=> c2h6 + c2h4 (+ M)',
                 kf=[1.355400e+37, -6.036, 92929.0],
                 kf0=[4.720000e+18, 0.0, 49578.0],
                 falloff=Troe(A=0.079982, T3=1e-20, T1=32428.0, T2=4858.2),
                 options='duplicate')

ic4h9oh (+ M) <=> h2 + ic3h6choh (+ M) is a duplicate:
# ROAMING: from parent reaction 1746 ic4h9oh (+ M) <=> ic4h8oh-1 + h (+ M)
#   This is a DUPLICATE of another roaming pathway ic4h9oh (+ M) <=> h2 + ic3h6choh (+ M)
falloff_reaction('ic4h9oh (+ M) <=> h2 + ic3h6choh (+ M)',
                 kf=[5.680000e+16, -0.297, 95908.0],
                 kf0=[1.889500e+49, -9.561, 90472.0],
                 falloff=Troe(A=2.0948e-05, T3=1164.2, T1=16818000000.0, T2=3704.9),
                 options='duplicate')
# ROAMING: from parent reaction 1747 ic4h9oh (+ M) <=> ic4h8oh-2 + h (+ M)
#   This is a DUPLICATE of another roaming pathway ic4h9oh (+ M) <=> h2 + ic3h6choh (+ M)
falloff_reaction('ic4h9oh (+ M) <=> h2 + ic3h6choh (+ M)',
                 kf=[1.700000e+17, -0.467, 98199.0],
                 kf0=[2.477900e+46, -8.823, 90945.0],
                 falloff=Troe(A=0.14595, T3=1034.0, T1=1.0695e+11, T2=5129.2),
                 options='duplicate')

ic4h9oh (+ M) <=> h2 + ic3h7cho (+ M) is a duplicate:
# ROAMING: from parent reaction 1746 ic4h9oh (+ M) <=> ic4h8oh-1 + h (+ M)
#   This is a DUPLICATE of another roaming pathway ic4h9oh (+ M) <=> h2 + ic3h7cho (+ M)
falloff_reaction('ic4h9oh (+ M) <=> h2 + ic3h7cho (+ M)',
                 kf=[5.680000e+16, -0.297, 95908.0],
                 kf0=[1.889500e+49, -9.561, 90472.0],
                 falloff=Troe(A=2.0948e-05, T3=1164.2, T1=16818000000.0, T2=3704.9),
                 options='duplicate')
# ROAMING: from parent reaction 1749 ic4h9oh (+ M) <=> ic4h9o + h (+ M)
#   This is a DUPLICATE of another roaming pathway ic4h9oh (+ M) <=> h2 + ic3h7cho (+ M)
falloff_reaction('ic4h9oh (+ M) <=> h2 + ic3h7cho (+ M)',
                 kf=[1.200000e+15, 0.016, 105180.0],
                 kf0=[1.493900e+36, -6.144, 94567.0],
                 falloff=Troe(A=0.49994, T3=6209.6, T1=665.5, T2=2900000.0),
                 options='duplicate')

ic4h9oh (+ M) <=> h2 + ic3h5ch2oh (+ M) is a duplicate:
# ROAMING: from parent reaction 1747 ic4h9oh (+ M) <=> ic4h8oh-2 + h (+ M)
#   This is a DUPLICATE of another roaming pathway ic4h9oh (+ M) <=> h2 + ic3h5ch2oh (+ M)
falloff_reaction('ic4h9oh (+ M) <=> h2 + ic3h5ch2oh (+ M)',
                 kf=[1.700000e+17, -0.467, 98199.0],
                 kf0=[2.477900e+46, -8.823, 90945.0],
                 falloff=Troe(A=0.14595, T3=1034.0, T1=1.0695e+11, T2=5129.2),
                 options='duplicate')
# ROAMING: from parent reaction 1748 ic4h9oh (+ M) <=> ic4h8oh-3 + h (+ M)
#   This is a DUPLICATE of another roaming pathway ic4h9oh (+ M) <=> h2 + ic3h5ch2oh (+ M)
falloff_reaction('ic4h9oh (+ M) <=> h2 + ic3h5ch2oh (+ M)',
                 kf=[5.000000e+17, -0.462, 102490.0],
                 kf0=[3.316700e+41, -7.365, 92821.0],
                 falloff=Troe(A=0.27069, T3=2741.9, T1=128.72, T2=9656.2),
                 options='duplicate')

In [46]:
for index, cti_reaction in enumerate(parser.reactions):
    roaming = all_roaming_reactions_by_parent[cti_reaction]
    if roaming:
        cti_reaction.comment += "\nThe following reaction has generated these roaming pathways:"
        for r in roaming:
            cti_reaction.comment +="\n  {0!s}".format(r)
        cti_reaction.kinetics.number_of_roaming_reactions = -1*len(roaming)
        
        print_comment(cti_reaction)
        print cti_reaction.to_cti()
        
        is_arrhenius = isinstance(cti_reaction.kinetics, ck2cti.Arrhenius)

        for rmg_reaction in roaming:
            roaming_reaction = rmg_to_cti_reaction_dict[rmg_reaction]
            roaming_reaction.kinetics.number_of_roaming_reactions = len(roaming)
            print_comment(roaming_reaction)
            print roaming_reaction.to_cti()
            
            parser.reactions.append(roaming_reaction)
# 
# The following reaction has generated these roaming pathways:
#   ch3oh <=> h2 + ch2o
falloff_reaction('ch3oh (+ M) <=> ch2oh + h (+ M)',
                 kf=[(1-ALPHA)*7.896000e-03, 5.038, 84467.37],
                 kf0=[(1-ALPHA)*3.390000e+42, -7.24388, 105230.2692],
                 falloff=Troe(A=-73.91, T3=37053.795, T1=41496.4, T2=5220.0))
# ROAMING: from parent reaction 117 ch3oh (+ M) <=> ch2oh + h (+ M)
falloff_reaction('ch3oh (+ M) <=> h2 + ch2o (+ M)',
                 kf=[(ALPHA/1.)*7.896000e-03, 5.038, 84467.37],
                 kf0=[(ALPHA/1.)*3.390000e+42, -7.24388, 105230.2692],
                 falloff=Troe(A=-73.91, T3=37053.795, T1=41496.4, T2=5220.0))
# 
# The following reaction has generated these roaming pathways:
#   ch3o2h <=> h2o + ch2o
reaction('ch3o2h <=> ch3o + oh', [(1-ALPHA)*6.310000e+14, 0.0, 42300.0])
# ROAMING: from parent reaction 161 ch3o2h <=> ch3o + oh
reaction('ch3o2h <=> h2o + ch2o', [(ALPHA/1.)*6.310000e+14, 0.0, 42300.0])
# 
# The following reaction has generated these roaming pathways:
#   c2h5o2h <=> h2o + ch3cho
reaction('c2h5o2h <=> c2h5o + oh', [(1-ALPHA)*6.310000e+14, 0.0, 42300.0])
# ROAMING: from parent reaction 219 c2h5o2h <=> c2h5o + oh
reaction('c2h5o2h <=> h2o + ch3cho', [(ALPHA/1.)*6.310000e+14, 0.0, 42300.0])
# rev/ 1.245e+15 -0.375 4.401e+04 /
# !ref:Curran estimate
# ch3+hco<=>ch3cho 1.750e+13 0.000 0.000e+00
# ref:Sivaramakrishnan J. Phys. Chem. A, Vol 114, No. 2, 2010
# 
# The following reaction has generated these roaming pathways:
#   ch3cho <=> ch4 + co
falloff_reaction('ch3cho (+ M) <=> ch3 + hco (+ M)',
                 kf=[(1-ALPHA)*2.450000e+22, -1.74, 86355.02],
                 kf0=[(1-ALPHA)*1.029760e+59, -11.3, 95912.49],
                 falloff=Troe(A=0.00249, T3=718.11861, T1=6.08949, T2=3780.01844))
# ROAMING: from parent reaction 244 ch3cho (+ M) <=> ch3 + hco (+ M)
#   This is a DUPLICATE of original rxn 245 ch3cho (+ M) <=> ch4 + co (+ M)
falloff_reaction('ch3cho (+ M) <=> ch4 + co (+ M)',
                 kf=[(ALPHA/1.)*2.450000e+22, -1.74, 86355.02],
                 kf0=[(ALPHA/1.)*1.029760e+59, -11.3, 95912.49],
                 falloff=Troe(A=0.00249, T3=718.11861, T1=6.08949, T2=3780.01844),
                 options='duplicate')
# sb 06/10/2011
# testing additional channels
#  reactions of ethenol
#  Unimolecular decomposition of ethenol
# 
# The following reaction has generated these roaming pathways:
#   c2h3oh <=> h2o + c2h2
reaction('c2h3oh => c2h3 + oh', [(1-ALPHA)*6.899000e+21, -1.564, 110700.0])
# ROAMING: from parent reaction 317 c2h3oh -> c2h3 + oh
reaction('c2h3oh <=> h2o + c2h2', [(ALPHA/1.)*6.899000e+21, -1.564, 110700.0])
# 
# The following reaction has generated these roaming pathways:
#   c2h3oh <=> h2 + ch2co
reaction('c2h3oh => ch2cho + h', [(1-ALPHA)*3.643000e+15, -0.397, 95390.0])
# ROAMING: from parent reaction 319 c2h3oh -> ch2cho + h
reaction('c2h3oh <=> h2 + ch2co', [(ALPHA/1.)*3.643000e+15, -0.397, 95390.0])
# 
# The following reaction has generated these roaming pathways:
#   c2h5oh <=> ch4 + ch2o
pdep_arrhenius('c2h5oh <=> ch3 + ch2oh',
               [(0.001, 'atm'), (1-ALPHA)*1.200000e+54, -12.9, 100005.71],
               [(0.01, 'atm'), (1-ALPHA)*5.180000e+59, -14.0, 99906.36],
               [(0.1, 'atm'), (1-ALPHA)*1.620000e+66, -15.3, 105390.48],
               [(1.0, 'atm'), (1-ALPHA)*5.550000e+64, -14.5, 106183.0],
               [(10.0, 'atm'), (1-ALPHA)*1.550000e+58, -12.3, 105768.01],
               [(100.0, 'atm'), (1-ALPHA)*1.780000e+47, -8.96, 101058.82])
# ROAMING: from parent reaction 359 c2h5oh <=> ch3 + ch2oh
pdep_arrhenius('c2h5oh <=> ch4 + ch2o',
               [(0.001, 'atm'), (ALPHA/1.)*1.200000e+54, -12.9, 100005.71],
               [(0.01, 'atm'), (ALPHA/1.)*5.180000e+59, -14.0, 99906.36],
               [(0.1, 'atm'), (ALPHA/1.)*1.620000e+66, -15.3, 105390.48],
               [(1.0, 'atm'), (ALPHA/1.)*5.550000e+64, -14.5, 106183.0],
               [(10.0, 'atm'), (ALPHA/1.)*1.550000e+58, -12.3, 105768.01],
               [(100.0, 'atm'), (ALPHA/1.)*1.780000e+47, -8.96, 101058.82])
# 
# The following reaction has generated these roaming pathways:
#   c2h5oh <=> h2o + c2h4
pdep_arrhenius('c2h5oh <=> c2h5 + oh',
               [(0.001, 'atm'), (1-ALPHA)*8.100000e+46, -11.3, 111053.43],
               [(0.01, 'atm'), (1-ALPHA)*1.860000e+56, -13.5, 107238.39],
               [(0.1, 'atm'), (1-ALPHA)*4.650000e+63, -15.0, 109622.79],
               [(1.0, 'atm'), (1-ALPHA)*4.460000e+65, -14.9, 112344.98],
               [(10.0, 'atm'), (1-ALPHA)*2.790000e+61, -13.4, 113080.17],
               [(100.0, 'atm'), (1-ALPHA)*6.170000e+51, -10.3, 109940.71])
# ROAMING: from parent reaction 360 c2h5oh <=> c2h5 + oh
#   This is a DUPLICATE of original rxn 358 c2h5oh <=> c2h4 + h2o
pdep_arrhenius('c2h5oh <=> h2o + c2h4',
               [(0.001, 'atm'), (ALPHA/1.)*8.100000e+46, -11.3, 111053.43],
               [(0.01, 'atm'), (ALPHA/1.)*1.860000e+56, -13.5, 107238.39],
               [(0.1, 'atm'), (ALPHA/1.)*4.650000e+63, -15.0, 109622.79],
               [(1.0, 'atm'), (ALPHA/1.)*4.460000e+65, -14.9, 112344.98],
               [(10.0, 'atm'), (ALPHA/1.)*2.790000e+61, -13.4, 113080.17],
               [(100.0, 'atm'), (ALPHA/1.)*6.170000e+51, -10.3, 109940.71],
               options='duplicate')
# HENRY ref? Is this just estimated in the reverse
# ref:
# 
# The following reaction has generated these roaming pathways:
#   ch3coch3 <=> ch4 + ch2co
falloff_reaction('ch3coch3 (+ M) <=> ch3co + ch3 (+ M)',
                 kf=[(1-ALPHA)*7.108000e+21, -1.57, 84680.0],
                 kf0=[(1-ALPHA)*7.013000e+89, -20.38, 107150.0],
                 falloff=Troe(A=0.863, T3=10000000000.0, T1=416.4, T2=3290000000.0))
# ROAMING: from parent reaction 391 ch3coch3 (+ M) <=> ch3co + ch3 (+ M)
falloff_reaction('ch3coch3 (+ M) <=> ch4 + ch2co (+ M)',
                 kf=[(ALPHA/1.)*7.108000e+21, -1.57, 84680.0],
                 kf0=[(ALPHA/1.)*7.013000e+89, -20.38, 107150.0],
                 falloff=Troe(A=0.863, T3=10000000000.0, T1=416.4, T2=3290000000.0))
# wkm 01/11/10
# !ref:fit from zeynep seryinel (M=N2)
# ch3och3(+m)<=>ch3+ch3o(+m) 7.250e+21 -0.940 8.025e+04
# low / 3.5000e+60 -1.1560e+01 1.0100e+05 /
# troe / 1.8300e-01 1.3000e+00 1.3000e+04 6.7100e+09 / !troe fall-off reaction
# ref:Cook et al. j. phys. chem a 2009, 113, 9974-9980
# 
# The following reaction has generated these roaming pathways:
#   ch3och3 <=> ch4 + ch2o
falloff_reaction('ch3och3 (+ M) <=> ch3 + ch3o (+ M)',
                 kf=[(1-ALPHA)*4.380000e+21, -1.57, 83890.0],
                 kf0=[(1-ALPHA)*7.520000e+15, 0.0, 42790.0],
                 falloff=Troe(A=0.454, T3=1e-30, T1=2510.0))
# ROAMING: from parent reaction 431 ch3och3 (+ M) <=> ch3 + ch3o (+ M)
falloff_reaction('ch3och3 (+ M) <=> ch4 + ch2o (+ M)',
                 kf=[(ALPHA/1.)*4.380000e+21, -1.57, 83890.0],
                 kf0=[(ALPHA/1.)*7.520000e+15, 0.0, 42790.0],
                 falloff=Troe(A=0.454, T3=1e-30, T1=2510.0))
# based on above WKM calc. Afactor *0.66, Ea - 3kcal
# o2ch2och2o2h<=>ho2ch2ocho+oh 6.44E+06 1.25179 1.63E+04
# wkm 22/04/2010
# ref: Ea increased by 1 kcal
# 
# The following reaction has generated these roaming pathways:
#   ho2ch2ocho <=> h2o + formicanhydride
#   ho2ch2ocho <=> hoch2o2h + co
reaction('ho2ch2ocho <=> och2ocho + oh', [(1-ALPHA)*2.000000e+16, 0.0, 41500.0])
# ROAMING: from parent reaction 459 ho2ch2ocho <=> och2ocho + oh
reaction('ho2ch2ocho <=> h2o + formicanhydride', [(ALPHA/2.)*2.000000e+16, 0.0, 41500.0])
# ROAMING: from parent reaction 459 ho2ch2ocho <=> och2ocho + oh
reaction('ho2ch2ocho <=> hoch2o2h + co', [(ALPHA/2.)*2.000000e+16, 0.0, 41500.0])
# ref:Oehschlaeger et al., Proc Comb Inst 30 (2005) 1119-1127
# 
# The following reaction has generated these roaming pathways:
#   c3h8 <=> ch4 + c2h4
falloff_reaction('c3h8 (+ M) <=> ch3 + c2h5 (+ M)',
                 kf=[(1-ALPHA)*1.290000e+37, -5.84, 97380.0],
                 kf0=[(1-ALPHA)*5.640000e+74, -15.74, 98714.0],
                 efficiencies='co2:2.0 co:1.5 h2:2.0 h2o:6.0 ar:0.7 ch4:2.0 c2h6:3.0 he:0.7',
                 falloff=Troe(A=0.31, T3=50.0, T1=3000.0, T2=9000.0))
# ROAMING: from parent reaction 491 c3h8 (+ M) <=> ch3 + c2h5 (+ M)
falloff_reaction('c3h8 (+ M) <=> ch4 + c2h4 (+ M)',
                 kf=[(ALPHA/1.)*1.290000e+37, -5.84, 97380.0],
                 kf0=[(ALPHA/1.)*5.640000e+74, -15.74, 98714.0],
                 efficiencies='co2:2.0 co:1.5 h2:2.0 h2o:6.0 ar:0.7 ch4:2.0 c2h6:3.0 he:0.7',
                 falloff=Troe(A=0.31, T3=50.0, T1=3000.0, T2=9000.0))
# HENRY ref?
# 
# The following reaction has generated these roaming pathways:
#   c3h6 <=> h2 + c3h4-p
reaction('c3h6 <=> c3h5-s + h', [(1-ALPHA)*7.710000e+69, -16.09, 140000.0])
# ROAMING: from parent reaction 541 c3h6 <=> c3h5-s + h
#   This is a DUPLICATE of another roaming pathway c3h6 <=> h2 + c3h4-p
reaction('c3h6 <=> h2 + c3h4-p', [(ALPHA/1.)*7.710000e+69, -16.09, 140000.0],
         options='duplicate')
# 
# The following reaction has generated these roaming pathways:
#   c3h6 <=> h2 + c3h4-a
#   c3h6 <=> h2 + c3h4-p
reaction('c3h6 <=> c3h5-t + h', [(1-ALPHA)*5.620000e+71, -16.58, 139300.0])
# ROAMING: from parent reaction 542 c3h6 <=> c3h5-t + h
reaction('c3h6 <=> h2 + c3h4-a', [(ALPHA/2.)*5.620000e+71, -16.58, 139300.0])
# ROAMING: from parent reaction 542 c3h6 <=> c3h5-t + h
#   This is a DUPLICATE of another roaming pathway c3h6 <=> h2 + c3h4-p
reaction('c3h6 <=> h2 + c3h4-p', [(ALPHA/2.)*5.620000e+71, -16.58, 139300.0],
         options='duplicate')
# 
# The following reaction has generated these roaming pathways:
#   nc3h7o2h <=> h2o + c2h5cho
reaction('nc3h7o2h <=> nc3h7o + oh', [(1-ALPHA)*1.500000e+16, 0.0, 42500.0])
# ROAMING: from parent reaction 712 nc3h7o2h <=> nc3h7o + oh
reaction('nc3h7o2h <=> h2o + c2h5cho', [(ALPHA/1.)*1.500000e+16, 0.0, 42500.0])
# wkm 19/04/2010
# ref:pitz estimate
# 
# The following reaction has generated these roaming pathways:
#   c2h3ooh <=> h2o + ch2co
reaction('c2h3ooh <=> ch2cho + oh', [(1-ALPHA)*8.400000e+14, 0.0, 43000.0])
# ROAMING: from parent reaction 750 c2h3ooh <=> ch2cho + oh
reaction('c2h3ooh <=> h2o + ch2co', [(ALPHA/1.)*8.400000e+14, 0.0, 43000.0])
# wkm 22/04/2010
# c4h10(+m)<=>c2h5+c2h5(+m) 2.720e+15 0.000 7.561e+04
# !rev/ 4.954e+03 2.253 -1.347e+04 /
# low / 4.7200e+18 0.0000e+00 4.9576e+04 /
# troe / 7.2000e-01 1.5000e+03 1.0000e-10 1.0000e+10 / !troe fall-off reaction
# ref:new troe fit from tibor nagy
# ref:Based on Oehlschlaeger et al. J. Phys. Chem. A 2004, 108:4247-4253
# 20100311 t/k: 3.0e+02-1.6e+03 p/atm: 2.0e-01-8.4e+00 e^maxabsdlnk-1/%:   38.01     e^rmsdlnk-1/%:   22.02
# 
# The following reaction has generated these roaming pathways:
#   c4h10 <=> c2h6 + c2h4
#   c4h10 <=> c2h6 + c2h4
falloff_reaction('c4h10 (+ M) <=> c2h5 + c2h5 (+ M)',
                 kf=[(1-ALPHA)*1.355400e+37, -6.036, 92929.0],
                 kf0=[(1-ALPHA)*4.720000e+18, 0.0, 49578.0],
                 falloff=Troe(A=0.079982, T3=1e-20, T1=32428.0, T2=4858.2))
# ROAMING: from parent reaction 767 c4h10 (+ M) <=> c2h5 + c2h5 (+ M)
#   This is a DUPLICATE of another roaming pathway c4h10 (+ M) <=> c2h6 + c2h4 (+ M)
falloff_reaction('c4h10 (+ M) <=> c2h6 + c2h4 (+ M)',
                 kf=[(ALPHA/2.)*1.355400e+37, -6.036, 92929.0],
                 kf0=[(ALPHA/2.)*4.720000e+18, 0.0, 49578.0],
                 falloff=Troe(A=0.079982, T3=1e-20, T1=32428.0, T2=4858.2),
                 options='duplicate')
# ROAMING: from parent reaction 767 c4h10 (+ M) <=> c2h5 + c2h5 (+ M)
#   This is a DUPLICATE of another roaming pathway c4h10 (+ M) <=> c2h6 + c2h4 (+ M)
falloff_reaction('c4h10 (+ M) <=> c2h6 + c2h4 (+ M)',
                 kf=[(ALPHA/2.)*1.355400e+37, -6.036, 92929.0],
                 kf0=[(ALPHA/2.)*4.720000e+18, 0.0, 49578.0],
                 falloff=Troe(A=0.079982, T3=1e-20, T1=32428.0, T2=4858.2),
                 options='duplicate')
# wkm 22/04/2010
# c4h10(+m)<=>nc3h7+ch3(+m) 4.280e+14 0.000 6.990e+04
# !rev/ 4.763e+04 1.791 -2.005e+04 /
# low / 5.3400e+17 0.0000e+00 4.2959e+04 /
# troe / 7.2000e-01 1.5000e+03 1.0000e-10 1.0000e+10 / !troe fall-off reaction
# ref:new troe fit from tibor nagy
# ref:Based on Oehlschlaeger et al. J. Phys. Chem. A 2004, 108:4247-4253
# 20100311 t/k: 3.0e+02-1.6e+03 p/atm: 2.0e-01-8.4e+00 e^maxabsdlnk-1/%:   27.43     e^rmsdlnk-1/%:   12.90
# 
# The following reaction has generated these roaming pathways:
#   c4h10 <=> ch4 + c3h6
falloff_reaction('c4h10 (+ M) <=> nc3h7 + ch3 (+ M)',
                 kf=[(1-ALPHA)*6.599800e+52, -10.626, 100330.0],
                 kf0=[(1-ALPHA)*5.340000e+17, 0.0, 42959.0],
                 falloff=Troe(A=0.095015, T3=1e-20, T1=5347.6, T2=4325.6))
# ROAMING: from parent reaction 768 c4h10 (+ M) <=> nc3h7 + ch3 (+ M)
falloff_reaction('c4h10 (+ M) <=> ch4 + c3h6 (+ M)',
                 kf=[(ALPHA/1.)*6.599800e+52, -10.626, 100330.0],
                 kf0=[(ALPHA/1.)*5.340000e+17, 0.0, 42959.0],
                 falloff=Troe(A=0.095015, T3=1e-20, T1=5347.6, T2=4325.6))
# ref:laskin et al. ijck 32 589-614 2000
# 
# The following reaction has generated these roaming pathways:
#   c4h6 <=> h2 + butatriene
#   c4h6 <=> h2 + c4h4
reaction('c4h6 <=> c4h5-i + h', [(1-ALPHA)*5.700000e+36, -6.27, 112353.0])
# ROAMING: from parent reaction 889 c4h6 <=> c4h5-i + h
reaction('c4h6 <=> h2 + butatriene', [(ALPHA/2.)*5.700000e+36, -6.27, 112353.0])
# ROAMING: from parent reaction 889 c4h6 <=> c4h5-i + h
#   This is a DUPLICATE of original rxn 891 c4h6 <=> c4h4 + h2
#   This is a DUPLICATE of another roaming pathway c4h6 <=> h2 + c4h4
reaction('c4h6 <=> h2 + c4h4', [(ALPHA/2.)*5.700000e+36, -6.27, 112353.0],
         options='duplicate')
# 
# The following reaction has generated these roaming pathways:
#   c4h6 <=> h2 + c4h4
reaction('c4h6 <=> c4h5-n + h', [(1-ALPHA)*5.300000e+44, -8.62, 123608.0])
# ROAMING: from parent reaction 890 c4h6 <=> c4h5-n + h
#   This is a DUPLICATE of original rxn 891 c4h6 <=> c4h4 + h2
#   This is a DUPLICATE of another roaming pathway c4h6 <=> h2 + c4h4
reaction('c4h6 <=> h2 + c4h4', [(ALPHA/1.)*5.300000e+44, -8.62, 123608.0],
         options='duplicate')
# 
# The following reaction has generated these roaming pathways:
#   c4h612 <=> h2 + butatriene
reaction('c4h612 <=> c4h5-i + h', [(1-ALPHA)*4.200000e+15, 0.0, 92600.0])
# ROAMING: from parent reaction 943 c4h612 <=> c4h5-i + h
reaction('c4h612 <=> h2 + butatriene', [(ALPHA/1.)*4.200000e+15, 0.0, 92600.0])
# HENRY ref?
# ref:
# 
# The following reaction has generated these roaming pathways:
#   pc4h9o2h <=> h2o + nc3h7cho
reaction('pc4h9o2h <=> pc4h9o + oh', [(1-ALPHA)*1.500000e+16, 0.0, 42500.0])
# ROAMING: from parent reaction 1100 pc4h9o2h <=> pc4h9o + oh
reaction('pc4h9o2h <=> h2o + nc3h7cho', [(ALPHA/1.)*1.500000e+16, 0.0, 42500.0])
# ic4h10(+m)<=>ch3+ic3h7(+m) 4.830e+16 0.000 7.990e+04
# rev/ 5.747e+04 2.230 -9.643e+03 /
# low / 2.4100e+19 0.0000e+00 5.2576e+04 /
# troe / 2.5000e-01 7.5000e+02 1.0000e-10 1.0000e+10 / !troe fall-off reaction
# wkm 22/04/2010
# ref:new fit from tibor nagy based on:
# ref:Oehlschlaeger et al. J. Phys. Chem. A 2004, 108:4247-4253
# 20100311 T/K: 3.0E+02-1.6E+03 p/atm: 2.1E-01-8.8E+00 e^maxabsDlnk-1/%:   14.82     e^rmsDlnk-1/%:   8.697
# 
# The following reaction has generated these roaming pathways:
#   ic4h10 <=> ch4 + c3h6
falloff_reaction('ic4h10 (+ M) <=> ch3 + ic3h7 (+ M)',
                 kf=[(1-ALPHA)*2.520300e+31, -4.102, 91495.0],
                 kf0=[(1-ALPHA)*2.410000e+19, 0.0, 52576.0],
                 falloff=Troe(A=0.3662, T3=815.3, T1=60.786, T2=1e+20))
# ROAMING: from parent reaction 1222 ic4h10 (+ M) <=> ch3 + ic3h7 (+ M)
falloff_reaction('ic4h10 (+ M) <=> ch4 + c3h6 (+ M)',
                 kf=[(ALPHA/1.)*2.520300e+31, -4.102, 91495.0],
                 kf0=[(ALPHA/1.)*2.410000e+19, 0.0, 52576.0],
                 falloff=Troe(A=0.3662, T3=815.3, T1=60.786, T2=1e+20))
# ref:Oehlschlaeger et al. J. Phys. Chem. A 2004, 108:4247-4253.
# 
# The following reaction has generated these roaming pathways:
#   ic4h10 <=> h2 + ic4h8
reaction('ic4h10 <=> tc4h9 + h', [(1-ALPHA)*2.510000e+98, -23.81, 145300.0])
# ROAMING: from parent reaction 1223 ic4h10 <=> tc4h9 + h
#   This is a DUPLICATE of another roaming pathway ic4h10 <=> h2 + ic4h8
reaction('ic4h10 <=> h2 + ic4h8', [(ALPHA/1.)*2.510000e+98, -23.81, 145300.0],
         options='duplicate')
# 
# The following reaction has generated these roaming pathways:
#   ic4h10 <=> h2 + ic4h8
reaction('ic4h10 <=> ic4h9 + h', [(1-ALPHA)*9.850000e+95, -23.11, 147600.0])
# ROAMING: from parent reaction 1224 ic4h10 <=> ic4h9 + h
#   This is a DUPLICATE of another roaming pathway ic4h10 <=> h2 + ic4h8
reaction('ic4h10 <=> h2 + ic4h8', [(ALPHA/1.)*9.850000e+95, -23.11, 147600.0],
         options='duplicate')
# HENRY?
# ref:
# 
# The following reaction has generated these roaming pathways:
#   ic4h9o2h <=> h2o + ic3h7cho
reaction('ic4h9o2h <=> ic4h9o + oh', [(1-ALPHA)*1.500000e+16, 0.0, 42500.0])
# ROAMING: from parent reaction 1379 ic4h9o2h <=> ic4h9o + oh
reaction('ic4h9o2h <=> h2o + ic3h7cho', [(ALPHA/1.)*1.500000e+16, 0.0, 42500.0])
# 
# The following reaction has generated these roaming pathways:
#   ic4h8 <=> ch4 + c3h4-a
#   ic4h8 <=> ch4 + c3h4-p
reaction('ic4h8 <=> c3h5-t + ch3', [(1-ALPHA)*1.920000e+66, -14.22, 128100.0])
# ROAMING: from parent reaction 1440 ic4h8 <=> c3h5-t + ch3
reaction('ic4h8 <=> ch4 + c3h4-a', [(ALPHA/2.)*1.920000e+66, -14.22, 128100.0])
# ROAMING: from parent reaction 1440 ic4h8 <=> c3h5-t + ch3
reaction('ic4h8 <=> ch4 + c3h4-p', [(ALPHA/2.)*1.920000e+66, -14.22, 128100.0])
# HENRY . This version is missing some reactions for alternative QOOH species from SHARMA
# that are included at the end of HCT c4_50 input
# end c4_54.8_release
#  n-butanol sub mechanism
#  class 1 Unimol Decomposition with TRoE fits
# 
# The following reaction has generated these roaming pathways:
#   nc4h9oh <=> ch4 + c3h5oh
falloff_reaction('nc4h9oh (+ M) <=> ch3 + c3h6oh (+ M)',
                 kf=[(1-ALPHA)*3.790000e+24, -2.23, 88070.0],
                 kf0=[(1-ALPHA)*1.782000e+60, -12.28, 83980.0],
                 falloff=Troe(A=0.2352, T3=724.0, T1=5000000000.0, T2=5000000000.0))
# ROAMING: from parent reaction 1534 nc4h9oh (+ M) <=> ch3 + c3h6oh (+ M)
falloff_reaction('nc4h9oh (+ M) <=> ch4 + c3h5oh (+ M)',
                 kf=[(ALPHA/1.)*3.790000e+24, -2.23, 88070.0],
                 kf0=[(ALPHA/1.)*1.782000e+60, -12.28, 83980.0],
                 falloff=Troe(A=0.2352, T3=724.0, T1=5000000000.0, T2=5000000000.0))
# troe fall-off reaction
# 
# The following reaction has generated these roaming pathways:
#   nc4h9oh <=> c2h5oh + c2h4
#   nc4h9oh <=> c2h6 + c2h3oh
falloff_reaction('nc4h9oh (+ M) <=> c2h5 + pc2h4oh (+ M)',
                 kf=[(1-ALPHA)*5.530000e+24, -2.23, 89010.0],
                 kf0=[(1-ALPHA)*6.632000e+59, -12.13, 84720.0],
                 falloff=Troe(A=0.2438, T3=744.06, T1=5000000000.0, T2=5000000000.0))
# ROAMING: from parent reaction 1535 nc4h9oh (+ M) <=> c2h5 + pc2h4oh (+ M)
falloff_reaction('nc4h9oh (+ M) <=> c2h5oh + c2h4 (+ M)',
                 kf=[(ALPHA/2.)*5.530000e+24, -2.23, 89010.0],
                 kf0=[(ALPHA/2.)*6.632000e+59, -12.13, 84720.0],
                 falloff=Troe(A=0.2438, T3=744.06, T1=5000000000.0, T2=5000000000.0))
# ROAMING: from parent reaction 1535 nc4h9oh (+ M) <=> c2h5 + pc2h4oh (+ M)
falloff_reaction('nc4h9oh (+ M) <=> c2h6 + c2h3oh (+ M)',
                 kf=[(ALPHA/2.)*5.530000e+24, -2.23, 89010.0],
                 kf0=[(ALPHA/2.)*6.632000e+59, -12.13, 84720.0],
                 falloff=Troe(A=0.2438, T3=744.06, T1=5000000000.0, T2=5000000000.0))
# troe fall-off reaction
# 
# The following reaction has generated these roaming pathways:
#   nc4h9oh <=> c3h8 + ch2o
#   nc4h9oh <=> ch3oh + c3h6
falloff_reaction('nc4h9oh (+ M) <=> nc3h7 + ch2oh (+ M)',
                 kf=[(1-ALPHA)*3.020000e+23, -1.88, 85710.0],
                 kf0=[(1-ALPHA)*1.416000e+59, -11.93, 83980.0],
                 falloff=Troe(A=0.7646, T3=8344000000.0, T1=724.8, T2=8214000000.0))
# ROAMING: from parent reaction 1536 nc4h9oh (+ M) <=> nc3h7 + ch2oh (+ M)
falloff_reaction('nc4h9oh (+ M) <=> c3h8 + ch2o (+ M)',
                 kf=[(ALPHA/2.)*3.020000e+23, -1.88, 85710.0],
                 kf0=[(ALPHA/2.)*1.416000e+59, -11.93, 83980.0],
                 falloff=Troe(A=0.7646, T3=8344000000.0, T1=724.8, T2=8214000000.0))
# ROAMING: from parent reaction 1536 nc4h9oh (+ M) <=> nc3h7 + ch2oh (+ M)
falloff_reaction('nc4h9oh (+ M) <=> ch3oh + c3h6 (+ M)',
                 kf=[(ALPHA/2.)*3.020000e+23, -1.88, 85710.0],
                 kf0=[(ALPHA/2.)*1.416000e+59, -11.93, 83980.0],
                 falloff=Troe(A=0.7646, T3=8344000000.0, T1=724.8, T2=8214000000.0))
# troe fall-off reaction
# 
# The following reaction has generated these roaming pathways:
#   nc4h9oh <=> h2o + c4h8-1
falloff_reaction('nc4h9oh (+ M) <=> oh + pc4h9 (+ M)',
                 kf=[(1-ALPHA)*6.330000e+20, -1.37, 94930.0],
                 kf0=[(1-ALPHA)*6.902000e+51, -10.21, 89200.0],
                 falloff=Troe(A=0.703, T3=9882000000.0, T1=634.68, T2=1786000000.0))
# ROAMING: from parent reaction 1537 nc4h9oh (+ M) <=> oh + pc4h9 (+ M)
#   This is a DUPLICATE of original rxn 1539 nc4h9oh (+ M) <=> c4h8-1 + h2o (+ M)
falloff_reaction('nc4h9oh (+ M) <=> h2o + c4h8-1 (+ M)',
                 kf=[(ALPHA/1.)*6.330000e+20, -1.37, 94930.0],
                 kf0=[(ALPHA/1.)*6.902000e+51, -10.21, 89200.0],
                 falloff=Troe(A=0.703, T3=9882000000.0, T1=634.68, T2=1786000000.0),
                 options='duplicate')
# troe fall-off reaction
# 
# The following reaction has generated these roaming pathways:
#   nc4h9oh <=> h2 + nc3h7cho
falloff_reaction('nc4h9oh (+ M) <=> h + pc4h9o (+ M)',
                 kf=[(1-ALPHA)*6.040000e+14, 0.1, 103800.0],
                 kf0=[(1-ALPHA)*2.408000e+39, -7.03, 95960.0],
                 falloff=Troe(A=0.3865, T3=564.91, T1=4438000000.0, T2=6710000000.0))
# ROAMING: from parent reaction 1538 nc4h9oh (+ M) <=> h + pc4h9o (+ M)
falloff_reaction('nc4h9oh (+ M) <=> h2 + nc3h7cho (+ M)',
                 kf=[(ALPHA/1.)*6.040000e+14, 0.1, 103800.0],
                 kf0=[(ALPHA/1.)*2.408000e+39, -7.03, 95960.0],
                 falloff=Troe(A=0.3865, T3=564.91, T1=4438000000.0, T2=6710000000.0))
# ref h addition to c3h6 to produce ic3h7
#  Class 9 Unimolecular decomposition of butenols.
# 
# The following reaction has generated these roaming pathways:
#   c4h7oh1-3 <=> h2o + c4h6
#   c4h7oh1-3 <=> h2o + c4h612
reaction('c4h7oh1-3 <=> c4h71-3 + oh', [(1-ALPHA)*2.367000e+20, -1.189, 94340.0])
# ROAMING: from parent reaction 1714 c4h7oh1-3 <=> c4h71-3 + oh
reaction('c4h7oh1-3 <=> h2o + c4h6', [(ALPHA/2.)*2.367000e+20, -1.189, 94340.0])
# ROAMING: from parent reaction 1714 c4h7oh1-3 <=> c4h71-3 + oh
reaction('c4h7oh1-3 <=> h2o + c4h612', [(ALPHA/2.)*2.367000e+20, -1.189, 94340.0])
# 
# The following reaction has generated these roaming pathways:
#   c4h7oh1-3 <=> c2h5oh + c2h2
#   c4h7oh1-3 <=> c2h4 + c2h3oh
#   c4h7oh1-3 <=> c2h4 + ch3cho
reaction('c4h7oh1-3 <=> c2h3 + sc2h4oh', [(1-ALPHA)*6.644000e+19, -1.132, 74590.0])
# ROAMING: from parent reaction 1715 c4h7oh1-3 <=> c2h3 + sc2h4oh
reaction('c4h7oh1-3 <=> c2h5oh + c2h2', [(ALPHA/3.)*6.644000e+19, -1.132, 74590.0])
# ROAMING: from parent reaction 1715 c4h7oh1-3 <=> c2h3 + sc2h4oh
reaction('c4h7oh1-3 <=> c2h4 + c2h3oh', [(ALPHA/3.)*6.644000e+19, -1.132, 74590.0])
# ROAMING: from parent reaction 1715 c4h7oh1-3 <=> c2h3 + sc2h4oh
reaction('c4h7oh1-3 <=> c2h4 + ch3cho', [(ALPHA/3.)*6.644000e+19, -1.132, 74590.0])
# Unimolecular decomposition of butenols.
# 
# The following reaction has generated these roaming pathways:
#   c4h7oh2-1 <=> h2o + c4h612
reaction('c4h7oh2-1 <=> c4h71-3 + oh', [(1-ALPHA)*2.367000e+20, -1.189, 94340.0])
# ROAMING: from parent reaction 1716 c4h7oh2-1 <=> c4h71-3 + oh
reaction('c4h7oh2-1 <=> h2o + c4h612', [(ALPHA/1.)*2.367000e+20, -1.189, 94340.0])
#  Unimolecular decomposition of butenols.
# 
# The following reaction has generated these roaming pathways:
#   c4h7oh1-4 <=> h2o + c4h6
reaction('c4h7oh1-4 <=> c4h71-4 + oh', [(1-ALPHA)*2.367000e+20, -1.189, 94340.0])
# ROAMING: from parent reaction 1718 c4h7oh1-4 <=> c4h71-4 + oh
reaction('c4h7oh1-4 <=> h2o + c4h6', [(ALPHA/1.)*2.367000e+20, -1.189, 94340.0])
# 
# The following reaction has generated these roaming pathways:
#   c4h7oh1-4 <=> c2h5oh + c2h2
#   c4h7oh1-4 <=> c2h4 + c2h3oh
reaction('c4h7oh1-4 <=> c2h3 + pc2h4oh', [(1-ALPHA)*6.644000e+19, -1.132, 74590.0])
# ROAMING: from parent reaction 1719 c4h7oh1-4 <=> c2h3 + pc2h4oh
reaction('c4h7oh1-4 <=> c2h5oh + c2h2', [(ALPHA/2.)*6.644000e+19, -1.132, 74590.0])
# ROAMING: from parent reaction 1719 c4h7oh1-4 <=> c2h3 + pc2h4oh
reaction('c4h7oh1-4 <=> c2h4 + c2h3oh', [(ALPHA/2.)*6.644000e+19, -1.132, 74590.0])
#  Unimolecular decomposition of butenols.
# 
# The following reaction has generated these roaming pathways:
#   c4h7oh2-2 <=> h2o + c4h612
#   c4h7oh2-2 <=> h2o + c4h6-2
reaction('c4h7oh2-2 <=> c4h72-2 + oh', [(1-ALPHA)*2.367000e+20, -1.189, 94340.0])
# ROAMING: from parent reaction 1720 c4h7oh2-2 <=> c4h72-2 + oh
reaction('c4h7oh2-2 <=> h2o + c4h612', [(ALPHA/2.)*2.367000e+20, -1.189, 94340.0])
# ROAMING: from parent reaction 1720 c4h7oh2-2 <=> c4h72-2 + oh
reaction('c4h7oh2-2 <=> h2o + c4h6-2', [(ALPHA/2.)*2.367000e+20, -1.189, 94340.0])
# Unimolecular decomposition of butenols.
# 
# The following reaction has generated these roaming pathways:
#   c4h7oh1-2 <=> h2o + c4h612
#   c4h7oh1-2 <=> h2o + but1yne
reaction('c4h7oh1-2 <=> c4h71-2 + oh', [(1-ALPHA)*5.887000e+19, -0.956, 95950.0])
# ROAMING: from parent reaction 1721 c4h7oh1-2 <=> c4h71-2 + oh
reaction('c4h7oh1-2 <=> h2o + c4h612', [(ALPHA/2.)*5.887000e+19, -0.956, 95950.0])
# ROAMING: from parent reaction 1721 c4h7oh1-2 <=> c4h71-2 + oh
reaction('c4h7oh1-2 <=> h2o + but1yne', [(ALPHA/2.)*5.887000e+19, -0.956, 95950.0])
# 
# The following reaction has generated these roaming pathways:
#   c4h7oh1-1 <=> h2o + but1yne
reaction('c4h7oh1-1 <=> c4h71-1 + oh', [(1-ALPHA)*5.887000e+19, -0.956, 95950.0])
# ROAMING: from parent reaction 1724 c4h7oh1-1 <=> c4h71-1 + oh
reaction('c4h7oh1-1 <=> h2o + but1yne', [(ALPHA/1.)*5.887000e+19, -0.956, 95950.0])
#  reactions of di-butenols
# 
# The following reaction has generated these roaming pathways:
#   c4h5oh-13 <=> h2o + c4h4
reaction('c4h5oh-13 <=> c4h5-n + oh', [(1-ALPHA)*5.610000e+21, -1.612, 106000.0])
# ROAMING: from parent reaction 1725 c4h5oh-13 <=> c4h5-n + oh
reaction('c4h5oh-13 <=> h2o + c4h4', [(ALPHA/1.)*5.610000e+21, -1.612, 106000.0])
#  end of n-butanol sub-mechanism
# all other isomers
#   Class 1  Unimolecular decompositions
#  tc4h9oh
# 
# The following reaction has generated these roaming pathways:
#   tc4h9oh <=> ch4 + ic3h5oh
#   tc4h9oh <=> ch4 + ch3coch3
falloff_reaction('tc4h9oh (+ M) <=> ch3 + tc3h6oh (+ M)',
                 kf=[(1-ALPHA)*6.310000e+16, 0.0, 81277.0],
                 kf0=[(1-ALPHA)*9.820700e+74, -16.121, 92918.0],
                 falloff=Troe(A=0.40865, T3=1104.3, T1=490.0, T2=2851.9))
# ROAMING: from parent reaction 1727 tc4h9oh (+ M) <=> ch3 + tc3h6oh (+ M)
falloff_reaction('tc4h9oh (+ M) <=> ch4 + ic3h5oh (+ M)',
                 kf=[(ALPHA/2.)*6.310000e+16, 0.0, 81277.0],
                 kf0=[(ALPHA/2.)*9.820700e+74, -16.121, 92918.0],
                 falloff=Troe(A=0.40865, T3=1104.3, T1=490.0, T2=2851.9))
# ROAMING: from parent reaction 1727 tc4h9oh (+ M) <=> ch3 + tc3h6oh (+ M)
falloff_reaction('tc4h9oh (+ M) <=> ch4 + ch3coch3 (+ M)',
                 kf=[(ALPHA/2.)*6.310000e+16, 0.0, 81277.0],
                 kf0=[(ALPHA/2.)*9.820700e+74, -16.121, 92918.0],
                 falloff=Troe(A=0.40865, T3=1104.3, T1=490.0, T2=2851.9))
# 
# The following reaction has generated these roaming pathways:
#   tc4h9oh <=> h2o + ic4h8
falloff_reaction('tc4h9oh (+ M) <=> oh + tc4h9 (+ M)',
                 kf=[(1-ALPHA)*1.200000e+24, -2.13, 97281.0],
                 kf0=[(1-ALPHA)*4.529100e+74, -16.275, 107810.0],
                 falloff=Troe(A=0.36787, T3=469.09, T1=2.9117e+12, T2=3672.8))
# ROAMING: from parent reaction 1728 tc4h9oh (+ M) <=> oh + tc4h9 (+ M)
#   This is a DUPLICATE of original rxn 1731 tc4h9oh (+ M) <=> h2o + ic4h8 (+ M)
falloff_reaction('tc4h9oh (+ M) <=> h2o + ic4h8 (+ M)',
                 kf=[(ALPHA/1.)*1.200000e+24, -2.13, 97281.0],
                 kf0=[(ALPHA/1.)*4.529100e+74, -16.275, 107810.0],
                 falloff=Troe(A=0.36787, T3=469.09, T1=2.9117e+12, T2=3672.8),
                 options='duplicate')
# !  Class 1  Unimolecular decompositions
#  sc4h9oh
# 
# The following reaction has generated these roaming pathways:
#   sc4h9oh <=> ch4 + ic3h5oh
falloff_reaction('sc4h9oh (+ M) <=> ch3 + ic3h6oh (+ M)',
                 kf=[(1-ALPHA)*1.100000e+26, -2.815, 92354.0],
                 kf0=[(1-ALPHA)*1.532300e+84, -19.166, 104670.0],
                 falloff=Troe(A=0.042546, T3=277.51, T1=3360200.0, T2=2193.4))
# ROAMING: from parent reaction 1732 sc4h9oh (+ M) <=> ch3 + ic3h6oh (+ M)
falloff_reaction('sc4h9oh (+ M) <=> ch4 + ic3h5oh (+ M)',
                 kf=[(ALPHA/1.)*1.100000e+26, -2.815, 92354.0],
                 kf0=[(ALPHA/1.)*1.532300e+84, -19.166, 104670.0],
                 falloff=Troe(A=0.042546, T3=277.51, T1=3360200.0, T2=2193.4))
# 
# The following reaction has generated these roaming pathways:
#   sc4h9oh <=> c2h5oh + c2h4
#   sc4h9oh <=> c2h6 + c2h3oh
#   sc4h9oh <=> c2h6 + ch3cho
falloff_reaction('sc4h9oh (+ M) <=> c2h5 + sc2h4oh (+ M)',
                 kf=[(1-ALPHA)*1.728000e+26, -2.72, 86207.0],
                 kf0=[(1-ALPHA)*1.677100e+89, -20.364, 99453.0],
                 falloff=Troe(A=0.0055845, T3=358.2, T1=49325000.0, T2=2476.1))
# ROAMING: from parent reaction 1733 sc4h9oh (+ M) <=> c2h5 + sc2h4oh (+ M)
falloff_reaction('sc4h9oh (+ M) <=> c2h5oh + c2h4 (+ M)',
                 kf=[(ALPHA/3.)*1.728000e+26, -2.72, 86207.0],
                 kf0=[(ALPHA/3.)*1.677100e+89, -20.364, 99453.0],
                 falloff=Troe(A=0.0055845, T3=358.2, T1=49325000.0, T2=2476.1))
# ROAMING: from parent reaction 1733 sc4h9oh (+ M) <=> c2h5 + sc2h4oh (+ M)
falloff_reaction('sc4h9oh (+ M) <=> c2h6 + c2h3oh (+ M)',
                 kf=[(ALPHA/3.)*1.728000e+26, -2.72, 86207.0],
                 kf0=[(ALPHA/3.)*1.677100e+89, -20.364, 99453.0],
                 falloff=Troe(A=0.0055845, T3=358.2, T1=49325000.0, T2=2476.1))
# ROAMING: from parent reaction 1733 sc4h9oh (+ M) <=> c2h5 + sc2h4oh (+ M)
falloff_reaction('sc4h9oh (+ M) <=> c2h6 + ch3cho (+ M)',
                 kf=[(ALPHA/3.)*1.728000e+26, -2.72, 86207.0],
                 kf0=[(ALPHA/3.)*1.677100e+89, -20.364, 99453.0],
                 falloff=Troe(A=0.0055845, T3=358.2, T1=49325000.0, T2=2476.1))
# 
# The following reaction has generated these roaming pathways:
#   sc4h9oh <=> ch4 + ch3chchoh
#   sc4h9oh <=> ch4 + c2h5cho
falloff_reaction('sc4h9oh (+ M) <=> ch3 + c3h6oh-1 (+ M)',
                 kf=[(1-ALPHA)*8.500000e+24, -2.53, 88444.0],
                 kf0=[(1-ALPHA)*9.911600e+85, -19.664, 101200.0],
                 falloff=Troe(A=0.39928, T3=217.47, T1=465.57, T2=2284.1))
# ROAMING: from parent reaction 1734 sc4h9oh (+ M) <=> ch3 + c3h6oh-1 (+ M)
falloff_reaction('sc4h9oh (+ M) <=> ch4 + ch3chchoh (+ M)',
                 kf=[(ALPHA/2.)*8.500000e+24, -2.53, 88444.0],
                 kf0=[(ALPHA/2.)*9.911600e+85, -19.664, 101200.0],
                 falloff=Troe(A=0.39928, T3=217.47, T1=465.57, T2=2284.1))
# ROAMING: from parent reaction 1734 sc4h9oh (+ M) <=> ch3 + c3h6oh-1 (+ M)
falloff_reaction('sc4h9oh (+ M) <=> ch4 + c2h5cho (+ M)',
                 kf=[(ALPHA/2.)*8.500000e+24, -2.53, 88444.0],
                 kf0=[(ALPHA/2.)*9.911600e+85, -19.664, 101200.0],
                 falloff=Troe(A=0.39928, T3=217.47, T1=465.57, T2=2284.1))
# 
# The following reaction has generated these roaming pathways:
#   sc4h9oh <=> h2o + c4h8-2
#   sc4h9oh <=> h2o + c4h8-1
falloff_reaction('sc4h9oh (+ M) <=> oh + sc4h9 (+ M)',
                 kf=[(1-ALPHA)*6.430000e+22, -1.865, 96229.0],
                 kf0=[(1-ALPHA)*1.902200e+78, -17.503, 108350.0],
                 falloff=Troe(A=8.6766e-05, T3=293.41, T1=19749.0, T2=1674.6))
# ROAMING: from parent reaction 1735 sc4h9oh (+ M) <=> oh + sc4h9 (+ M)
#   This is a DUPLICATE of original rxn 1742 sc4h9oh (+ M) <=> h2o + c4h8-2 (+ M)
falloff_reaction('sc4h9oh (+ M) <=> h2o + c4h8-2 (+ M)',
                 kf=[(ALPHA/2.)*6.430000e+22, -1.865, 96229.0],
                 kf0=[(ALPHA/2.)*1.902200e+78, -17.503, 108350.0],
                 falloff=Troe(A=8.6766e-05, T3=293.41, T1=19749.0, T2=1674.6),
                 options='duplicate')
# ROAMING: from parent reaction 1735 sc4h9oh (+ M) <=> oh + sc4h9 (+ M)
#   This is a DUPLICATE of original rxn 1741 sc4h9oh (+ M) <=> h2o + c4h8-1 (+ M)
falloff_reaction('sc4h9oh (+ M) <=> h2o + c4h8-1 (+ M)',
                 kf=[(ALPHA/2.)*6.430000e+22, -1.865, 96229.0],
                 kf0=[(ALPHA/2.)*1.902200e+78, -17.503, 108350.0],
                 falloff=Troe(A=8.6766e-05, T3=293.41, T1=19749.0, T2=1674.6),
                 options='duplicate')
# 
# The following reaction has generated these roaming pathways:
#   sc4h9oh <=> h2 + c4h7oh1-2
falloff_reaction('sc4h9oh (+ M) <=> h + sc4h8ohm (+ M)',
                 kf=[(1-ALPHA)*1.330000e+16, 0.017, 102430.0],
                 kf0=[(1-ALPHA)*5.218000e+66, -14.289, 113840.0],
                 falloff=Troe(A=0.089358, T3=336.51, T1=7835200000.0, T2=1663.2))
# ROAMING: from parent reaction 1736 sc4h9oh (+ M) <=> h + sc4h8ohm (+ M)
#   This is a DUPLICATE of another roaming pathway sc4h9oh (+ M) <=> h2 + c4h7oh1-2 (+ M)
falloff_reaction('sc4h9oh (+ M) <=> h2 + c4h7oh1-2 (+ M)',
                 kf=[(ALPHA/1.)*1.330000e+16, 0.017, 102430.0],
                 kf0=[(ALPHA/1.)*5.218000e+66, -14.289, 113840.0],
                 falloff=Troe(A=0.089358, T3=336.51, T1=7835200000.0, T2=1663.2),
                 options='duplicate')
# 
# The following reaction has generated these roaming pathways:
#   sc4h9oh <=> h2 + c4h7oh2-2
#   sc4h9oh <=> h2 + c4h7oh1-2
#   sc4h9oh <=> h2 + c2h5coch3
falloff_reaction('sc4h9oh (+ M) <=> h + sc4h8oh-1 (+ M)',
                 kf=[(1-ALPHA)*8.860000e+18, -0.818, 94238.0],
                 kf0=[(1-ALPHA)*6.424200e+75, -16.831, 106460.0],
                 falloff=Troe(A=0.10896, T3=86.767, T1=5708700000.0, T2=2439.2))
# ROAMING: from parent reaction 1737 sc4h9oh (+ M) <=> h + sc4h8oh-1 (+ M)
#   This is a DUPLICATE of another roaming pathway sc4h9oh (+ M) <=> h2 + c4h7oh2-2 (+ M)
falloff_reaction('sc4h9oh (+ M) <=> h2 + c4h7oh2-2 (+ M)',
                 kf=[(ALPHA/3.)*8.860000e+18, -0.818, 94238.0],
                 kf0=[(ALPHA/3.)*6.424200e+75, -16.831, 106460.0],
                 falloff=Troe(A=0.10896, T3=86.767, T1=5708700000.0, T2=2439.2),
                 options='duplicate')
# ROAMING: from parent reaction 1737 sc4h9oh (+ M) <=> h + sc4h8oh-1 (+ M)
#   This is a DUPLICATE of another roaming pathway sc4h9oh (+ M) <=> h2 + c4h7oh1-2 (+ M)
falloff_reaction('sc4h9oh (+ M) <=> h2 + c4h7oh1-2 (+ M)',
                 kf=[(ALPHA/3.)*8.860000e+18, -0.818, 94238.0],
                 kf0=[(ALPHA/3.)*6.424200e+75, -16.831, 106460.0],
                 falloff=Troe(A=0.10896, T3=86.767, T1=5708700000.0, T2=2439.2),
                 options='duplicate')
# ROAMING: from parent reaction 1737 sc4h9oh (+ M) <=> h + sc4h8oh-1 (+ M)
#   This is a DUPLICATE of another roaming pathway sc4h9oh (+ M) <=> h2 + c2h5coch3 (+ M)
falloff_reaction('sc4h9oh (+ M) <=> h2 + c2h5coch3 (+ M)',
                 kf=[(ALPHA/3.)*8.860000e+18, -0.818, 94238.0],
                 kf0=[(ALPHA/3.)*6.424200e+75, -16.831, 106460.0],
                 falloff=Troe(A=0.10896, T3=86.767, T1=5708700000.0, T2=2439.2),
                 options='duplicate')
# 
# The following reaction has generated these roaming pathways:
#   sc4h9oh <=> h2 + c4h7oh2-2
#   sc4h9oh <=> h2 + c4h7oh1-3
falloff_reaction('sc4h9oh (+ M) <=> h + sc4h8oh-2 (+ M)',
                 kf=[(1-ALPHA)*3.630000e+20, -1.323, 102100.0],
                 kf0=[(1-ALPHA)*2.706300e+71, -15.706, 113570.0],
                 falloff=Troe(A=0.18033, T3=274.39, T1=10791000.0, T2=2148.0))
# ROAMING: from parent reaction 1738 sc4h9oh (+ M) <=> h + sc4h8oh-2 (+ M)
#   This is a DUPLICATE of another roaming pathway sc4h9oh (+ M) <=> h2 + c4h7oh2-2 (+ M)
falloff_reaction('sc4h9oh (+ M) <=> h2 + c4h7oh2-2 (+ M)',
                 kf=[(ALPHA/2.)*3.630000e+20, -1.323, 102100.0],
                 kf0=[(ALPHA/2.)*2.706300e+71, -15.706, 113570.0],
                 falloff=Troe(A=0.18033, T3=274.39, T1=10791000.0, T2=2148.0),
                 options='duplicate')
# ROAMING: from parent reaction 1738 sc4h9oh (+ M) <=> h + sc4h8oh-2 (+ M)
#   This is a DUPLICATE of another roaming pathway sc4h9oh (+ M) <=> h2 + c4h7oh1-3 (+ M)
falloff_reaction('sc4h9oh (+ M) <=> h2 + c4h7oh1-3 (+ M)',
                 kf=[(ALPHA/2.)*3.630000e+20, -1.323, 102100.0],
                 kf0=[(ALPHA/2.)*2.706300e+71, -15.706, 113570.0],
                 falloff=Troe(A=0.18033, T3=274.39, T1=10791000.0, T2=2148.0),
                 options='duplicate')
# 
# The following reaction has generated these roaming pathways:
#   sc4h9oh <=> h2 + c4h7oh1-3
falloff_reaction('sc4h9oh (+ M) <=> h + sc4h8oh-3 (+ M)',
                 kf=[(1-ALPHA)*1.310000e+16, 0.018, 101830.0],
                 kf0=[(1-ALPHA)*1.741400e+67, -14.434, 113350.0],
                 falloff=Troe(A=0.16051, T3=285.87, T1=1544400.0, T2=2057.6))
# ROAMING: from parent reaction 1739 sc4h9oh (+ M) <=> h + sc4h8oh-3 (+ M)
#   This is a DUPLICATE of another roaming pathway sc4h9oh (+ M) <=> h2 + c4h7oh1-3 (+ M)
falloff_reaction('sc4h9oh (+ M) <=> h2 + c4h7oh1-3 (+ M)',
                 kf=[(ALPHA/1.)*1.310000e+16, 0.018, 101830.0],
                 kf0=[(ALPHA/1.)*1.741400e+67, -14.434, 113350.0],
                 falloff=Troe(A=0.16051, T3=285.87, T1=1544400.0, T2=2057.6),
                 options='duplicate')
# 
# The following reaction has generated these roaming pathways:
#   sc4h9oh <=> h2 + c2h5coch3
falloff_reaction('sc4h9oh (+ M) <=> h + sc4h9o (+ M)',
                 kf=[(1-ALPHA)*2.200000e+14, 0.245, 104850.0],
                 kf0=[(1-ALPHA)*8.597000e+62, -13.509, 115890.0],
                 falloff=Troe(A=0.48822, T3=27.191, T1=21032000000.0, T2=2246100.0))
# ROAMING: from parent reaction 1740 sc4h9oh (+ M) <=> h + sc4h9o (+ M)
#   This is a DUPLICATE of another roaming pathway sc4h9oh (+ M) <=> h2 + c2h5coch3 (+ M)
falloff_reaction('sc4h9oh (+ M) <=> h2 + c2h5coch3 (+ M)',
                 kf=[(ALPHA/1.)*2.200000e+14, 0.245, 104850.0],
                 kf0=[(ALPHA/1.)*8.597000e+62, -13.509, 115890.0],
                 falloff=Troe(A=0.48822, T3=27.191, T1=21032000000.0, T2=2246100.0),
                 options='duplicate')
# !  Class 1  Unimolecular decompositions
#  ic4h9oh
# 
# The following reaction has generated these roaming pathways:
#   ic4h9oh <=> c3h8 + ch2o
#   ic4h9oh <=> ch3oh + c3h6
falloff_reaction('ic4h9oh (+ M) <=> ic3h7 + ch2oh (+ M)',
                 kf=[(1-ALPHA)*3.250000e+25, -2.413, 87976.0],
                 kf0=[(1-ALPHA)*1.232700e+73, -15.724, 92616.0],
                 falloff=Troe(A=0.13423, T3=775.39, T1=40069000.0, T2=4428.1))
# ROAMING: from parent reaction 1743 ic4h9oh (+ M) <=> ic3h7 + ch2oh (+ M)
falloff_reaction('ic4h9oh (+ M) <=> c3h8 + ch2o (+ M)',
                 kf=[(ALPHA/2.)*3.250000e+25, -2.413, 87976.0],
                 kf0=[(ALPHA/2.)*1.232700e+73, -15.724, 92616.0],
                 falloff=Troe(A=0.13423, T3=775.39, T1=40069000.0, T2=4428.1))
# ROAMING: from parent reaction 1743 ic4h9oh (+ M) <=> ic3h7 + ch2oh (+ M)
falloff_reaction('ic4h9oh (+ M) <=> ch3oh + c3h6 (+ M)',
                 kf=[(ALPHA/2.)*3.250000e+25, -2.413, 87976.0],
                 kf0=[(ALPHA/2.)*1.232700e+73, -15.724, 92616.0],
                 falloff=Troe(A=0.13423, T3=775.39, T1=40069000.0, T2=4428.1))
# 
# The following reaction has generated these roaming pathways:
#   ic4h9oh <=> ch4 + ch3chchoh
#   ic4h9oh <=> ch4 + c3h5oh
falloff_reaction('ic4h9oh (+ M) <=> c3h6oh-2 + ch3 (+ M)',
                 kf=[(1-ALPHA)*4.000000e+27, -3.11, 92179.0],
                 kf0=[(1-ALPHA)*4.046300e+66, -14.122, 90777.0],
                 falloff=Troe(A=0.14416, T3=835.91, T1=4848200.0, T2=4547.3))
# ROAMING: from parent reaction 1744 ic4h9oh (+ M) <=> c3h6oh-2 + ch3 (+ M)
falloff_reaction('ic4h9oh (+ M) <=> ch4 + ch3chchoh (+ M)',
                 kf=[(ALPHA/2.)*4.000000e+27, -3.11, 92179.0],
                 kf0=[(ALPHA/2.)*4.046300e+66, -14.122, 90777.0],
                 falloff=Troe(A=0.14416, T3=835.91, T1=4848200.0, T2=4547.3))
# ROAMING: from parent reaction 1744 ic4h9oh (+ M) <=> c3h6oh-2 + ch3 (+ M)
falloff_reaction('ic4h9oh (+ M) <=> ch4 + c3h5oh (+ M)',
                 kf=[(ALPHA/2.)*4.000000e+27, -3.11, 92179.0],
                 kf0=[(ALPHA/2.)*4.046300e+66, -14.122, 90777.0],
                 falloff=Troe(A=0.14416, T3=835.91, T1=4848200.0, T2=4547.3))
# 
# The following reaction has generated these roaming pathways:
#   ic4h9oh <=> h2o + ic4h8
falloff_reaction('ic4h9oh (+ M) <=> oh + ic4h9 (+ M)',
                 kf=[(1-ALPHA)*1.400000e+21, -1.481, 94894.0],
                 kf0=[(1-ALPHA)*2.087200e+55, -11.191, 90431.0],
                 falloff=Troe(A=0.00054471, T3=1125.4, T1=16818000000.0, T2=3635.2))
# ROAMING: from parent reaction 1745 ic4h9oh (+ M) <=> oh + ic4h9 (+ M)
#   This is a DUPLICATE of original rxn 1750 ic4h9oh (+ M) <=> h2o + ic4h8 (+ M)
falloff_reaction('ic4h9oh (+ M) <=> h2o + ic4h8 (+ M)',
                 kf=[(ALPHA/1.)*1.400000e+21, -1.481, 94894.0],
                 kf0=[(ALPHA/1.)*2.087200e+55, -11.191, 90431.0],
                 falloff=Troe(A=0.00054471, T3=1125.4, T1=16818000000.0, T2=3635.2),
                 options='duplicate')
# 
# The following reaction has generated these roaming pathways:
#   ic4h9oh <=> h2 + ic3h6choh
#   ic4h9oh <=> h2 + ic3h7cho
falloff_reaction('ic4h9oh (+ M) <=> ic4h8oh-1 + h (+ M)',
                 kf=[(1-ALPHA)*5.680000e+16, -0.297, 95908.0],
                 kf0=[(1-ALPHA)*1.889500e+49, -9.561, 90472.0],
                 falloff=Troe(A=2.0948e-05, T3=1164.2, T1=16818000000.0, T2=3704.9))
# ROAMING: from parent reaction 1746 ic4h9oh (+ M) <=> ic4h8oh-1 + h (+ M)
#   This is a DUPLICATE of another roaming pathway ic4h9oh (+ M) <=> h2 + ic3h6choh (+ M)
falloff_reaction('ic4h9oh (+ M) <=> h2 + ic3h6choh (+ M)',
                 kf=[(ALPHA/2.)*5.680000e+16, -0.297, 95908.0],
                 kf0=[(ALPHA/2.)*1.889500e+49, -9.561, 90472.0],
                 falloff=Troe(A=2.0948e-05, T3=1164.2, T1=16818000000.0, T2=3704.9),
                 options='duplicate')
# ROAMING: from parent reaction 1746 ic4h9oh (+ M) <=> ic4h8oh-1 + h (+ M)
#   This is a DUPLICATE of another roaming pathway ic4h9oh (+ M) <=> h2 + ic3h7cho (+ M)
falloff_reaction('ic4h9oh (+ M) <=> h2 + ic3h7cho (+ M)',
                 kf=[(ALPHA/2.)*5.680000e+16, -0.297, 95908.0],
                 kf0=[(ALPHA/2.)*1.889500e+49, -9.561, 90472.0],
                 falloff=Troe(A=2.0948e-05, T3=1164.2, T1=16818000000.0, T2=3704.9),
                 options='duplicate')
# 
# The following reaction has generated these roaming pathways:
#   ic4h9oh <=> h2 + ic3h6choh
#   ic4h9oh <=> h2 + ic3h5ch2oh
falloff_reaction('ic4h9oh (+ M) <=> ic4h8oh-2 + h (+ M)',
                 kf=[(1-ALPHA)*1.700000e+17, -0.467, 98199.0],
                 kf0=[(1-ALPHA)*2.477900e+46, -8.823, 90945.0],
                 falloff=Troe(A=0.14595, T3=1034.0, T1=1.0695e+11, T2=5129.2))
# ROAMING: from parent reaction 1747 ic4h9oh (+ M) <=> ic4h8oh-2 + h (+ M)
#   This is a DUPLICATE of another roaming pathway ic4h9oh (+ M) <=> h2 + ic3h6choh (+ M)
falloff_reaction('ic4h9oh (+ M) <=> h2 + ic3h6choh (+ M)',
                 kf=[(ALPHA/2.)*1.700000e+17, -0.467, 98199.0],
                 kf0=[(ALPHA/2.)*2.477900e+46, -8.823, 90945.0],
                 falloff=Troe(A=0.14595, T3=1034.0, T1=1.0695e+11, T2=5129.2),
                 options='duplicate')
# ROAMING: from parent reaction 1747 ic4h9oh (+ M) <=> ic4h8oh-2 + h (+ M)
#   This is a DUPLICATE of another roaming pathway ic4h9oh (+ M) <=> h2 + ic3h5ch2oh (+ M)
falloff_reaction('ic4h9oh (+ M) <=> h2 + ic3h5ch2oh (+ M)',
                 kf=[(ALPHA/2.)*1.700000e+17, -0.467, 98199.0],
                 kf0=[(ALPHA/2.)*2.477900e+46, -8.823, 90945.0],
                 falloff=Troe(A=0.14595, T3=1034.0, T1=1.0695e+11, T2=5129.2),
                 options='duplicate')
# 
# The following reaction has generated these roaming pathways:
#   ic4h9oh <=> h2 + ic3h5ch2oh
falloff_reaction('ic4h9oh (+ M) <=> ic4h8oh-3 + h (+ M)',
                 kf=[(1-ALPHA)*5.000000e+17, -0.462, 102490.0],
                 kf0=[(1-ALPHA)*3.316700e+41, -7.365, 92821.0],
                 falloff=Troe(A=0.27069, T3=2741.9, T1=128.72, T2=9656.2))
# ROAMING: from parent reaction 1748 ic4h9oh (+ M) <=> ic4h8oh-3 + h (+ M)
#   This is a DUPLICATE of another roaming pathway ic4h9oh (+ M) <=> h2 + ic3h5ch2oh (+ M)
falloff_reaction('ic4h9oh (+ M) <=> h2 + ic3h5ch2oh (+ M)',
                 kf=[(ALPHA/1.)*5.000000e+17, -0.462, 102490.0],
                 kf0=[(ALPHA/1.)*3.316700e+41, -7.365, 92821.0],
                 falloff=Troe(A=0.27069, T3=2741.9, T1=128.72, T2=9656.2),
                 options='duplicate')
# 
# The following reaction has generated these roaming pathways:
#   ic4h9oh <=> h2 + ic3h7cho
falloff_reaction('ic4h9oh (+ M) <=> ic4h9o + h (+ M)',
                 kf=[(1-ALPHA)*1.200000e+15, 0.016, 105180.0],
                 kf0=[(1-ALPHA)*1.493900e+36, -6.144, 94567.0],
                 falloff=Troe(A=0.49994, T3=6209.6, T1=665.5, T2=2900000.0))
# ROAMING: from parent reaction 1749 ic4h9oh (+ M) <=> ic4h9o + h (+ M)
#   This is a DUPLICATE of another roaming pathway ic4h9oh (+ M) <=> h2 + ic3h7cho (+ M)
falloff_reaction('ic4h9oh (+ M) <=> h2 + ic3h7cho (+ M)',
                 kf=[(ALPHA/1.)*1.200000e+15, 0.016, 105180.0],
                 kf0=[(ALPHA/1.)*1.493900e+36, -6.144, 94567.0],
                 falloff=Troe(A=0.49994, T3=6209.6, T1=665.5, T2=2900000.0),
                 options='duplicate')
# Class 21  ROOH=RO+OH
# 
# The following reaction has generated these roaming pathways:
#   c4h8oh-1o2h <=> h2o + butanoicacid
reaction('c4h8oh-1o2h => c4h8oh-1o + oh', [(1-ALPHA)*1.000000e+16, 0.0, 39000.0])
# ROAMING: from parent reaction 1970 c4h8oh-1o2h -> c4h8oh-1o + oh
reaction('c4h8oh-1o2h <=> h2o + butanoicacid', [(ALPHA/1.)*1.000000e+16, 0.0, 39000.0])
# 
# The following reaction has generated these roaming pathways:
#   c4h8oh-2o2h <=> h2o + hydroxybutan2one
reaction('c4h8oh-2o2h => c4h8oh-2o + oh', [(1-ALPHA)*1.000000e+16, 0.0, 39000.0])
# ROAMING: from parent reaction 1971 c4h8oh-2o2h -> c4h8oh-2o + oh
reaction('c4h8oh-2o2h <=> h2o + hydroxybutan2one', [(ALPHA/1.)*1.000000e+16, 0.0, 39000.0])
# 
# The following reaction has generated these roaming pathways:
#   c4h8oh-3o2h <=> h2o + hydroxybutan3one
reaction('c4h8oh-3o2h => c4h8oh-3o + oh', [(1-ALPHA)*1.000000e+16, 0.0, 39000.0])
# ROAMING: from parent reaction 1972 c4h8oh-3o2h -> c4h8oh-3o + oh
reaction('c4h8oh-3o2h <=> h2o + hydroxybutan3one', [(ALPHA/1.)*1.000000e+16, 0.0, 39000.0])
# 
# The following reaction has generated these roaming pathways:
#   c4h8oh-4o2h <=> h2o + hydroxybutan4al
reaction('c4h8oh-4o2h => c4h8oh-4o + oh', [(1-ALPHA)*1.000000e+16, 0.0, 39000.0])
# ROAMING: from parent reaction 1973 c4h8oh-4o2h -> c4h8oh-4o + oh
reaction('c4h8oh-4o2h <=> h2o + hydroxybutan4al', [(ALPHA/1.)*1.000000e+16, 0.0, 39000.0])
# Class 21  ROOH=RO+OH
# 
# The following reaction has generated these roaming pathways:
#   ic4h8oh-1o2h <=> h2o + isobutyricacid
reaction('ic4h8oh-1o2h => ic4h8oh-1o + oh', [(1-ALPHA)*1.000000e+16, 0.0, 39000.0])
# ROAMING: from parent reaction 2117 ic4h8oh-1o2h -> ic4h8oh-1o + oh
reaction('ic4h8oh-1o2h <=> h2o + isobutyricacid', [(ALPHA/1.)*1.000000e+16, 0.0, 39000.0])
# 
# The following reaction has generated these roaming pathways:
#   ic4h8oh-3o2h <=> h2o + C(OH)C(C)CHO
reaction('ic4h8oh-3o2h => ic4h8oh-3o + oh', [(1-ALPHA)*1.000000e+16, 0.0, 39000.0])
# ROAMING: from parent reaction 2119 ic4h8oh-3o2h -> ic4h8oh-3o + oh
reaction('ic4h8oh-3o2h <=> h2o + C(OH)C(C)CHO', [(ALPHA/1.)*1.000000e+16, 0.0, 39000.0])
# Class 21  ROOH=RO+OH
# 
# The following reaction has generated these roaming pathways:
#   tc4h8oh-o2h <=> h2o + tc3h6ohcho
reaction('tc4h8oh-o2h => tc4h8oh-o + oh', [(1-ALPHA)*1.000000e+16, 0.0, 39000.0])
# ROAMING: from parent reaction 2180 tc4h8oh-o2h -> tc4h8oh-o + oh
reaction('tc4h8oh-o2h <=> h2o + tc3h6ohcho', [(ALPHA/1.)*1.000000e+16, 0.0, 39000.0])
# 
# The following reaction has generated these roaming pathways:
#   sc4h8oh-2o2h <=> h2o + Acethoin
reaction('sc4h8oh-2o2h => sc4h8oh-2o + oh', [(1-ALPHA)*1.000000e+16, 0.0, 39000.0])
# ROAMING: from parent reaction 2264 sc4h8oh-2o2h -> sc4h8oh-2o + oh
reaction('sc4h8oh-2o2h <=> h2o + Acethoin', [(ALPHA/1.)*1.000000e+16, 0.0, 39000.0])
# 
# The following reaction has generated these roaming pathways:
#   sc4h8oh-3o2h <=> h2o + Acetaldol
reaction('sc4h8oh-3o2h => sc4h8oh-3o + oh', [(1-ALPHA)*1.000000e+16, 0.0, 39000.0])
# ROAMING: from parent reaction 2265 sc4h8oh-3o2h -> sc4h8oh-3o + oh
reaction('sc4h8oh-3o2h <=> h2o + Acetaldol', [(ALPHA/1.)*1.000000e+16, 0.0, 39000.0])
# 
# The following reaction has generated these roaming pathways:
#   sc4h8oh-mo2h <=> h2o + hydroxybutanal
reaction('sc4h8oh-mo2h => sc4h8oh-mo + oh', [(1-ALPHA)*1.000000e+16, 0.0, 39000.0])
# ROAMING: from parent reaction 2266 sc4h8oh-mo2h -> sc4h8oh-mo + oh
reaction('sc4h8oh-mo2h <=> h2o + hydroxybutanal', [(ALPHA/1.)*1.000000e+16, 0.0, 39000.0])
In [47]:
header = ["# For roaming:","ALPHA = 0.1",""]
parser.writeCTI(outName=os.path.join(outdir,model_name+'.roaming.cti'),
               header = header,
               )
Out[47]:
[]
In [48]:
parser.checkDuplicateReactions()