diff --git a/input/kinetics/families/1,2_Insertion_CO/groups.py b/input/kinetics/families/1,2_Insertion_CO/groups.py index 0939bd609b..7bb080353c 100644 --- a/input/kinetics/families/1,2_Insertion_CO/groups.py +++ b/input/kinetics/families/1,2_Insertion_CO/groups.py @@ -7,7 +7,7 @@ Reaction site *1 should always be a singlet in this family. """ -template(reactants=["CO_birad", "RR'"], products=["R_CO_R'"], ownReverse=False) +template(reactants=["CO", "RR'"], products=["R_CO_R'"], ownReverse=False) reverse = "1,1_Elimination" @@ -22,11 +22,11 @@ entry( index = 3, - label = "CO_birad", + label = "CO", group = """ -1 *1 C u0 p1 {2,T} -2 *4 O u0 p1 {1,T} +1 *1 C u0 p1 c-1 {2,T} +2 *4 O u0 p1 c+1 {1,T} """, kinetics = None, ) @@ -764,7 +764,7 @@ tree( """ -L1: CO_birad +L1: CO L1: RR' L2: R_H L3: H2 diff --git a/input/kinetics/families/1,2_Insertion_CO/rules.py b/input/kinetics/families/1,2_Insertion_CO/rules.py index 9de1db9309..ee382974fe 100644 --- a/input/kinetics/families/1,2_Insertion_CO/rules.py +++ b/input/kinetics/families/1,2_Insertion_CO/rules.py @@ -8,7 +8,7 @@ """ entry( index = 553, - label = "CO_birad;RR'", + label = "CO;RR'", kinetics = ArrheniusEP( A = (100000, 'cm^3/(mol*s)'), n = 2, @@ -28,7 +28,7 @@ entry( index = 554, - label = "CO_birad;C_methyl_C_methyl", + label = "CO;C_methyl_C_methyl", kinetics = ArrheniusEP( A = (538, 'cm^3/(mol*s)'), n = 3.29, @@ -48,7 +48,7 @@ entry( index = 555, - label = "CO_birad;H2", + label = "CO;H2", kinetics = ArrheniusEP( A = (2.89e+09, 'cm^3/(mol*s)'), n = 1.16, @@ -68,7 +68,7 @@ entry( index = 556, - label = "CO_birad;C_methane", + label = "CO;C_methane", kinetics = ArrheniusEP( A = (16400, 'cm^3/(mol*s)'), n = 2.86, @@ -88,7 +88,7 @@ entry( index = 557, - label = "CO_birad;C_pri/NonDeC", + label = "CO;C_pri/NonDeC", kinetics = ArrheniusEP( A = (91400, 'cm^3/(mol*s)'), n = 2.53, @@ -108,7 +108,7 @@ entry( index = 558, - label = "CO_birad;C/H2/NonDeC", + label = "CO;C/H2/NonDeC", kinetics = ArrheniusEP( A = (766000, 'cm^3/(mol*s)'), n = 2.07, @@ -128,7 +128,7 @@ entry( index = 559, - label = "CO_birad;C/H/Cs3", + label = "CO;C/H/Cs3", kinetics = ArrheniusEP( A = (8.89e+07, 'cm^3/(mol*s)'), n = 1.51, @@ -143,7 +143,7 @@ entry( index = 560, - label = "CO_birad;CsO_H", + label = "CO;CsO_H", kinetics = ArrheniusEP( A = (0.127, 'cm^3/(mol*s)'), n = 3.7, diff --git a/input/kinetics/families/1,3_Insertion_ROR/groups.py b/input/kinetics/families/1,3_Insertion_ROR/groups.py index a3f2911300..59c9393467 100644 --- a/input/kinetics/families/1,3_Insertion_ROR/groups.py +++ b/input/kinetics/families/1,3_Insertion_ROR/groups.py @@ -21,7 +21,7 @@ entry( index = 1, label = "doublebond", - group = "OR{Cd_Cdd, Cdd_Cd, Cd_Cd, Sd_Cd, N3d_N3d, N3d_Cd}", + group = "OR{Cd_Cdd, Cdd_Cd, Cd_Cd, Sd_Cd, N1d_N5dd, N3d_Cd}", kinetics = None, ) @@ -975,7 +975,7 @@ """ 1 *1 Sd u0 {2,D} 2 *2 Cdd u0 {1,D} {3,D} -3 R u0 {2,D} +3 R!H u0 {2,D} """, kinetics = None, ) @@ -1175,12 +1175,12 @@ entry( index = 97, - label = "N3d_N3d", + label = "N1d_N5dd", group = """ -1 *1 N3d u0 {2,D} -2 *2 N3d u0 {1,D} {3,D} -3 Od u0 {2,D} +1 *1 N1d u0 {2,D} +2 *2 N5dd u0 {1,D} {3,D} +3 Od u0 {2,D} """, kinetics = None, ) @@ -1545,7 +1545,7 @@ L6: Sd_Cd/CsOs L5: Sd_Cd/Nd/De L5: Sd_Cd/De2 - L2: N3d_N3d + L2: N1d_N5dd L2: N3d_Cd L1: R_OR L2: H_OR diff --git a/input/kinetics/families/1,3_Insertion_RSR/groups.py b/input/kinetics/families/1,3_Insertion_RSR/groups.py index 23d13e18f9..f3d063454e 100644 --- a/input/kinetics/families/1,3_Insertion_RSR/groups.py +++ b/input/kinetics/families/1,3_Insertion_RSR/groups.py @@ -943,7 +943,7 @@ """ 1 *1 Od u0 {2,D} 2 *2 Cdd u0 {1,D} {3,D} -3 R u0 {2,D} +3 R!H u0 {2,D} """, kinetics = None, ) @@ -1144,7 +1144,7 @@ """ 1 *1 Sd u0 {2,D} 2 *2 Cdd u0 {1,D} {3,D} -3 R u0 {2,D} +3 R!H u0 {2,D} """, kinetics = None, ) diff --git a/input/kinetics/families/1,4_Cyclic_birad_scission/groups.py b/input/kinetics/families/1,4_Cyclic_birad_scission/groups.py index dece461a6f..0c069aa52e 100644 --- a/input/kinetics/families/1,4_Cyclic_birad_scission/groups.py +++ b/input/kinetics/families/1,4_Cyclic_birad_scission/groups.py @@ -31,11 +31,11 @@ label = "R5JJ", group = """ -1 *1 R u1 {2,[S,D]} {5,S} -2 *2 R u0 {1,[S,D]} {3,S} -3 *3 R u0 {2,S} {4,[S,D]} -4 *4 R u1 {3,[S,D]} {5,S} -5 R u0 {1,S} {4,S} +1 *1 R!H u1 {2,[S,D]} {5,S} +2 *2 R!H u0 {1,[S,D]} {3,S} +3 *3 R!H u0 {2,S} {4,[S,D]} +4 *4 R!H u1 {3,[S,D]} {5,S} +5 R!H u0 {1,S} {4,S} """, kinetics = None, ) @@ -45,12 +45,12 @@ label = "R6JJ", group = """ -1 *1 R u1 {2,[S,D]} {5,S} -2 *2 R u0 {1,[S,D]} {3,S} -3 *3 R u0 {2,S} {4,[S,D]} -4 *4 R u1 {3,[S,D]} {6,S} -5 R u0 {1,S} {6,S} -6 R u0 {4,S} {5,S} +1 *1 R!H u1 {2,[S,D]} {5,S} +2 *2 R!H u0 {1,[S,D]} {3,S} +3 *3 R!H u0 {2,S} {4,[S,D]} +4 *4 R!H u1 {3,[S,D]} {6,S} +5 R!H u0 {1,S} {6,S} +6 R!H u0 {4,S} {5,S} """, kinetics = None, ) @@ -60,13 +60,13 @@ label = "R7JJ", group = """ -1 *1 R u1 {2,[S,D]} {5,S} -2 *2 R u0 {1,[S,D]} {3,S} -3 *3 R u0 {2,S} {4,[S,D]} -4 *4 R u1 {3,[S,D]} {7,S} -5 R u0 {1,S} {6,S} -6 R u0 {5,S} {7,S} -7 R u0 {4,S} {6,S} +1 *1 R!H u1 {2,[S,D]} {5,S} +2 *2 R!H u0 {1,[S,D]} {3,S} +3 *3 R!H u0 {2,S} {4,[S,D]} +4 *4 R!H u1 {3,[S,D]} {7,S} +5 R!H u0 {1,S} {6,S} +6 R!H u0 {5,S} {7,S} +7 R!H u0 {4,S} {6,S} """, kinetics = None, ) diff --git a/input/kinetics/families/1,4_Linear_birad_scission/groups.py b/input/kinetics/families/1,4_Linear_birad_scission/groups.py index ec5fc574ba..b81526634b 100644 --- a/input/kinetics/families/1,4_Linear_birad_scission/groups.py +++ b/input/kinetics/families/1,4_Linear_birad_scission/groups.py @@ -24,10 +24,10 @@ label = "RJJ", group = """ -1 *1 R u1 {2,[S,D]} -2 *2 R u0 {1,[S,D]} {3,S} -3 *3 R u0 {2,S} {4,[S,D]} -4 *4 R u1 {3,[S,D]} +1 *1 R!H u1 {2,[S,D]} +2 *2 R!H u0 {1,[S,D]} {3,S} +3 *3 R!H u0 {2,S} {4,[S,D]} +4 *4 R!H u1 {3,[S,D]} """, kinetics = None, ) diff --git a/input/kinetics/families/Disproportionation/groups.py b/input/kinetics/families/Disproportionation/groups.py index 57179ecd0c..a891b1b313 100644 --- a/input/kinetics/families/Disproportionation/groups.py +++ b/input/kinetics/families/Disproportionation/groups.py @@ -1207,26 +1207,6 @@ kinetics = None, ) -entry( - index = 232, - label = "N5_rad", - group = -""" -1 *1 [N5d,N5dd,N5t] u1 -""", - kinetics = None, -) - -entry( - index = 233, - label = "N5d_rad", - group = -""" -1 *1 N5d u1 -""", - kinetics = None, -) - entry( index = 2, label = "XH_Rrad", @@ -2695,13 +2675,13 @@ entry( index = 288, - label = "Cd_Cdrad", + label = "Cds/H/R!H", group = """ -1 *2 Cd u0 {2,D} {3,S} -2 *3 Cd u1 {1,D} -3 *4 H u0 {1,S} - +1 *2 C u0 {2,D} {3,S} {4,S} +2 *3 R!H u1 {1,D} +3 *4 H u0 {1,S} +4 R!H u0 {1,S} """, kinetics = None, ) @@ -2809,8 +2789,7 @@ L5: N3d_rad/C L5: N3d_rad/O L5: N3d_rad/N - L3: N5_rad - L4: N5d_rad + L3: H_rad L1: XH_Rrad_birad L2: XH_Rrad L3: XH_s_Rrad @@ -2895,7 +2874,6 @@ L5: N5H_s_Rrad L3: XH_d_Rrad L4: CH_d_Rrad - L5: Cd_Cdrad L5: Cds/H2_d_Rrad L6: Cds/H2_d_Crad L6: Cds/H2_d_N3rad @@ -2905,8 +2883,9 @@ L8: Cds/H2_d_N5ddrad/C L8: Cds/H2_d_N5ddrad/O L8: Cds/H2_d_N5ddrad/N - L5: Cds/H/NonDe_d_Rrad - L5: Cds/H/Deloc_d_Rrad + L5: Cds/H/R!H + L6: Cds/H/NonDe_d_Rrad + L6: Cds/H/Deloc_d_Rrad L4: NH_d_Rrad L5: N3d/H_d_Rrad L6: N3d/H_d_Crad diff --git a/input/kinetics/families/Disproportionation/rules.py b/input/kinetics/families/Disproportionation/rules.py index ef0404cf18..95e34da193 100644 --- a/input/kinetics/families/Disproportionation/rules.py +++ b/input/kinetics/families/Disproportionation/rules.py @@ -551,18 +551,18 @@ shortDesc = u"""Rough estimate based on 1/10 of #3026 in R_Recombination""", longDesc = u""" -[91] Tsang, W.; Journal of Physical and Chemical Reference Data (1988), 17(2), 887-951. -Literature review. CH3 + n-C3H7 --> C3H6 + CH4 - -pg. 920: Discussion on evaluated data - -Entry 41,16 (b): No direct measurements for either the addition or disproportionation - -rxns. Author recommends a rate coefficient expression for the addition rxn, based -on the geometric mean rule of the rxns CH3+CH3=>adduct and n-C3H7+n-C3H7=>adduct. -Furthermore, author recommends a branching ratio for disproportionation to -addition of 0.06 (which appears to MRH to be consistent with the experimentally -measured branching ratios) +[91] Tsang, W.; Journal of Physical and Chemical Reference Data (1988), 17(2), 887-951. +Literature review. CH3 + n-C3H7 --> C3H6 + CH4 + +pg. 920: Discussion on evaluated data + +Entry 41,16 (b): No direct measurements for either the addition or disproportionation + +rxns. Author recommends a rate coefficient expression for the addition rxn, based +on the geometric mean rule of the rxns CH3+CH3=>adduct and n-C3H7+n-C3H7=>adduct. +Furthermore, author recommends a branching ratio for disproportionation to +addition of 0.06 (which appears to MRH to be consistent with the experimentally +measured branching ratios) MRH 30-Aug-2009 """, ) @@ -644,18 +644,18 @@ shortDesc = u"""Rough estimate based on 1/10 of #3027 in R_Recombination""", longDesc = u""" -[91] Tsang, W.; Journal of Physical and Chemical Reference Data (1988), 17(2), 887-951. -Literature review. C2H5 + n-C3H7 --> C3H6 + C2H6 - -pg. 937-938: Discussion on evaluated data - -Entry 42,17 (b): No direct measurements for either the addition or disproportionation - -rxns. Author recommends a rate coefficient expression for the addition rxn, based -on the geometric mean rule of the rxns C2H5+C2H5=>adduct and n-C3H7+n-C3H7=>adduct. -Furthermore, author recommends a branching ratio for disproportionation to -addition of 0.073 (which is an average of the 2 experimentally determined -branching ratios) +[91] Tsang, W.; Journal of Physical and Chemical Reference Data (1988), 17(2), 887-951. +Literature review. C2H5 + n-C3H7 --> C3H6 + C2H6 + +pg. 937-938: Discussion on evaluated data + +Entry 42,17 (b): No direct measurements for either the addition or disproportionation + +rxns. Author recommends a rate coefficient expression for the addition rxn, based +on the geometric mean rule of the rxns C2H5+C2H5=>adduct and n-C3H7+n-C3H7=>adduct. +Furthermore, author recommends a branching ratio for disproportionation to +addition of 0.073 (which is an average of the 2 experimentally determined +branching ratios) MRH 30-Aug-2009 """, ) @@ -749,15 +749,15 @@ shortDesc = u"""Rough estimate based on 1/10 of #3026 in R_Recombination""", longDesc = u""" -[91] Tsang, W.; Journal of Physical and Chemical Reference Data (1988), 17(2), 887-951. -Literature review. CH2OH + n-C3H7 --> C3H6 + CH3OH - -pg. 926: Discussion on evaluated data - -Entry 41,39 (c): No data available at the time. Author estimates the rate coefficient - -for the addition rxn to be similar to the rate for n-C3H7+n-C3H7=>adduct. Author -also estimates the branching ratio of disproportionation to addition as 0.051 +[91] Tsang, W.; Journal of Physical and Chemical Reference Data (1988), 17(2), 887-951. +Literature review. CH2OH + n-C3H7 --> C3H6 + CH3OH + +pg. 926: Discussion on evaluated data + +Entry 41,39 (c): No data available at the time. Author estimates the rate coefficient + +for the addition rxn to be similar to the rate for n-C3H7+n-C3H7=>adduct. Author +also estimates the branching ratio of disproportionation to addition as 0.051 MRH 30-Aug-2009 """, ) @@ -1920,27 +1920,6 @@ """, ) -entry( - index = 555, - label = "O2b;Cd_Cdrad", - kinetics = ArrheniusEP( - A = (1.3E+15, 'cm^3/(mol*s)','*|/',5), - n = -1.26, - alpha = 0, - E0 = (3.31, 'kcal/mol'), - Tmin = (300, 'K'), - Tmax = (2000, 'K'), - ), - rank = 5, - shortDesc = u"""S.S. Merchant estimate""", - longDesc = -u""" -This rate rule is a estimate taken from NIST, ref: Aromatic and Polycyclic Aromatic -Hydrocarbon Formation in a Laminar Premixed n-butane Flame -Derived from fitting to a complex mechanism for C2H3 + O2 = C2H2 + HO2 -""", -) - entry( index = 555, label = "O2b;Cmethyl_Csrad/H/Cd", diff --git a/input/kinetics/families/Disproportionation/training/dictionary.txt b/input/kinetics/families/Disproportionation/training/dictionary.txt index 0d2bc497e2..881e5a6f2c 100644 --- a/input/kinetics/families/Disproportionation/training/dictionary.txt +++ b/input/kinetics/families/Disproportionation/training/dictionary.txt @@ -24,3 +24,27 @@ C2H2 3 *4 H u0 p0 c0 {1,S} 4 H u0 p0 c0 {2,S} +O2 +multiplicity 3 +1 *1 O u1 p2 c0 {2,S} +2 O u1 p2 c0 {1,S} + +HO2 +1 *1 O u0 p2 c0 {2,S} {3,S} +2 O u1 p2 c0 {1,S} +3 *4 H u0 p0 c0 {1,S} + +C2H3 +multiplicity 2 +1 *3 C u1 p0 c0 {2,S} {3,D} +2 H u0 p0 c0 {1,S} +3 *2 C u0 p0 c0 {1,D} {4,S} {5,S} +4 *4 H u0 p0 c0 {3,S} +5 H u0 p0 c0 {3,S} + +C2H2_1 +1 *3 C u0 p0 c0 {2,T} {3,S} +2 *2 C u0 p0 c0 {1,T} {4,S} +3 H u0 p0 c0 {1,S} +4 H u0 p0 c0 {2,S} + diff --git a/input/kinetics/families/Disproportionation/training/reactions.py b/input/kinetics/families/Disproportionation/training/reactions.py index 9b1dde19dd..df2e9b228a 100644 --- a/input/kinetics/families/Disproportionation/training/reactions.py +++ b/input/kinetics/families/Disproportionation/training/reactions.py @@ -10,7 +10,6 @@ entry( index = 1, label = "C2H + CH3O <=> C2H2 + CH2O", - degeneracy = 1, kinetics = Arrhenius( A = (3.61e+13, 'cm^3/(mol*s)', '*|/', 5), n = 0, @@ -37,3 +36,27 @@ """, ) +entry( + index = 2, + label = "C2H3 + O2 = C2H2_1 + HO2", + kinetics = Arrhenius( + A = (1.04E+16, 'cm^3/(mol*s)','*|/',5), + n = -1.26, + Ea = (3.31, 'kcal/mol'), + T0 = (1, 'K'), + Tmin = (300, 'K'), + Tmax = (2000, 'K'), + ), + rank = 5, + shortDesc = u"""S.S. Merchant estimate""", + longDesc = +u""" +This rate rule is a estimate taken from NIST, ref: Aromatic and Polycyclic Aromatic +Hydrocarbon Formation in a Laminar Premixed n-butane Flame +Derived from fitting to a complex mechanism for C2H3 + O2 = C2H2 + HO2 +""", +) + + + + diff --git a/input/kinetics/families/H_Abstraction/groups.py b/input/kinetics/families/H_Abstraction/groups.py index 114f428aed..b8792a9e39 100644 --- a/input/kinetics/families/H_Abstraction/groups.py +++ b/input/kinetics/families/H_Abstraction/groups.py @@ -19,7 +19,7 @@ entry( index = 1, label = "X_H_or_Xrad_H_Xbirad_H_Xtrirad_H", - group = "OR{X_H, Xrad_H, Xbirad_H, Xtrirad_H}", + group = "OR{Xtrirad_H, Xbirad_H, Xrad_H, X_H}", kinetics = None, ) @@ -2048,20 +2048,6 @@ kinetics = None, ) -entry( - index = 130, - label = "C/H2/Cb", - group = -""" -1 *1 C u0 {2,S} {3,S} {4,S} {5,S} -2 *2 H u0 {1,S} -3 H u0 {1,S} -4 C u0 {1,S} -5 Cb u0 {1,S} -""", - kinetics = None, -) - entry( index = 131, label = "C_ter", @@ -2878,20 +2864,6 @@ kinetics = None, ) -entry( - index = 184, - label = "C/H/Cb", - group = -""" -1 *1 C u0 {2,S} {3,S} {4,S} {5,S} -2 *2 H u0 {1,S} -3 C u0 {1,S} -4 C u0 {1,S} -5 Cb u0 {1,S} -""", - kinetics = None, -) - entry( index = 409, label = "N3_H", @@ -3100,33 +3072,23 @@ label = "N3d/H/OneDe", group = """ -1 *1 N3d u0 {2,S} {3,D} -2 *2 H u0 {1,S} -3 [Cd,Ct,Cb,CO,N5d,N5t] u0 {1,D} +1 *1 N3d u0 {2,S} {3,D} +2 *2 H u0 {1,S} +3 Cdd u0 {1,D} {4,D} +4 R!H u0 {3,D} """, kinetics = None, ) entry( index = 467, - label = "N3d/H/OneDeCO", - group = -""" -1 *1 N3d u0 {2,S} {3,D} -2 *2 H u0 {1,S} -3 CO u0 {1,D} -""", - kinetics = None, -) - -entry( - index = 468, - label = "N3d/H/OneDeN", + label = "N3d/H/CddO", group = """ -1 *1 N3d u0 {2,S} {3,D} -2 *2 H u0 {1,S} -3 [N5d,N5t] u0 {1,D} +1 *1 N3d u0 {2,S} {3,D} +2 *2 H u0 {1,S} +3 Cdd u0 {1,D} {4,D} +4 Od u0 {3,D} """, kinetics = None, ) @@ -3171,7 +3133,7 @@ label = "Xrad_H", group = """ -1 *1 R u1 {2,S} +1 *1 R!H u1 {2,S} 2 *2 H u0 {1,S} """, kinetics = None, @@ -5104,10 +5066,10 @@ label = "C_rad/H/NonDeCN", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 H u0 {1,S} -3 C u0 {1,S} -4 N u0 {1,S} +1 *3 Cs u1 {2,S} {3,S} {4,S} +2 H u0 {1,S} +3 Cs u0 {1,S} +4 N u0 {1,S} """, kinetics = None, ) @@ -6389,6 +6351,24 @@ tree( """ L1: X_H_or_Xrad_H_Xbirad_H_Xtrirad_H + L2: Xtrirad_H + L3: C_quartet_H + L3: C_doublet_H + L2: Xbirad_H + L3: CH2_triplet_H + L3: CH2_singlet_H + L3: NH_triplet_H + L3: NH_singlet_H + L2: Xrad_H + L3: C_rad_H + L4: CH3_rad_H + L4: Cs/H2/OneDeN + L3: OH_rad_H + L3: Srad_H + L3: N3s_rad_H + L4: NH2_rad_H + L4: N3s_rad_H_pri + L5: N3s_rad_H/H/NonDeN L2: X_H L3: H2 L3: Ct_H @@ -6530,7 +6510,6 @@ L6: C/H2/CdCd L6: C/H2/CdCS L6: C/H2/CSCS - L5: C/H2/Cb L4: C_ter L5: C/H/NonDe L6: C/H/Cs3 @@ -6586,7 +6565,6 @@ L6: C/H/TDMustO L6: C/H/TDMustS L5: C/H/ThreeDe - L5: C/H/Cb L3: N3_H L4: N3s_H L5: NH3 @@ -6604,29 +6582,10 @@ L6: N3d/H/NonDeO L6: N3d/H/NonDeN L5: N3d/H/OneDe - L6: N3d/H/OneDeCO - L6: N3d/H/OneDeN + L6: N3d/H/CddO L3: N5_H L4: N5d_H L5: N5d/H/NonDeOO - L2: Xrad_H - L3: C_rad_H - L4: CH3_rad_H - L4: Cs/H2/OneDeN - L3: OH_rad_H - L3: Srad_H - L3: N3s_rad_H - L4: NH2_rad_H - L4: N3s_rad_H_pri - L5: N3s_rad_H/H/NonDeN - L2: Xbirad_H - L3: CH2_triplet_H - L3: CH2_singlet_H - L3: NH_triplet_H - L3: NH_singlet_H - L2: Xtrirad_H - L3: C_quartet_H - L3: C_doublet_H L1: Y_rad_birad_trirad_quadrad L2: Y_1centerquadrad L3: C_quintet diff --git a/input/kinetics/families/H_Abstraction/rules.py b/input/kinetics/families/H_Abstraction/rules.py index 042cc7d7d8..995a15740d 100644 --- a/input/kinetics/families/H_Abstraction/rules.py +++ b/input/kinetics/families/H_Abstraction/rules.py @@ -5259,36 +5259,6 @@ shortDesc = u"""Tully et al. experimental data (changed to per H)""", ) -entry( - index = 542, - label = "C/H2/Cb;O_pri_rad", - kinetics = ArrheniusEP( - A = (4.2e+12, 'cm^3/(mol*s)'), - n = 0, - alpha = 0, - E0 = (2.59, 'kcal/mol'), - Tmin = (500, 'K'), - Tmax = (1000, 'K'), - ), - rank = 3, - shortDesc = u"""Tully et al. experimental data (changed to per H)""", -) - -entry( - index = 543, - label = "C/H/Cb;O_pri_rad", - kinetics = ArrheniusEP( - A = (4.2e+12, 'cm^3/(mol*s)'), - n = 0, - alpha = 0, - E0 = (2.59, 'kcal/mol'), - Tmin = (500, 'K'), - Tmax = (1000, 'K'), - ), - rank = 3, - shortDesc = u"""Tully et al. experimental data (changed to per H)""", -) - entry( index = 544, label = "C/H3/Cb;O_rad/NonDeO", @@ -5306,7 +5276,7 @@ entry( index = 545, - label = "C/H2/Cb;O_rad/NonDeO", + label = "C/H2/CbCs;O_rad/NonDeO", kinetics = ArrheniusEP( A = (1.33e+11, 'cm^3/(mol*s)'), n = 0, @@ -5321,7 +5291,7 @@ entry( index = 546, - label = "C/H/Cb;O_rad/NonDeO", + label = "C/H/Cs2Cb;O_rad/NonDeO", kinetics = ArrheniusEP( A = (1.33e+11, 'cm^3/(mol*s)'), n = 0, @@ -5351,7 +5321,7 @@ entry( index = 548, - label = "C/H2/Cb;O2b", + label = "C/H2/CbCs;O2b", kinetics = ArrheniusEP( A = (6e+11, 'cm^3/(mol*s)'), n = 0, @@ -5366,7 +5336,7 @@ entry( index = 549, - label = "C/H/Cb;O2b", + label = "C/H/Cs2Cb;O2b", kinetics = ArrheniusEP( A = (6e+11, 'cm^3/(mol*s)'), n = 0, @@ -9598,7 +9568,7 @@ entry( index = 3000, - label = "N3d/H/OneDeCO;O_pri_rad", + label = "N3d/H/CddO;O_pri_rad", kinetics = ArrheniusEP( A = (5.2e+10, 'cm^3/(mol*s)'), n = -0.03, @@ -9617,7 +9587,7 @@ entry( index = 3000, - label = "N3d/H/OneDeCO;O_pri_rad", + label = "N3d/H/CddO;O_pri_rad", kinetics = ArrheniusEP( A = (3.6e+07, 'cm^3/(mol*s)'), n = 1.5, @@ -9636,7 +9606,7 @@ entry( index = 3000, - label = "N3d/H/OneDeCO;H_rad", + label = "N3d/H/CddO;H_rad", kinetics = ArrheniusEP( A = (180000, 'cm^3/(mol*s)'), n = 2.4, @@ -9655,7 +9625,7 @@ entry( index = 3000, - label = "N3d/H/OneDeCO;O_atom_triplet", + label = "N3d/H/CddO;O_atom_triplet", kinetics = ArrheniusEP( A = (3.1e+06, 'cm^3/(mol*s)'), n = 1.94, @@ -9674,7 +9644,7 @@ entry( index = 3000, - label = "N3d/H/OneDeCO;C_methyl", + label = "N3d/H/CddO;C_methyl", kinetics = ArrheniusEP( A = (1e+12, 'cm^3/(mol*s)'), n = 0, @@ -9693,7 +9663,7 @@ entry( index = 3000, - label = "N3d/H/OneDeCO;NH2_rad", + label = "N3d/H/CddO;NH2_rad", kinetics = ArrheniusEP( A = (1e+12, 'cm^3/(mol*s)'), n = 0, diff --git a/input/kinetics/families/H_Abstraction/training/dictionary.txt b/input/kinetics/families/H_Abstraction/training/dictionary.txt index f90cb175f8..89ffa15684 100644 --- a/input/kinetics/families/H_Abstraction/training/dictionary.txt +++ b/input/kinetics/families/H_Abstraction/training/dictionary.txt @@ -1105,4 +1105,3 @@ multiplicity 2 10 O u0 p2 c0 {3,D} 11 H u0 p0 c0 {4,S} 12 H u0 p0 c0 {4,S} - diff --git a/input/kinetics/families/H_Abstraction/training/reactions.py b/input/kinetics/families/H_Abstraction/training/reactions.py index 3111278a75..2b9f159554 100644 --- a/input/kinetics/families/H_Abstraction/training/reactions.py +++ b/input/kinetics/families/H_Abstraction/training/reactions.py @@ -1510,4 +1510,3 @@ [ This rate was obtained by personal communication as of Sept 2012] """, ) - diff --git a/input/kinetics/families/R_Addition_COm/groups.py b/input/kinetics/families/R_Addition_COm/groups.py index 947460fa26..928717eabd 100644 --- a/input/kinetics/families/R_Addition_COm/groups.py +++ b/input/kinetics/families/R_Addition_COm/groups.py @@ -25,8 +25,8 @@ label = "COm", group = """ -1 *1 Ct u0 p1 {2,T} -2 *3 Ot u0 p1 {1,T} +1 *1 Ct u0 p1 c-1 {2,T} +2 *3 Ot u0 p1 c+1 {1,T} """, kinetics = None, ) diff --git a/input/kinetics/families/R_Addition_CSm/groups.py b/input/kinetics/families/R_Addition_CSm/groups.py index d51468e126..5abd8581c3 100644 --- a/input/kinetics/families/R_Addition_CSm/groups.py +++ b/input/kinetics/families/R_Addition_CSm/groups.py @@ -25,8 +25,8 @@ label = "CSm", group = """ -1 *1 C u0 p1 {2,T} -2 *3 S u0 p2 {1,T} +1 *3 S u0 p1 c+1 {2,T} +2 *1 C u0 p1 c-1 {1,T} """, kinetics = None, ) diff --git a/input/kinetics/families/R_Addition_MultipleBond/groups.py b/input/kinetics/families/R_Addition_MultipleBond/groups.py index e0ad860b26..73e16077e1 100644 --- a/input/kinetics/families/R_Addition_MultipleBond/groups.py +++ b/input/kinetics/families/R_Addition_MultipleBond/groups.py @@ -28,7 +28,7 @@ entry( index = 2, label = "YJ", - group = "OR{HJ, CJ, OJ, SJ, NJ, Y_1centerbirad, Y_1centertrirad, Y_1centerquadrad}", + group = "OR{HJ, Y_1centerquadrad, Y_1centertrirad, Y_1centerbirad, CJ, OJ, SJ, NJ}", kinetics = None, ) @@ -38,7 +38,7 @@ group = """ 1 *1 C u0 {2,D} -2 *2 R u0 {1,D} +2 *2 R!H u0 {1,D} """, kinetics = None, ) @@ -50,7 +50,7 @@ """ 1 *1 Cdd u0 {2,D} {3,D} 2 *2 Od u0 {1,D} -3 R u0 {1,D} +3 R!H u0 {1,D} """, kinetics = None, ) @@ -265,7 +265,7 @@ """ 1 *1 Cdd u0 {2,D} {3,D} 2 *2 Sd u0 {1,D} -3 R u0 {1,D} +3 R!H u0 {1,D} """, kinetics = None, ) @@ -1781,8 +1781,8 @@ """ 1 *1 Cdd u0 {2,D} {3,D} 2 *2 Cdd u0 {1,D} {4,D} -3 R u0 {1,D} -4 R u0 {2,D} +3 R!H u0 {1,D} +4 R!H u0 {2,D} """, kinetics = None, ) @@ -12882,7 +12882,7 @@ group = """ 1 *1 Ct u0 {2,T} -2 *2 R u0 {1,T} +2 *2 R!H u0 {1,T} """, kinetics = None, ) @@ -13579,7 +13579,7 @@ """ 1 *1 Od u0 {2,D} 2 *2 C u0 {1,D} {3,D} -3 R u0 {2,D} +3 R!H u0 {2,D} """, kinetics = None, ) @@ -14014,7 +14014,7 @@ group = """ 1 *1 N5t u0 {2,T} -2 *2 R u0 {1,T} +2 *2 R!H u0 {1,T} """, kinetics = None, ) @@ -14025,7 +14025,7 @@ group = """ 1 *1 Sd u0 {2,D} -2 *2 R u0 {1,D} +2 *2 R!H u0 {1,D} """, kinetics = None, ) @@ -14037,7 +14037,7 @@ """ 1 *1 Sd u0 {2,D} 2 *2 Cdd u0 {1,D} {3,D} -3 R u0 {2,D} +3 R!H u0 {2,D} """, kinetics = None, ) @@ -14519,7 +14519,7 @@ label = "CJ", group = """ -1 *3 C u1 +1 *3 C u1 p0 """, kinetics = None, ) @@ -14529,7 +14529,7 @@ label = "CbJ", group = """ -1 *3 Cb u1 +1 *3 Cb u1 p0 """, kinetics = None, ) @@ -14539,8 +14539,8 @@ label = "CtJ", group = """ -1 *3 Ct u1 {2,T} -2 R u0 {1,T} +1 *3 Ct u1 p0 {2,T} +2 R!H u0 {1,T} """, kinetics = None, ) @@ -14550,8 +14550,8 @@ label = "CtJ_Ct", group = """ -1 *3 Ct u1 {2,T} -2 Ct u0 {1,T} +1 *3 Ct u1 p0 {2,T} +2 Ct u0 {1,T} """, kinetics = None, ) @@ -14561,8 +14561,8 @@ label = "CtJ_N3t", group = """ -1 *3 Ct u1 {2,T} -2 N3t u0 {1,T} +1 *3 Ct u1 p0 {2,T} +2 N3t u0 {1,T} """, kinetics = None, ) @@ -14572,8 +14572,8 @@ label = "C2b", group = """ -1 *3 C u1 {2,T} -2 C u1 {1,T} +1 *3 C u1 p0 {2,T} +2 C u1 {1,T} """, kinetics = None, ) @@ -14583,8 +14583,8 @@ label = "C=SJ", group = """ -1 *3 CS u1 {2,S} -2 R u0 {1,S} +1 *3 CS u1 p0 {2,S} +2 R u0 {1,S} """, kinetics = None, ) @@ -14594,8 +14594,8 @@ label = "C=SJ-H", group = """ -1 *3 CS u1 {2,S} -2 H u0 {1,S} +1 *3 CS u1 p0 {2,S} +2 H u0 {1,S} """, kinetics = None, ) @@ -14605,8 +14605,8 @@ label = "C=SJ-Cs", group = """ -1 *3 CS u1 {2,S} -2 Cs u0 {1,S} +1 *3 CS u1 p0 {2,S} +2 Cs u0 {1,S} """, kinetics = None, ) @@ -14616,8 +14616,8 @@ label = "C=SJ-Ct", group = """ -1 *3 CS u1 {2,S} -2 Ct u0 {1,S} +1 *3 CS u1 p0 {2,S} +2 Ct u0 {1,S} """, kinetics = None, ) @@ -14627,8 +14627,8 @@ label = "C=SJ-Cb", group = """ -1 *3 CS u1 {2,S} -2 Cb u0 {1,S} +1 *3 CS u1 p0 {2,S} +2 Cb u0 {1,S} """, kinetics = None, ) @@ -14638,8 +14638,8 @@ label = "C=SJ-CO", group = """ -1 *3 CS u1 {2,S} -2 CO u0 {1,S} +1 *3 CS u1 p0 {2,S} +2 CO u0 {1,S} """, kinetics = None, ) @@ -14649,8 +14649,8 @@ label = "C=SJ-Os", group = """ -1 *3 CS u1 {2,S} -2 Os u0 {1,S} +1 *3 CS u1 p0 {2,S} +2 Os u0 {1,S} """, kinetics = None, ) @@ -14660,8 +14660,8 @@ label = "C=SJ-Ss", group = """ -1 *3 CS u1 {2,S} -2 Ss u0 {1,S} +1 *3 CS u1 p0 {2,S} +2 Ss u0 {1,S} """, kinetics = None, ) @@ -14671,9 +14671,9 @@ label = "C=SJ-Cd", group = """ -1 *3 CS u1 {2,S} -2 Cd u0 {1,S} {3,D} -3 C u0 {2,D} +1 *3 CS u1 p0 {2,S} +2 Cd u0 {1,S} {3,D} +3 C u0 {2,D} """, kinetics = None, ) @@ -14683,8 +14683,8 @@ label = "C=SJ-C=S", group = """ -1 *3 CS u1 {2,S} -2 CS u0 {1,S} +1 *3 CS u1 p0 {2,S} +2 CS u0 {1,S} """, kinetics = None, ) @@ -14694,9 +14694,9 @@ label = "CO_rad", group = """ -1 *3 C u1 {2,D} {3,S} -2 O u0 {1,D} -3 R u0 {1,S} +1 *3 C u1 p0 {2,D} {3,S} +2 O u0 {1,D} +3 R u0 {1,S} """, kinetics = None, ) @@ -14706,9 +14706,9 @@ label = "CO_pri_rad", group = """ -1 *3 C u1 {2,D} {3,S} -2 O u0 {1,D} -3 H u0 {1,S} +1 *3 C u1 p0 {2,D} {3,S} +2 O u0 {1,D} +3 H u0 {1,S} """, kinetics = None, ) @@ -14718,9 +14718,9 @@ label = "CO_sec_rad", group = """ -1 *3 C u1 {2,D} {3,S} -2 O u0 {1,D} -3 R!H u0 {1,S} +1 *3 C u1 p0 {2,D} {3,S} +2 O u0 {1,D} +3 R!H u0 {1,S} """, kinetics = None, ) @@ -14730,9 +14730,9 @@ label = "CO_rad/NonDe", group = """ -1 *3 C u1 {2,D} {3,S} -2 O u0 {1,D} -3 [Cs,Ss,N3s,N5s,Os] u0 {1,S} +1 *3 C u1 p0 {2,D} {3,S} +2 O u0 {1,D} +3 [Cs,Ss,N3s,N5s,Os] u0 {1,S} """, kinetics = None, ) @@ -14742,9 +14742,9 @@ label = "CO_rad/OneDe", group = """ -1 *3 C u1 {2,D} {3,S} -2 O u0 {1,D} -3 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} +1 *3 C u1 p0 {2,D} {3,S} +2 O u0 {1,D} +3 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} """, kinetics = None, ) @@ -14754,10 +14754,10 @@ label = "CsJ", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 R u0 {1,S} -3 R u0 {1,S} -4 R u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 R u0 {1,S} +3 R u0 {1,S} +4 R u0 {1,S} """, kinetics = None, ) @@ -14767,10 +14767,10 @@ label = "CsJ-HHH", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 H u0 {1,S} -3 H u0 {1,S} -4 H u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 H u0 {1,S} +3 H u0 {1,S} +4 H u0 {1,S} """, kinetics = None, ) @@ -14780,10 +14780,10 @@ label = "CsJ-CsHH", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 Cs u0 {1,S} -3 H u0 {1,S} -4 H u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 Cs u0 {1,S} +3 H u0 {1,S} +4 H u0 {1,S} """, kinetics = None, ) @@ -14793,10 +14793,10 @@ label = "CsJ-CsCsH", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 Cs u0 {1,S} -3 Cs u0 {1,S} -4 H u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 Cs u0 {1,S} +3 Cs u0 {1,S} +4 H u0 {1,S} """, kinetics = None, ) @@ -14806,10 +14806,10 @@ label = "CsJ-CsCsCs", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 Cs u0 {1,S} -3 Cs u0 {1,S} -4 Cs u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 Cs u0 {1,S} +3 Cs u0 {1,S} +4 Cs u0 {1,S} """, kinetics = None, ) @@ -14819,10 +14819,10 @@ label = "CsJ-OsHH", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 Os u0 {1,S} -3 H u0 {1,S} -4 H u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 Os u0 {1,S} +3 H u0 {1,S} +4 H u0 {1,S} """, kinetics = None, ) @@ -14832,10 +14832,10 @@ label = "CsJ-OsCsH", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 Os u0 {1,S} -3 Cs u0 {1,S} -4 H u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 Os u0 {1,S} +3 Cs u0 {1,S} +4 H u0 {1,S} """, kinetics = None, ) @@ -14845,10 +14845,10 @@ label = "CsJ-OsCsCs", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 Os u0 {1,S} -3 Cs u0 {1,S} -4 Cs u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 Os u0 {1,S} +3 Cs u0 {1,S} +4 Cs u0 {1,S} """, kinetics = None, ) @@ -14858,10 +14858,10 @@ label = "CsJ-OsOsH", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 Os u0 {1,S} -3 Os u0 {1,S} -4 H u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 Os u0 {1,S} +3 Os u0 {1,S} +4 H u0 {1,S} """, kinetics = None, ) @@ -14871,10 +14871,10 @@ label = "CsJ-OsOsCs", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 Os u0 {1,S} -3 Os u0 {1,S} -4 Cs u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 Os u0 {1,S} +3 Os u0 {1,S} +4 Cs u0 {1,S} """, kinetics = None, ) @@ -14884,10 +14884,10 @@ label = "CsJ-OsOsOs", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 Os u0 {1,S} -3 Os u0 {1,S} -4 Os u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 Os u0 {1,S} +3 Os u0 {1,S} +4 Os u0 {1,S} """, kinetics = None, ) @@ -14897,10 +14897,10 @@ label = "CsJ-SsHH", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 Ss u0 {1,S} -3 H u0 {1,S} -4 H u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 Ss u0 {1,S} +3 H u0 {1,S} +4 H u0 {1,S} """, kinetics = None, ) @@ -14910,10 +14910,10 @@ label = "CsJ-SsCsH", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 Ss u0 {1,S} -3 Cs u0 {1,S} -4 H u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 Ss u0 {1,S} +3 Cs u0 {1,S} +4 H u0 {1,S} """, kinetics = None, ) @@ -14923,10 +14923,10 @@ label = "CsJ-SsCsCs", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 Ss u0 {1,S} -3 Cs u0 {1,S} -4 Cs u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 Ss u0 {1,S} +3 Cs u0 {1,S} +4 Cs u0 {1,S} """, kinetics = None, ) @@ -14936,10 +14936,10 @@ label = "CsJ-SsSsH", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 Ss u0 {1,S} -3 Ss u0 {1,S} -4 H u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 Ss u0 {1,S} +3 Ss u0 {1,S} +4 H u0 {1,S} """, kinetics = None, ) @@ -14949,10 +14949,10 @@ label = "CsJ-SsSsCs", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 Ss u0 {1,S} -3 Ss u0 {1,S} -4 Cs u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 Ss u0 {1,S} +3 Ss u0 {1,S} +4 Cs u0 {1,S} """, kinetics = None, ) @@ -14962,10 +14962,10 @@ label = "CsJ-SsSsSs", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 Ss u0 {1,S} -3 Ss u0 {1,S} -4 Ss u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 Ss u0 {1,S} +3 Ss u0 {1,S} +4 Ss u0 {1,S} """, kinetics = None, ) @@ -14975,10 +14975,10 @@ label = "CsJ-NsHH", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 H u0 {1,S} -3 H u0 {1,S} -4 [N3s,N5s] u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 H u0 {1,S} +3 H u0 {1,S} +4 [N3s,N5s] u0 {1,S} """, kinetics = None, ) @@ -14988,10 +14988,10 @@ label = "CsJ-NsCsH", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 H u0 {1,S} -3 [N3s,N5s] u0 {1,S} -4 Cs u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 H u0 {1,S} +3 [N3s,N5s] u0 {1,S} +4 Cs u0 {1,S} """, kinetics = None, ) @@ -15001,10 +15001,10 @@ label = "CsJ-OneDe", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} -3 [H,Cs,Os,Ss,N3s,N5s] u0 {1,S} -4 [H,Cs,Os,Ss,N3s,N5s] u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} +3 [H,Cs,Os,Ss,N3s,N5s] u0 {1,S} +4 [H,Cs,Os,Ss,N3s,N5s] u0 {1,S} """, kinetics = None, ) @@ -15014,10 +15014,10 @@ label = "CsJ-OneDeHH", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} -3 H u0 {1,S} -4 H u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} +3 H u0 {1,S} +4 H u0 {1,S} """, kinetics = None, ) @@ -15027,10 +15027,10 @@ label = "CsJ-CtHH", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 Ct u0 {1,S} -3 H u0 {1,S} -4 H u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 Ct u0 {1,S} +3 H u0 {1,S} +4 H u0 {1,S} """, kinetics = None, ) @@ -15040,10 +15040,10 @@ label = "CsJ-CbHH", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 Cb u0 {1,S} -3 H u0 {1,S} -4 H u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 Cb u0 {1,S} +3 H u0 {1,S} +4 H u0 {1,S} """, kinetics = None, ) @@ -15053,10 +15053,10 @@ label = "CsJ-COHH", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 CO u0 {1,S} -3 H u0 {1,S} -4 H u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 CO u0 {1,S} +3 H u0 {1,S} +4 H u0 {1,S} """, kinetics = None, ) @@ -15066,11 +15066,11 @@ label = "CsJ-CdHH", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 Cd u0 {1,S} {5,D} -3 H u0 {1,S} -4 H u0 {1,S} -5 C u0 {2,D} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 Cd u0 {1,S} {5,D} +3 H u0 {1,S} +4 H u0 {1,S} +5 C u0 {2,D} """, kinetics = None, ) @@ -15080,10 +15080,10 @@ label = "CsJ-C=SHH", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 CS u0 {1,S} -3 H u0 {1,S} -4 H u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 CS u0 {1,S} +3 H u0 {1,S} +4 H u0 {1,S} """, kinetics = None, ) @@ -15093,10 +15093,10 @@ label = "CsJ-OneDeCsH", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} -3 Cs u0 {1,S} -4 H u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} +3 Cs u0 {1,S} +4 H u0 {1,S} """, kinetics = None, ) @@ -15106,10 +15106,10 @@ label = "CsJ-CtCsH", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 Ct u0 {1,S} -3 Cs u0 {1,S} -4 H u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 Ct u0 {1,S} +3 Cs u0 {1,S} +4 H u0 {1,S} """, kinetics = None, ) @@ -15119,10 +15119,10 @@ label = "CsJ-CbCsH", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 Cb u0 {1,S} -3 Cs u0 {1,S} -4 H u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 Cb u0 {1,S} +3 Cs u0 {1,S} +4 H u0 {1,S} """, kinetics = None, ) @@ -15132,10 +15132,10 @@ label = "CsJ-COCsH", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 CO u0 {1,S} -3 Cs u0 {1,S} -4 H u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 CO u0 {1,S} +3 Cs u0 {1,S} +4 H u0 {1,S} """, kinetics = None, ) @@ -15145,11 +15145,11 @@ label = "CsJ-CdCsH", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 Cd u0 {1,S} {5,D} -3 Cs u0 {1,S} -4 H u0 {1,S} -5 C u0 {2,D} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 Cd u0 {1,S} {5,D} +3 Cs u0 {1,S} +4 H u0 {1,S} +5 C u0 {2,D} """, kinetics = None, ) @@ -15159,10 +15159,10 @@ label = "CsJ-C=SCsH", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 CS u0 {1,S} -3 Cs u0 {1,S} -4 H u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 CS u0 {1,S} +3 Cs u0 {1,S} +4 H u0 {1,S} """, kinetics = None, ) @@ -15172,10 +15172,10 @@ label = "CsJ-OneDeOsH", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} -3 Os u0 {1,S} -4 H u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} +3 Os u0 {1,S} +4 H u0 {1,S} """, kinetics = None, ) @@ -15185,10 +15185,10 @@ label = "CsJ-OneDeSsH", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} -3 Ss u0 {1,S} -4 H u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} +3 Ss u0 {1,S} +4 H u0 {1,S} """, kinetics = None, ) @@ -15198,10 +15198,10 @@ label = "CsJ-OneDeCsCs", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} -3 Cs u0 {1,S} -4 Cs u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} +3 Cs u0 {1,S} +4 Cs u0 {1,S} """, kinetics = None, ) @@ -15211,10 +15211,10 @@ label = "CsJ-CtCsCs", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 Ct u0 {1,S} -3 Cs u0 {1,S} -4 Cs u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 Ct u0 {1,S} +3 Cs u0 {1,S} +4 Cs u0 {1,S} """, kinetics = None, ) @@ -15224,10 +15224,10 @@ label = "CsJ-CbCsCs", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 Cb u0 {1,S} -3 Cs u0 {1,S} -4 Cs u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 Cb u0 {1,S} +3 Cs u0 {1,S} +4 Cs u0 {1,S} """, kinetics = None, ) @@ -15237,10 +15237,10 @@ label = "CsJ-COCsCs", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 CO u0 {1,S} -3 Cs u0 {1,S} -4 Cs u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 CO u0 {1,S} +3 Cs u0 {1,S} +4 Cs u0 {1,S} """, kinetics = None, ) @@ -15250,11 +15250,11 @@ label = "CsJ-CdCsCs", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 Cd u0 {1,S} {5,D} -3 Cs u0 {1,S} -4 Cs u0 {1,S} -5 C u0 {2,D} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 Cd u0 {1,S} {5,D} +3 Cs u0 {1,S} +4 Cs u0 {1,S} +5 C u0 {2,D} """, kinetics = None, ) @@ -15264,10 +15264,10 @@ label = "CsJ-C=SCsCs", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 CS u0 {1,S} -3 Cs u0 {1,S} -4 Cs u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 CS u0 {1,S} +3 Cs u0 {1,S} +4 Cs u0 {1,S} """, kinetics = None, ) @@ -15277,10 +15277,10 @@ label = "CsJ-OneDeOsCs", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} -3 Os u0 {1,S} -4 Cs u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} +3 Os u0 {1,S} +4 Cs u0 {1,S} """, kinetics = None, ) @@ -15290,10 +15290,10 @@ label = "CsJ-OneDeSsCs", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} -3 Ss u0 {1,S} -4 Cs u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} +3 Ss u0 {1,S} +4 Cs u0 {1,S} """, kinetics = None, ) @@ -15303,10 +15303,10 @@ label = "CsJ-OneDeOsOs", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} -3 Os u0 {1,S} -4 Os u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} +3 Os u0 {1,S} +4 Os u0 {1,S} """, kinetics = None, ) @@ -15316,10 +15316,10 @@ label = "CsJ-OneDeOsSs", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} -3 Os u0 {1,S} -4 Ss u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} +3 Os u0 {1,S} +4 Ss u0 {1,S} """, kinetics = None, ) @@ -15329,10 +15329,10 @@ label = "CsJ-OneDeSsSs", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} -3 Ss u0 {1,S} -4 Ss u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} +3 Ss u0 {1,S} +4 Ss u0 {1,S} """, kinetics = None, ) @@ -15342,10 +15342,10 @@ label = "CsJ-OneDeNsH", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 H u0 {1,S} -3 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} -4 [N3s,N5s] u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 H u0 {1,S} +3 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} +4 [N3s,N5s] u0 {1,S} """, kinetics = None, ) @@ -15355,10 +15355,10 @@ label = "CsJ-OneDeNsCs", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} -3 Cs u0 {1,S} -4 [N3s,N5s] u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} +3 Cs u0 {1,S} +4 [N3s,N5s] u0 {1,S} """, kinetics = None, ) @@ -15368,10 +15368,10 @@ label = "CsJ-TwoDe", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} -3 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} -4 [H,Cs,Os,Ss] u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} +3 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} +4 [H,Cs,Os,Ss] u0 {1,S} """, kinetics = None, ) @@ -15381,10 +15381,10 @@ label = "CsJ-TwoDeH", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} -3 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} -4 H u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} +3 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} +4 H u0 {1,S} """, kinetics = None, ) @@ -15394,10 +15394,10 @@ label = "CsJ-CtCtH", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 Ct u0 {1,S} -3 Ct u0 {1,S} -4 H u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 Ct u0 {1,S} +3 Ct u0 {1,S} +4 H u0 {1,S} """, kinetics = None, ) @@ -15407,10 +15407,10 @@ label = "CsJ-CtCbH", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 Ct u0 {1,S} -3 Cb u0 {1,S} -4 H u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 Ct u0 {1,S} +3 Cb u0 {1,S} +4 H u0 {1,S} """, kinetics = None, ) @@ -15420,10 +15420,10 @@ label = "CsJ-CtCOH", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 Ct u0 {1,S} -3 CO u0 {1,S} -4 H u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 Ct u0 {1,S} +3 CO u0 {1,S} +4 H u0 {1,S} """, kinetics = None, ) @@ -15433,10 +15433,10 @@ label = "CsJ-CbCbH", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 Cb u0 {1,S} -3 Cb u0 {1,S} -4 H u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 Cb u0 {1,S} +3 Cb u0 {1,S} +4 H u0 {1,S} """, kinetics = None, ) @@ -15446,10 +15446,10 @@ label = "CsJ-CbCOH", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 Cb u0 {1,S} -3 CO u0 {1,S} -4 H u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 Cb u0 {1,S} +3 CO u0 {1,S} +4 H u0 {1,S} """, kinetics = None, ) @@ -15459,10 +15459,10 @@ label = "CsJ-COCOH", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 CO u0 {1,S} -3 CO u0 {1,S} -4 H u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 CO u0 {1,S} +3 CO u0 {1,S} +4 H u0 {1,S} """, kinetics = None, ) @@ -15472,11 +15472,11 @@ label = "CsJ-CdCtH", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 Cd u0 {1,S} {5,D} -3 Ct u0 {1,S} -4 H u0 {1,S} -5 C u0 {2,D} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 Cd u0 {1,S} {5,D} +3 Ct u0 {1,S} +4 H u0 {1,S} +5 C u0 {2,D} """, kinetics = None, ) @@ -15486,11 +15486,11 @@ label = "CsJ-CdCbH", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 Cd u0 {1,S} {5,D} -3 Cb u0 {1,S} -4 H u0 {1,S} -5 C u0 {2,D} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 Cd u0 {1,S} {5,D} +3 Cb u0 {1,S} +4 H u0 {1,S} +5 C u0 {2,D} """, kinetics = None, ) @@ -15500,11 +15500,11 @@ label = "CsJ-CdCOH", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 Cd u0 {1,S} {5,D} -3 CO u0 {1,S} -4 H u0 {1,S} -5 C u0 {2,D} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 Cd u0 {1,S} {5,D} +3 CO u0 {1,S} +4 H u0 {1,S} +5 C u0 {2,D} """, kinetics = None, ) @@ -15514,10 +15514,10 @@ label = "CsJ-CtC=SH", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 Ct u0 {1,S} -3 CS u0 {1,S} -4 H u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 Ct u0 {1,S} +3 CS u0 {1,S} +4 H u0 {1,S} """, kinetics = None, ) @@ -15527,10 +15527,10 @@ label = "CsJ-CbC=SH", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 Cb u0 {1,S} -3 CS u0 {1,S} -4 H u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 Cb u0 {1,S} +3 CS u0 {1,S} +4 H u0 {1,S} """, kinetics = None, ) @@ -15540,10 +15540,10 @@ label = "CsJ-COC=SH", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 CO u0 {1,S} -3 CS u0 {1,S} -4 H u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 CO u0 {1,S} +3 CS u0 {1,S} +4 H u0 {1,S} """, kinetics = None, ) @@ -15553,12 +15553,12 @@ label = "CsJ-CdCdH", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 Cd u0 {1,S} {5,D} -3 Cd u0 {1,S} {6,D} -4 H u0 {1,S} -5 C u0 {2,D} -6 C u0 {3,D} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 Cd u0 {1,S} {5,D} +3 Cd u0 {1,S} {6,D} +4 H u0 {1,S} +5 C u0 {2,D} +6 C u0 {3,D} """, kinetics = None, ) @@ -15568,11 +15568,11 @@ label = "CsJ-CdC=SH", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 Cd u0 {1,S} {5,D} -3 CS u0 {1,S} -4 H u0 {1,S} -5 C u0 {2,D} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 Cd u0 {1,S} {5,D} +3 CS u0 {1,S} +4 H u0 {1,S} +5 C u0 {2,D} """, kinetics = None, ) @@ -15582,10 +15582,10 @@ label = "CsJ-C=SC=SH", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 CS u0 {1,S} -3 CS u0 {1,S} -4 H u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 CS u0 {1,S} +3 CS u0 {1,S} +4 H u0 {1,S} """, kinetics = None, ) @@ -15595,10 +15595,10 @@ label = "CsJ-TwoDeCs", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} -3 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} -4 Cs u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} +3 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} +4 Cs u0 {1,S} """, kinetics = None, ) @@ -15608,10 +15608,10 @@ label = "CsJ-CtCtCs", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 Ct u0 {1,S} -3 Ct u0 {1,S} -4 Cs u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 Ct u0 {1,S} +3 Ct u0 {1,S} +4 Cs u0 {1,S} """, kinetics = None, ) @@ -15621,10 +15621,10 @@ label = "CsJ-CtCbCs", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 Ct u0 {1,S} -3 Cb u0 {1,S} -4 Cs u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 Ct u0 {1,S} +3 Cb u0 {1,S} +4 Cs u0 {1,S} """, kinetics = None, ) @@ -15634,10 +15634,10 @@ label = "CsJ-CtCOCs", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 Ct u0 {1,S} -3 CO u0 {1,S} -4 Cs u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 Ct u0 {1,S} +3 CO u0 {1,S} +4 Cs u0 {1,S} """, kinetics = None, ) @@ -15647,10 +15647,10 @@ label = "CsJ-CbCbCs", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 Cb u0 {1,S} -3 Cb u0 {1,S} -4 Cs u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 Cb u0 {1,S} +3 Cb u0 {1,S} +4 Cs u0 {1,S} """, kinetics = None, ) @@ -15660,10 +15660,10 @@ label = "CsJ-CbCOCs", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 Cb u0 {1,S} -3 CO u0 {1,S} -4 Cs u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 Cb u0 {1,S} +3 CO u0 {1,S} +4 Cs u0 {1,S} """, kinetics = None, ) @@ -15673,10 +15673,10 @@ label = "CsJ-COCOCs", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 CO u0 {1,S} -3 CO u0 {1,S} -4 Cs u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 CO u0 {1,S} +3 CO u0 {1,S} +4 Cs u0 {1,S} """, kinetics = None, ) @@ -15686,11 +15686,11 @@ label = "CsJ-CdCtCs", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 Cd u0 {1,S} {5,D} -3 Ct u0 {1,S} -4 Cs u0 {1,S} -5 C u0 {2,D} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 Cd u0 {1,S} {5,D} +3 Ct u0 {1,S} +4 Cs u0 {1,S} +5 C u0 {2,D} """, kinetics = None, ) @@ -15700,11 +15700,11 @@ label = "CsJ-CdCbCs", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 Cd u0 {1,S} {5,D} -3 Cb u0 {1,S} -4 Cs u0 {1,S} -5 C u0 {2,D} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 Cd u0 {1,S} {5,D} +3 Cb u0 {1,S} +4 Cs u0 {1,S} +5 C u0 {2,D} """, kinetics = None, ) @@ -15714,11 +15714,11 @@ label = "CsJ-CdCOCs", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 Cd u0 {1,S} {5,D} -3 CO u0 {1,S} -4 Cs u0 {1,S} -5 C u0 {2,D} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 Cd u0 {1,S} {5,D} +3 CO u0 {1,S} +4 Cs u0 {1,S} +5 C u0 {2,D} """, kinetics = None, ) @@ -15728,10 +15728,10 @@ label = "CsJ-CtC=SCs", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 Ct u0 {1,S} -3 CS u0 {1,S} -4 Cs u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 Ct u0 {1,S} +3 CS u0 {1,S} +4 Cs u0 {1,S} """, kinetics = None, ) @@ -15741,10 +15741,10 @@ label = "CsJ-CbC=SCs", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 Cb u0 {1,S} -3 CS u0 {1,S} -4 Cs u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 Cb u0 {1,S} +3 CS u0 {1,S} +4 Cs u0 {1,S} """, kinetics = None, ) @@ -15754,10 +15754,10 @@ label = "CsJ-COC=SCs", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 CO u0 {1,S} -3 CS u0 {1,S} -4 Cs u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 CO u0 {1,S} +3 CS u0 {1,S} +4 Cs u0 {1,S} """, kinetics = None, ) @@ -15767,12 +15767,12 @@ label = "CsJ-CdCdCs", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 Cd u0 {1,S} {5,D} -3 Cd u0 {1,S} {6,D} -4 Cs u0 {1,S} -5 C u0 {2,D} -6 C u0 {3,D} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 Cd u0 {1,S} {5,D} +3 Cd u0 {1,S} {6,D} +4 Cs u0 {1,S} +5 C u0 {2,D} +6 C u0 {3,D} """, kinetics = None, ) @@ -15782,11 +15782,11 @@ label = "CsJ-CdC=SCs", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 Cd u0 {1,S} {5,D} -3 CS u0 {1,S} -4 Cs u0 {1,S} -5 C u0 {2,D} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 Cd u0 {1,S} {5,D} +3 CS u0 {1,S} +4 Cs u0 {1,S} +5 C u0 {2,D} """, kinetics = None, ) @@ -15796,10 +15796,10 @@ label = "CsJ-C=SC=SCs", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 CS u0 {1,S} -3 CS u0 {1,S} -4 Cs u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 CS u0 {1,S} +3 CS u0 {1,S} +4 Cs u0 {1,S} """, kinetics = None, ) @@ -15809,10 +15809,10 @@ label = "CsJ-TwoDeOs", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} -3 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} -4 Os u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} +3 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} +4 Os u0 {1,S} """, kinetics = None, ) @@ -15822,10 +15822,10 @@ label = "CsJ-TwoDeSs", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} -3 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} -4 Ss u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} +3 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} +4 Ss u0 {1,S} """, kinetics = None, ) @@ -15835,10 +15835,10 @@ label = "CsJ-ThreeDe", group = """ -1 *3 C u1 {2,S} {3,S} {4,S} -2 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} -3 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} -4 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} +1 *3 C u1 p0 {2,S} {3,S} {4,S} +2 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} +3 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} +4 [Cd,Ct,Cb,CO,CS,N3d,N5d] u0 {1,S} """, kinetics = None, ) @@ -15848,10 +15848,10 @@ label = "CdsJ=Cdd", group = """ -1 *3 C u1 {2,D} {3,S} -2 C u0 {1,D} {4,D} -3 R u0 {1,S} -4 R u0 {2,D} +1 *3 C u1 p0 {2,D} {3,S} +2 C u0 {1,D} {4,D} +3 R u0 {1,S} +4 R!H u0 {2,D} """, kinetics = None, ) @@ -15861,11 +15861,11 @@ label = "CdsJ", group = """ -1 *3 C u1 {2,D} {3,S} -2 C u0 {1,D} {4,S} {5,S} -3 R u0 {1,S} -4 R u0 {2,S} -5 R u0 {2,S} +1 *3 C u1 p0 {2,D} {3,S} +2 C u0 {1,D} {4,S} {5,S} +3 R u0 {1,S} +4 R u0 {2,S} +5 R u0 {2,S} """, kinetics = None, ) @@ -15875,11 +15875,11 @@ label = "CdsJ-H", group = """ -1 *3 C u1 {2,D} {3,S} -2 C u0 {1,D} {4,S} {5,S} -3 H u0 {1,S} -4 R u0 {2,S} -5 R u0 {2,S} +1 *3 C u1 p0 {2,D} {3,S} +2 C u0 {1,D} {4,S} {5,S} +3 H u0 {1,S} +4 R u0 {2,S} +5 R u0 {2,S} """, kinetics = None, ) @@ -15889,11 +15889,11 @@ label = "CdsJ-Cs", group = """ -1 *3 C u1 {2,D} {3,S} -2 C u0 {1,D} {4,S} {5,S} -3 Cs u0 {1,S} -4 R u0 {2,S} -5 R u0 {2,S} +1 *3 C u1 p0 {2,D} {3,S} +2 C u0 {1,D} {4,S} {5,S} +3 Cs u0 {1,S} +4 R u0 {2,S} +5 R u0 {2,S} """, kinetics = None, ) @@ -15903,11 +15903,11 @@ label = "CdsJ-Ct", group = """ -1 *3 C u1 {2,D} {3,S} -2 C u0 {1,D} {4,S} {5,S} -3 Ct u0 {1,S} -4 R u0 {2,S} -5 R u0 {2,S} +1 *3 C u1 p0 {2,D} {3,S} +2 C u0 {1,D} {4,S} {5,S} +3 Ct u0 {1,S} +4 R u0 {2,S} +5 R u0 {2,S} """, kinetics = None, ) @@ -15917,11 +15917,11 @@ label = "CdsJ-Cb", group = """ -1 *3 C u1 {2,D} {3,S} -2 C u0 {1,D} {4,S} {5,S} -3 Cb u0 {1,S} -4 R u0 {2,S} -5 R u0 {2,S} +1 *3 C u1 p0 {2,D} {3,S} +2 C u0 {1,D} {4,S} {5,S} +3 Cb u0 {1,S} +4 R u0 {2,S} +5 R u0 {2,S} """, kinetics = None, ) @@ -15931,11 +15931,11 @@ label = "CdsJ-CO", group = """ -1 *3 C u1 {2,D} {3,S} -2 C u0 {1,D} {4,S} {5,S} -3 CO u0 {1,S} -4 R u0 {2,S} -5 R u0 {2,S} +1 *3 C u1 p0 {2,D} {3,S} +2 C u0 {1,D} {4,S} {5,S} +3 CO u0 {1,S} +4 R u0 {2,S} +5 R u0 {2,S} """, kinetics = None, ) @@ -15945,11 +15945,11 @@ label = "CdsJ-Os", group = """ -1 *3 C u1 {2,D} {3,S} -2 C u0 {1,D} {4,S} {5,S} -3 Os u0 {1,S} -4 R u0 {2,S} -5 R u0 {2,S} +1 *3 C u1 p0 {2,D} {3,S} +2 C u0 {1,D} {4,S} {5,S} +3 Os u0 {1,S} +4 R u0 {2,S} +5 R u0 {2,S} """, kinetics = None, ) @@ -15959,11 +15959,11 @@ label = "CdsJ-Ss", group = """ -1 *3 C u1 {2,D} {3,S} -2 C u0 {1,D} {4,S} {5,S} -3 Ss u0 {1,S} -4 R u0 {2,S} -5 R u0 {2,S} +1 *3 C u1 p0 {2,D} {3,S} +2 C u0 {1,D} {4,S} {5,S} +3 Ss u0 {1,S} +4 R u0 {2,S} +5 R u0 {2,S} """, kinetics = None, ) @@ -15973,12 +15973,12 @@ label = "CdsJ-Cd", group = """ -1 *3 C u1 {2,D} {3,S} -2 C u0 {1,D} {5,S} {6,S} -3 Cd u0 {1,S} {4,D} -4 C u0 {3,D} -5 R u0 {2,S} -6 R u0 {2,S} +1 *3 C u1 p0 {2,D} {3,S} +2 C u0 {1,D} {5,S} {6,S} +3 Cd u0 {1,S} {4,D} +4 C u0 {3,D} +5 R u0 {2,S} +6 R u0 {2,S} """, kinetics = None, ) @@ -15988,11 +15988,11 @@ label = "CdsJ-C=S", group = """ -1 *3 C u1 {2,D} {3,S} -2 C u0 {1,D} {4,S} {5,S} -3 CS u0 {1,S} -4 R u0 {2,S} -5 R u0 {2,S} +1 *3 C u1 p0 {2,D} {3,S} +2 C u0 {1,D} {4,S} {5,S} +3 CS u0 {1,S} +4 R u0 {2,S} +5 R u0 {2,S} """, kinetics = None, ) @@ -17555,6 +17555,20 @@ L5: Sd_Cds-C=SC=S L1: YJ L2: HJ + L2: Y_1centerquadrad + L3: C_quintet + L3: C_triplet + L2: Y_1centertrirad + L3: N_atom_quartet + L3: N_atom_doublet + L3: CH_quartet + L3: CH_doublet + L2: Y_1centerbirad + L3: O_atom_triplet + L3: SJJ + L3: CH2_triplet + L3: CO_birad + L3: NH_triplet L2: CJ L3: CbJ L3: CtJ @@ -17710,20 +17724,6 @@ L5: N3dJ_C L5: N3dJ_O L5: N3dJ_N - L2: Y_1centerbirad - L3: O_atom_triplet - L3: SJJ - L3: CH2_triplet - L3: CO_birad - L3: NH_triplet - L2: Y_1centertrirad - L3: N_atom_quartet - L3: N_atom_doublet - L3: CH_quartet - L3: CH_doublet - L2: Y_1centerquadrad - L3: C_quintet - L3: C_triplet """ ) diff --git a/input/kinetics/families/SubstitutionS/groups.py b/input/kinetics/families/SubstitutionS/groups.py index 44dfa055d1..0e34a043b3 100644 --- a/input/kinetics/families/SubstitutionS/groups.py +++ b/input/kinetics/families/SubstitutionS/groups.py @@ -3342,7 +3342,7 @@ group = """ 1 *1 Ss u0 {2,S} {3,S} -2 *2 R u1 {1,S} +2 *2 R!H u1 {1,S} 3 R u0 {1,S} """, kinetics = None, diff --git a/input/kinetics/families/Substitution_O/groups.py b/input/kinetics/families/Substitution_O/groups.py index 28cba49512..99505b0a5e 100644 --- a/input/kinetics/families/Substitution_O/groups.py +++ b/input/kinetics/families/Substitution_O/groups.py @@ -4,7 +4,7 @@ name = "Substitution_O/groups" shortDesc = u"" longDesc = u""" -The reacting site *3 must be a triplet for this reaction family. +If a birad, the reacting site *3 must be a triplet instead of singlet for this reaction family. """ template(reactants=["O-RR_or_RRrad", "YJ"], products=["O-RR_or_RRrad", "YJ"], ownReverse=True) @@ -3132,7 +3132,7 @@ group = """ 1 *1 Os u0 {2,S} {3,S} -2 *2 R u1 {1,S} +2 *2 R!H u1 {1,S} 3 R u0 {1,S} """, kinetics = None, @@ -4108,8 +4108,8 @@ label = "Y_2centeradjbirad", group = """ -1 *3 [Ct,Os] u1 {2,[S,T]} -2 [Ct,Os] u1 {1,[S,T]} +1 *3 [Os,Ct] u1 {2,[S,T]} +2 [Os,Ct] u1 {1,[S,T]} """, kinetics = None, ) @@ -4468,6 +4468,9 @@ L4: O-Os(Os)Os(Os) L2: O-RRrad L1: YJ + L2: Y_2centeradjbirad + L3: O2b + L3: C2b L2: Y_1centerbirad L2: HJ L2: CJ @@ -4544,9 +4547,6 @@ L6: CsJ-CdCdCs L5: CsJ-TwoDeOs L4: CsJ-ThreeDe - L2: Y_2centeradjbirad - L3: O2b - L3: C2b L2: OJ L3: OsJ L4: OsJ-H diff --git a/testing/databaseTest.py b/testing/databaseTest.py index cb114d0580..9ad57ca25d 100644 --- a/testing/databaseTest.py +++ b/testing/databaseTest.py @@ -1,15 +1,16 @@ """ -This scripts runs tests on the database +This scripts runs tests on the database """ import os.path import logging from external.wip import work_in_progress from rmgpy import settings from rmgpy.data.rmg import RMGDatabase -from copy import copy, deepcopy +from copy import copy from rmgpy.data.base import LogicOr -from rmgpy.molecule import Group +from rmgpy.molecule import Group, ImplicitBenzeneError, UnexpectedChargeError from rmgpy.molecule.atomtype import atomTypes +from rmgpy.molecule.pathfinder import find_shortest_path import nose import nose.tools @@ -27,7 +28,7 @@ def setUpClass(cls): databaseDirectory = settings['database.directory'] cls.database = RMGDatabase() cls.database.load(databaseDirectory, kineticsFamilies='all') - + # These are generators, that call the methods below. def test_kinetics(self): for family_name, family in self.database.kinetics.families.iteritems(): @@ -73,29 +74,47 @@ def test_kinetics(self): test.description = test_name self.compat_func_name = test_name yield test, family_name - + test = lambda x: self.kinetics_checkReactantAndProductTemplate(family_name) test_name = "Kinetics family {0}: reactant and product templates correctly defined?".format(family_name) test.description = test_name self.compat_func_name = test_name yield test, family_name + #these families have some sort of difficulty which prevents us from testing accessibility right now + difficultFamilies = ['Diels_alder_addition', 'Intra_R_Add_Exocyclic', 'Intra_R_Add_Endocyclic'] + + if len(family.forwardTemplate.reactants) < len(family.groups.top) and family_name not in difficultFamilies: + test = lambda x: self.kinetics_checkUnimolecularGroups(family_name) + test_name = "Kinetics family {0} check that unimolecular group is formatted correctly?".format(family_name) + test.description = test_name + self.compat_func_name = test_name + yield test, family_name + + if family_name not in difficultFamilies: + test = lambda x: self.kinetics_checkSampleDescendsToGroup(family_name) + test_name = "Kinetics family {0}: Entry is accessible?".format(family_name) + test.description = test_name + self.compat_func_name = test_name + yield test, family_name + for depository in family.depositories: - + test = lambda x: self.kinetics_checkAdjlistsNonidentical(depository) test_name = "Kinetics {1} Depository: check adjacency lists are nonidentical?".format(family_name, depository.label) test.description = test_name self.compat_func_name = test_name yield test, depository.label - + for library_name, library in self.database.kinetics.libraries.iteritems(): - + test = lambda x: self.kinetics_checkAdjlistsNonidentical(library) test_name = "Kinetics library {0}: check adjacency lists are nonidentical?".format(library_name) test.description = test_name self.compat_func_name = test_name yield test, library_name - + + def test_thermo(self): for group_name, group in self.database.thermo.groups.iteritems(): test = lambda x: self.general_checkNodesFoundInTree(group_name, group) @@ -128,6 +147,12 @@ def test_thermo(self): self.compat_func_name = test_name yield test, group_name + test = lambda x: self.general_checkSampleDescendsToGroup(group_name, group) + test_name = "Thermo groups {0}: Entry is accessible?".format(group_name) + test.description = test_name + self.compat_func_name = test_name + yield test, group_name + def test_solvation(self): for group_name, group in self.database.solvation.groups.iteritems(): test = lambda x: self.general_checkNodesFoundInTree(group_name, group) @@ -160,6 +185,12 @@ def test_solvation(self): self.compat_func_name = test_name yield test, group_name + test = lambda x: self.general_checkSampleDescendsToGroup(group_name, group) + test_name = "Solvation groups {0}: Entry is accessible?".format(group_name) + test.description = test_name + self.compat_func_name = test_name + yield test, group_name + def test_statmech(self): for group_name, group in self.database.statmech.groups.iteritems(): test = lambda x: self.general_checkNodesFoundInTree(group_name, group) @@ -192,6 +223,12 @@ def test_statmech(self): self.compat_func_name = test_name yield test, group_name + test = lambda x: self.general_checkSampleDescendsToGroup(group_name, group) + test_name = "Statmech groups {0}: Entry is accessible?".format(group_name) + test.description = test_name + self.compat_func_name = test_name + yield test, group_name + def test_transport(self): for group_name, group in self.database.transport.groups.iteritems(): test = lambda x: self.general_checkNodesFoundInTree(group_name, group) @@ -223,7 +260,14 @@ def test_transport(self): test.description = test_name self.compat_func_name = test_name yield test, group_name - + + test = lambda x: self.general_checkSampleDescendsToGroup(group_name, group) + test_name = "Transport groups {0}: Entry is accessible?".format(group_name) + test.description = test_name + self.compat_func_name = test_name + yield test, group_name + + # These are the actual tests, that don't start with a "test_" name: def kinetics_checkCorrectNumberofNodesInRules(self, family_name): """ @@ -241,23 +285,23 @@ def kinetics_checkNodesInRulesFoundInGroups(self, family_name): This test ensures that each rate rule contains nodes that exist in the groups and that they match the order of the forwardTemplate. """ family = self.database.kinetics.families[family_name] - + # List of the each top node's descendants (including the top node) topDescendants = [] for topNode in family.getRootTemplate(): nodes = [topNode] nodes.extend(family.groups.descendants(topNode)) topDescendants.append(nodes) - + topGroupOrder = ';'.join(topNode.label for topNode in family.getRootTemplate()) - + for label, entries in family.rules.entries.iteritems(): for entry in entries: nodes = label.split(';') for i, node in enumerate(nodes): nose.tools.assert_true(node in family.groups.entries, "In {family} family, no group definition found for label {label} in rule {entry}".format(family=family_name, label=node, entry=entry)) nose.tools.assert_true(family.groups.entries[node] in topDescendants[i], "In {family} family, rule {entry} was found with groups out of order. The correct order for a rule should be subgroups of {top}.".format(family=family_name, entry=entry, top=topGroupOrder)) - + def kinetics_checkGroupsFoundInTree(self, family_name): """ This test checks whether groups are found in the tree, with proper parents. @@ -300,13 +344,13 @@ def kinetics_checkChildParentRelationships(self, family_name): #top nodes and product nodes don't have parents by definition, so they get an automatic pass: if childNode in originalFamily.groups.top or childNode in originalFamily.forwardTemplate.products: continue parentNode = childNode.parent - + if parentNode is None: # This is a mistake in the database, but it should be caught by kinetics_checkGroupsFoundInTree # so rather than report it twice or crash, we'll just silently carry on to the next node. continue elif parentNode in originalFamily.forwardTemplate.products: - #This is a product node made by training reactions which we do not need to check + #This is a product node made by training reactions which we do not need to heck continue # Check whether the node has proper parents unless it is the top reactant or product node # The parent should be more general than the child @@ -354,11 +398,11 @@ def kinetics_checkAdjlistsNonidentical(self, database): for reactant in entry.item.reactants: if reactant.label not in speciesDict: speciesDict[reactant.label] = reactant - + for product in entry.item.products: if product.label not in speciesDict: speciesDict[product.label] = product - + # Go through all species to make sure they are nonidentical speciesList = speciesDict.values() labeledAtoms = [species.molecule[0].getLabeledAtoms() for species in speciesList] @@ -371,10 +415,10 @@ def kinetics_checkAdjlistsNonidentical(self, database): except KeyError: # atom labels did not match, therefore not a match continue - + nose.tools.assert_false(speciesList[i].molecule[0].isIsomorphic(speciesList[j].molecule[0], initialMap), "Species {0} and species {1} in {2} database were found to be identical.".format(speciesList[i].label,speciesList[j].label,database.label)) - def kinetics_checkReactantAndProductTemplate(self, family_name): + def kinetics_checkReactantAndProductTemplate(self, family_name): """ This test checks whether the reactant and product templates within a family are correctly defined. For a reversible family, the reactant and product templates must have matching labels. @@ -389,7 +433,7 @@ def kinetics_checkReactantAndProductTemplate(self, family_name): for reactant_label in reactant_labels: for product_label in product_labels: nose.tools.assert_false(reactant_label==product_label, "Reactant label {0} matches that of product label {1} in a non-reversible family template. Please rename product label.".format(reactant_label,product_label)) - + def kinetics_checkCdAtomType(self, family_name): """ This test checks that groups containing Cd, CO, CS and Cdd atomtypes are used @@ -426,7 +470,7 @@ def kinetics_checkCdAtomType(self, family_name): elif num_of_Dbonds == 1: for ligand, bond in atom.bonds.iteritems(): #Ignore ligands that are not double bonded - if 'D' in bond.order: + if any([abs(2-order) < 1e-7 for order in bond.order]): for ligAtomType in ligand.atomType: if ligand.atomType[0].isSpecificCaseOf(atomTypes['O']): correctAtomList.append('CO') elif ligand.atomType[0].isSpecificCaseOf(atomTypes['S']): correctAtomList.append('CS') @@ -440,6 +484,264 @@ def kinetics_checkCdAtomType(self, family_name): {4} """.format(family_name, entry, correctAtom, index+1, entry.item.toAdjacencyList())) + def kinetics_checkUnimolecularGroups(self,family_name): + """ + This test goes through all unimolecular groups that have more than one top level, top level groups + that overlap with family.reactant are assumed to be backbones(contains the whole reactant molecule) + and the other top levels are assumedto be endgroups + + the following are format requirements are checked: + 1)endgroup entries hav exactly the same labels as their top level entry + 2)backbone groups have all labels that endgroups have + 3)backbone groups have labels tracing between the endgroups that follow the shortest path + 4)The end subgraph inside each backbone is exactly the same as the top level of the correspodning end tree + """ + + def getEndFromBackbone(backbone, endLabels): + """ + :param backbone: :class: Entry for a backbone of molecule + :param endLabels: Labels in the end groups + :return: A subgraph representing the end group of the molecule + """ + #make copy for manipulation + copyGroup = backbone.item.copy(True) + + #Find the endGroup atoms + for atom in copyGroup.atoms: + if atom.label in endLabels: + midAtom = atom + break + + #find the bonds to break + bondsToBreak = [] + for atom2, bond in midAtom.bonds.iteritems(): + if atom2.label is None or atom2.label not in endLabels: # + bondsToBreak.append(bond) + + + for bond in bondsToBreak: + copyGroup.removeBond(bond) + + #split group into end and backbone fragment + groups = copyGroup.split() + + #verify group was split correctly and identify the correct end group + endLabels = set(endLabels) + for group in groups: + groupLabels = set(atom.label for atom in group.atoms) + groupLabels.discard('') + if endLabels == groupLabels: + break + else: + print(endLabels) + print(groupLabels) + for group in groups: + print(group.toAdjacencyList(label=backbone.label)) + raise Exception("Group {0} not split correctly".format(backbone.label)) + + return group + ################################################################################# + family = self.database.kinetics.families[family_name] + print family + + backbone = family.getBackboneRoots()[0] + + endGroups = family.getEndRoots() + + endLabels = {} + for endGroup in endGroups: + labels = [] + for atom in endGroup.item.atoms: + if atom.label: + labels.append(atom.label) + endLabels[endGroup] = set(labels) + + #get boundary atoms to test that backbones have labels between end groups + nose.tools.assert_is_not_none(family.boundaryAtoms) + + # set of all end_labels should be backbone label + backboneLabel = set([]) + for end, end_label in endLabels.iteritems(): + for label in end_label: + backboneLabel.add(label) + + #define types of errors + A = [] #end groups have too many labels + B = [] #end group lacks necessary label + C = [] #backbone missing end group labels + D = [] #backbone missing labels in between groups + E = [] #backbone tries to define atoms inside end groups + for group_name, entry in family.groups.entries.iteritems(): + if isinstance(entry.item, Group): + group = entry.item + if backbone in family.ancestors(entry): + for atom in group.atoms: + if atom.label: presentLabels.add(atom.label) + #Check C + for endGroup, labels in endLabels.iteritems(): + if not labels.issubset(presentLabels): + C.append([endGroup, entry]) + #check D + midAtoms = [group.getLabeledAtom(x) for x in family.boundaryAtoms] + pathAtoms = find_shortest_path(midAtoms[0], midAtoms[1]) + for atom in pathAtoms: + if not atom.label: + D.append([backbone, entry]) + break + #check E + for endGroup, labels in endLabels.iteritems(): + endFromBackbone = getEndFromBackbone(entry, labels) + presentLabels = endFromBackbone.getLabeledAtoms() + presentLabels = set(presentLabels.keys()) + if labels == presentLabels: + if not endGroup.item.isIdentical(endFromBackbone): + E.append([endGroup, entry]) + else: raise Exception("Group {0} has split into end group {1}, but does not match any root".format(entry.label, endFromBackbone.toAdjacencyList())) + + else: + presentLabels = set([]) + for endNode, labelledAtoms in endLabels.iteritems(): + if endNode in family.ancestors(entry): + for atom in group.atoms: + if atom.label: presentLabels.add(atom.label) + #Check A + if not presentLabels.issubset(labelledAtoms): + A.append([endNode, entry]) + #Check B + if not labelledAtoms.issubset(presentLabels): + B.append([endNode, entry]) + + + #print outputs + if A != []: + s = "These end groups have extra labels that their top level end group do not have:"+"\n [root group, error group]" + for x in A: + s += '\n'+str(x) + nose.tools.assert_true(False,s) + if B != []: + s = "These end groups are missing labels that their top level end group have:"+"\n [root group, error group]" + for x in B: + s += '\n'+str(x) + nose.tools.assert_true(False,s) + if C != []: + s = "These backbone groups are missing labels that are in the end groups:"+"\n [root group, error group]" + for x in C: + s += '\n'+str(x) + nose.tools.assert_true(False,s) + if D != []: + s = "These backbone groups are missing labels along the path atoms:"+"\n [root group, error group]" + for x in D: + s += '\n'+str(x) + nose.tools.assert_true(False,s) + if E != []: + s = "These backbone have end subgraphs that don't match a root:"+"\n [root group, error group]" + for x in E: + s += '\n'+str(x) + nose.tools.assert_true(False,s) + + def kinetics_checkSampleDescendsToGroup(self, family_name): + """ + This test first creates a sample :class:Molecule from a :class:Group. Then it checks + that this molecule hits the original group or a child when it descends down the tree. + """ + family = self.database.kinetics.families[family_name] + + #ignore any products + ignore=[] + if not family.ownReverse: + for product in family.forwardTemplate.products: + ignore.append(product) + ignore.extend(product.children) + else: ignore=[] + + #If family is backbone archetype, then we need to merge groups before descending + roots = family.groups.top + if len(roots) > len(family.forwardTemplate.reactants): + backboneRoots = family.getBackboneRoots() + allBackboneGroups = [] + for backboneRoot in backboneRoots: + allBackboneGroups.extend(family.getTopLevelGroups(backboneRoot)) + #list of numbered of labelled atoms for allBackboneGroups + backboneSizes = [len(backbone.item.getLabeledAtoms()) for backbone in allBackboneGroups] + + #pick a backbone that is two labelled atoms larger than the smallest + if min(backboneSizes) + 2 in backboneSizes: + backboneSample = allBackboneGroups[backboneSizes.index(min(backboneSizes) + 2)] + #or if it doesn't exist, pick the largest backbone + else: + backboneSample = allBackboneGroups[backboneSizes.index(max(backboneSizes))] + mergesNecessary = True + else: mergesNecessary = False + + #If atom has too many benzene rings, we currently have trouble making sample atoms + skipped = [] + + for entryName, entry in family.groups.entries.iteritems(): + if entry in ignore: continue + elif isinstance(entry.item, Group): + print entryName + ancestors=family.ancestors(entry) + if ancestors: root = ancestors[-1] #top level root will be last one in ancestors + else: root = entry + try: + if mergesNecessary and root not in backboneRoots: #we may need to merge + mergedGroup = family.mergeGroups(backboneSample.item, entry.item) + sampleMolecule = mergedGroup.makeSampleMolecule() + else: + sampleMolecule = entry.item.makeSampleMolecule() + + #for now ignore sample atoms that use nitrogen types + nitrogen = False + for atom in sampleMolecule.atoms: + if atom.isNitrogen(): nitrogen = True + if nitrogen: + skipped.append(entryName) + continue + + #test accessibility here + atoms = sampleMolecule.getLabeledAtoms() + match = family.groups.descendTree(sampleMolecule, atoms, strict=True, root = root) + nose.tools.assert_in(entry, [match]+family.groups.ancestors(match), """In group {0}, a sample molecule made from node {1} returns node {2} when descending the tree. +Sample molecule AdjList: +{3} + +Origin Group AdjList: +{4}{5}{6} + +Matched group AdjList: +{7} + """.format(family_name, + entry.label, + match.label, + sampleMolecule.toAdjacencyList(), + entry.item.toAdjacencyList(), + "\n\nBackbone Group Adjlist:\n" + backboneSample.label +'\n' if mergesNecessary and root not in backboneRoots else '', + backboneSample.item.toAdjacencyList() if mergesNecessary and root not in backboneRoots else '', + match.item.toAdjacencyList())) + + except UnexpectedChargeError, e: + nose.tools.assert_true(False, """In family {0}, a sample molecule made from node {1} returns an unexpectedly charged molecule: +Sample molecule AdjList: +{2} + +Origin Group AdjList: +{3}{4}{5}""".format(family_name, + entry.label, + e.graph.toAdjacencyList(), + entry.item.toAdjacencyList(), + "\n\nBackbone Group Adjlist:\n" + backboneSample.label +'\n' if mergesNecessary and root not in backboneRoots else '', + backboneSample.item.toAdjacencyList() if mergesNecessary and root not in backboneRoots else '') + ) + + except ImplicitBenzeneError: + skipped.append(entryName) + + #print out entries skipped from exception we can't currently handle + if skipped: + print "These entries were skipped because too big benzene rings or has nitrogen sample atom:" + for entryName in skipped: + print entryName + def general_checkNodesFoundInTree(self, group_name, group): """ This test checks whether nodes are found in the tree, with proper parents. @@ -453,7 +755,7 @@ def general_checkNodesFoundInTree(self, group_name, group): nose.tools.assert_true(ascendParent is not None, "Node {node} in {group} group was found in the tree without a proper parent.".format(node=child, group=group_name)) nose.tools.assert_true(child in ascendParent.children, "Node {node} in {group} group was found in the tree without a proper parent.".format(node=nodeName, group=group_name)) nose.tools.assert_false(child is ascendParent, "Node {node} in {group} is a parent to itself".format(node=nodeName, group=group_name)) - + def general_checkGroupsNonidentical(self, group_name, group): """ This test checks whether nodes found in the group are nonidentical. @@ -462,14 +764,14 @@ def general_checkGroupsNonidentical(self, group_name, group): for nodeName, nodeGroup in group.entries.iteritems(): del entriesCopy[nodeName] for nodeNameOther, nodeGroupOther in entriesCopy.iteritems(): - try: + try: group.matchNodeToNode(nodeGroup,nodeGroupOther) except: print nodeName print nodeNameOther pass nose.tools.assert_false(group.matchNodeToNode(nodeGroup, nodeGroupOther), "Node {node} in {group} group was found to be identical to node {nodeOther}".format(node=nodeName, group=group_name, nodeOther=nodeNameOther)) - + def general_checkChildParentRelationships(self, group_name, group): """ This test checks that nodes' parent-child relationships are correct in the database. @@ -516,7 +818,6 @@ def general_checkSiblingsForParents(self, group_name, group): for child2 in node.children[index+1:]: nose.tools.assert_false(group.matchNodeToChild(child1, child2), "In {0} group, node {1} is a parent of {2}, but they are written as siblings.".format(group_name, child1, child2)) - def general_checkCdAtomType(self, group_name, group): """ This test checks that groups containing Cd, CO, CS and Cdd atomtypes are used @@ -541,7 +842,7 @@ def general_checkCdAtomType(self, group_name, group): elif num_of_Dbonds == 1: for ligand, bond in atom.bonds.iteritems(): #Ignore ligands that are not double bonded - if 'D' in bond.order: + if any([abs(2-order) < 1e-7 for order in bond.order]): for ligAtomType in ligand.atomType: if ligand.atomType[0].isSpecificCaseOf(atomTypes['O']): correctAtomList.append('CO') elif ligand.atomType[0].isSpecificCaseOf(atomTypes['S']): correctAtomList.append('CS') @@ -555,5 +856,65 @@ def general_checkCdAtomType(self, group_name, group): {4} """.format(group_name, entry, correctAtom, index+1, entry.item.toAdjacencyList())) + def general_checkSampleDescendsToGroup(self, group_name, group): + """ + This test first creates a sample :class:Molecule from a :class:Group. Then it checks + that this molecule hits the original group or a child when it descends down the tree. + """ + + skipped = [] + for entryName, entry in group.entries.iteritems(): + print entryName + try: + if isinstance(entry.item, Group): + # print entryName + sampleMolecule = entry.item.makeSampleMolecule() + + #for now ignore sample atoms that use nitrogen types + nitrogen = False + for atom in sampleMolecule.atoms: + if atom.isNitrogen(): nitrogen = True + if nitrogen: + skipped.append(entryName) + continue + + atoms = sampleMolecule.getLabeledAtoms() + match = group.descendTree(sampleMolecule, atoms, strict=True) + + assert entry in [match]+group.ancestors(match), """In group {0}, a sample molecule made from node {1} returns node {2} when descending the tree. +Sample molecule AdjList: +{3} + +Origin Group AdjList: +{4} + +Matched group AdjList: +{5} +""".format(group_name, + entry, + match, + sampleMolecule.toAdjacencyList(), + entry.item.toAdjacencyList(), + match.item.toAdjacencyList()) + except UnexpectedChargeError, e: + nose.tools.assert_true(False, """In family {0}, a sample molecule made from node {1} returns an unexpectedly charged molecule: +Sample molecule AdjList: +{2} + +Origin Group AdjList: +{3}""".format(group_name, + entry.label, + e.graph.toAdjacencyList(), + entry.item.toAdjacencyList())) + + except ImplicitBenzeneError: + skipped.append(entryName) + + #print out entries skipped from exception we can't currently handle + if skipped: + print "These entries were skipped because too big benzene rings or has nitrogen sample atom:" + for entryName in skipped: + print entryName + if __name__ == '__main__': nose.run(argv=[__file__, '-v', '--nologcapture'], defaultTest=__name__)