Skip to content

Commit b40ca9b

Browse files
sevyharrisrwest
authored andcommitted
add tests for reaction pair generation
1 parent 8953846 commit b40ca9b

File tree

1 file changed

+113
-0
lines changed

1 file changed

+113
-0
lines changed

test/rmgpy/reactionTest.py

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -785,6 +785,68 @@ def setup_class(self):
785785
)
786786
self.reaction4_pairs = [(PO3, HOPO2), (H2, H_atom)]
787787

788+
# Reaction definitions for testing flux pair generation
789+
# Isomerization
790+
PC4H9 = Species().from_smiles("[CH2]CCC")
791+
SC4H9 = Species().from_smiles("C[CH]CCC")
792+
self.isomerization_reaction = Reaction(
793+
reactants=[PC4H9],
794+
products=[SC4H9],
795+
)
796+
self.isomerization_reaction_pairs = [(PC4H9, SC4H9)]
797+
798+
# Association
799+
propyl = Species().from_smiles("[CH2]CC")
800+
methylene = Species().from_smiles("[CH2]")
801+
self.association_reaction = Reaction(
802+
reactants=[propyl, methylene],
803+
products=[PC4H9],
804+
)
805+
self.association_reaction_pairs = [(propyl, PC4H9), (methylene, PC4H9)]
806+
807+
# Dissociation
808+
self.dissociation_reaction = Reaction(
809+
reactants=[PC4H9],
810+
products=[propyl, methylene],
811+
)
812+
self.dissociation_reaction_pairs = [(PC4H9, propyl), (PC4H9, methylene)]
813+
814+
# Bimolecular
815+
butane = Species().from_smiles("CCCC")
816+
oh = Species().from_smiles("[OH]")
817+
h2o = Species().from_smiles("O")
818+
self.bimolecular_reaction = Reaction(
819+
reactants=[butane, oh],
820+
products=[SC4H9, h2o],
821+
)
822+
self.bimolecular_reaction_pairs = [(butane, SC4H9), (oh, h2o)]
823+
824+
# Surface dissociative adsorption
825+
NH3 = Species().from_smiles("N")
826+
X = Species().from_adjacency_list("1 X u0 p0")
827+
HX = Species().from_adjacency_list(
828+
"""
829+
1 H u0 p0 c0 {2,S}
830+
2 X u0 p0 c0 {1,S}
831+
""")
832+
H2NX = Species().from_adjacency_list(
833+
"""
834+
1 N u0 p1 c0 {2,S} {3,S} {4,S}
835+
2 H u0 p0 c0 {1,S}
836+
3 H u0 p0 c0 {1,S}
837+
4 X u0 p0 c0 {1,S}
838+
""")
839+
self.surf_dissociation_reaction = Reaction(
840+
reactants=[NH3, X, X],
841+
products=[H2NX, HX],
842+
)
843+
self.surf_dissociation_reaction_pairs = [
844+
(NH3, H2NX),
845+
(NH3, HX),
846+
(X, H2NX),
847+
(X, HX),
848+
]
849+
788850
def test_is_isomerization(self):
789851
"""
790852
Test the Reaction.is_isomerization() method.
@@ -1824,6 +1886,57 @@ def test_phosphorus_reaction_pairs(self):
18241886
assert len(self.reaction4.pairs[1]) == 2
18251887
assert self.reaction4.pairs == self.reaction4_pairs
18261888

1889+
def test_generate_pairs(self):
1890+
"""
1891+
This method tests that the correct reaction pairs are being generated for a reaction
1892+
"""
1893+
1894+
def pairs_equal(pair1, pair2):
1895+
if len(pair1) != len(pair2):
1896+
return False
1897+
if len(pair1) != 2:
1898+
return False
1899+
return pair1[0].is_isomorphic(pair2[0]) and pair1[1].is_isomorphic(pair2[1]) or \
1900+
pair1[0].is_isomorphic(pair2[1]) and pair1[1].is_isomorphic(pair2[0])
1901+
def list_of_pairs_equal(list1, list2):
1902+
if len(list1) != len(list2):
1903+
return False
1904+
for pair1 in list1:
1905+
found = False
1906+
for pair2 in list2:
1907+
if pairs_equal(pair1, pair2):
1908+
found = True
1909+
list2.remove(pair2)
1910+
break
1911+
if not found:
1912+
return False
1913+
return True
1914+
1915+
# Test Isomerization: A -> C
1916+
self.isomerization_reaction.generate_pairs()
1917+
assert len(self.isomerization_reaction.pairs) == 1
1918+
assert list_of_pairs_equal(self.isomerization_reaction.pairs, self.isomerization_reaction_pairs)
1919+
1920+
# Test Dissociation A -> C + D
1921+
self.dissociation_reaction.generate_pairs()
1922+
assert len(self.dissociation_reaction.pairs) == 2
1923+
assert list_of_pairs_equal(self.dissociation_reaction.pairs, self.dissociation_reaction_pairs)
1924+
1925+
# Test Association A + B -> C
1926+
self.association_reaction.generate_pairs()
1927+
assert len(self.association_reaction.pairs) == 2
1928+
assert list_of_pairs_equal(self.association_reaction.pairs, self.association_reaction_pairs)
1929+
1930+
# Test Bimolecular A + B -> C + D
1931+
self.bimolecular_reaction.generate_pairs()
1932+
assert len(self.bimolecular_reaction.pairs) == 2
1933+
assert list_of_pairs_equal(self.bimolecular_reaction.pairs, self.bimolecular_reaction_pairs)
1934+
1935+
# Test Dissociative Adsorption A + 2X -> CX + DX
1936+
self.surf_dissociation_reaction.generate_pairs()
1937+
assert len(self.surf_dissociation_reaction.pairs) == 4
1938+
assert list_of_pairs_equal(self.surf_dissociation_reaction.pairs, self.surf_dissociation_reaction_pairs)
1939+
18271940

18281941
class TestReactionToCantera:
18291942
"""

0 commit comments

Comments
 (0)