This might be helpful - a rather dull python script for testing lots
of different orderings of reactants and templates.
On Wed, Aug 17, 2011 at 9:42 AM, Richard Cooper
<[email protected]> wrote:
> Dear Greg,
>
> Patch attached (to be applied in the GraphMol/ChemReactions folder).
>
#!/usr/bin/python
from rdkit import Chem
from rdkit.Chem import AllChem
from rdkit.Chem import Descriptors
from rdkit.Chem import Draw
print "Keep chirality if specified [C:17]>>[C:17]"
rxn = AllChem.ReactionFromSmarts( '[C:1]>>[C:1]')
rxn.Initialize()
ps =rxn.RunReactants((Chem.MolFromSmiles('F[C@H](Cl)(Br)'),))
print Chem.MolToSmiles(ps[0][0],True) + " expected: F[C@H](Cl)Br"
ps =rxn.RunReactants((Chem.MolFromSmiles('F[C@H](Br)(Cl)'),))
print Chem.MolToSmiles(ps[0][0],True) + " expected: F[C@@H](Cl)Br"
ps =rxn.RunReactants((Chem.MolFromSmiles('FC(Cl)Br'),))
print Chem.MolToSmiles(ps[0][0],True) + " expected: FC(Cl)Br"
print
print "Keep chirality if specified [C@:17]>>[C@:17]"
rxn = AllChem.ReactionFromSmarts( '[C@:1]>>[C@:1]')
rxn.Initialize()
ps =rxn.RunReactants((Chem.MolFromSmiles('F[C@H](Cl)(Br)'),))
print Chem.MolToSmiles(ps[0][0],True) + " expected: F[C@H](Cl)Br"
ps =rxn.RunReactants((Chem.MolFromSmiles('F[C@H](Br)(Cl)'),))
print Chem.MolToSmiles(ps[0][0],True) + " expected: F[C@@H](Cl)Br"
ps =rxn.RunReactants((Chem.MolFromSmiles('FC(Cl)Br'),))
print Chem.MolToSmiles(ps[0][0],True) + " expected: FC(Cl)Br"
print
print "Invert chirality if specified [C@@::17]>>[C@:17]"
rxn = AllChem.ReactionFromSmarts( '[C@@:1]>>[C@:1]')
rxn.Initialize()
ps =rxn.RunReactants((Chem.MolFromSmiles('F[C@H](Cl)(Br)'),))
print Chem.MolToSmiles(ps[0][0],True) + " expected: F[C@@H](Cl)Br"
ps =rxn.RunReactants((Chem.MolFromSmiles('F[C@H](Br)(Cl)'),))
print Chem.MolToSmiles(ps[0][0],True) + " expected: F[C@H](Cl)Br"
ps =rxn.RunReactants((Chem.MolFromSmiles('FC(Cl)Br'),))
print Chem.MolToSmiles(ps[0][0],True) + " expected: FC(Cl)Br"
print
print "Remove chirality if specified [C@::17]>>[C:17]"
rxn = AllChem.ReactionFromSmarts( '[C@:1]>>[C:1]')
rxn.Initialize()
ps =rxn.RunReactants((Chem.MolFromSmiles('F[C@H](Cl)(Br)'),))
print Chem.MolToSmiles(ps[0][0],True) + " expected: FC(Cl)Br"
ps =rxn.RunReactants((Chem.MolFromSmiles('F[C@H](Br)(Cl)'),))
print Chem.MolToSmiles(ps[0][0],True) + " expected: FC(Cl)Br"
ps =rxn.RunReactants((Chem.MolFromSmiles('FC(Cl)Br'),))
print Chem.MolToSmiles(ps[0][0],True) + " expected: FC(Cl)Br"
print
print "Add/replace chirality if specified [F:2][C:17]([Cl:3])[Br:4]>>[F:2][C@@:17]([Cl:3])[Br:4]"
rxn = AllChem.ReactionFromSmarts( '[F:2][C:1]([Cl:3])[Br:4]>>[F:2][C@@:1]([Cl:3])[Br:4]')
rxn.Initialize()
ps =rxn.RunReactants((Chem.MolFromSmiles('F[C@H](Cl)(Br)'),))
print Chem.MolToSmiles(ps[0][0],True) + " expected: F[C@@H](Cl)Br"
ps =rxn.RunReactants((Chem.MolFromSmiles('F[C@H](Br)(Cl)'),))
print Chem.MolToSmiles(ps[0][0],True) + " expected: F[C@@H](Cl)Br"
ps =rxn.RunReactants((Chem.MolFromSmiles('FC(Cl)Br'),))
print Chem.MolToSmiles(ps[0][0],True) + " expected: F[C@@H](Cl)Br"
print
# Cl Br
# \ /
# C.F
# |
# I
a1 = Chem.MolFromSmiles("FC(Cl)(Br)(I)")
odd1 = Chem.MolFromSmiles("C[C@@H](O)CCC(Cl)(Br)C/C=C\I")
r1 = Chem.MolFromSmiles("F[C@](Cl)(Br)(I)")
r2 = Chem.MolFromSmiles("F[C@](Br)(I)(Cl)")
r3 = Chem.MolFromSmiles("F[C@](I)(Cl)(Br)")
r4 = Chem.MolFromSmiles("Cl[C@](F)(I)(Br)")
r5 = Chem.MolFromSmiles("Cl[C@](Br)(F)(I)")
r6 = Chem.MolFromSmiles("Cl[C@](I)(Br)(F)")
r7 = Chem.MolFromSmiles("Br[C@](I)(F)(Cl)")
r8 = Chem.MolFromSmiles("Br[C@](F)(Cl)(I)")
r9 = Chem.MolFromSmiles("Br[C@](Cl)(I)(F)")
r10 = Chem.MolFromSmiles("I[C@](Br)(Cl)(F)")
r11 = Chem.MolFromSmiles("I[C@](F)(Br)(Cl)")
r12 = Chem.MolFromSmiles("I[C@](Cl)(F)(Br)")
r13 = Chem.MolFromSmiles("F[C@@](Br)(Cl)(I)")
r14 = Chem.MolFromSmiles("F[C@@](I)(Br)(Cl)")
r15 = Chem.MolFromSmiles("F[C@@](Cl)(I)(Br)")
r16 = Chem.MolFromSmiles("Cl[C@@](I)(F)(Br)")
r17 = Chem.MolFromSmiles("Cl[C@@](F)(Br)(I)")
r18 = Chem.MolFromSmiles("Cl[C@@](Br)(I)(F)")
r19 = Chem.MolFromSmiles("Br[C@@](F)(I)(Cl)")
r20 = Chem.MolFromSmiles("Br[C@@](Cl)(F)(I)")
r21 = Chem.MolFromSmiles("Br[C@@](I)(Cl)(F)")
r22 = Chem.MolFromSmiles("I[C@@](Cl)(Br)(F)")
r23 = Chem.MolFromSmiles("I[C@@](Br)(F)(Cl)")
r24 = Chem.MolFromSmiles("I[C@@](F)(Cl)(Br)")
l1 = Chem.MolFromSmiles("F[C@@](Cl)(Br)(I)")
l2 = Chem.MolFromSmiles("F[C@@](Br)(I)(Cl)")
l3 = Chem.MolFromSmiles("F[C@@](I)(Cl)(Br)")
l4 = Chem.MolFromSmiles("Cl[C@@](F)(I)(Br)")
l5 = Chem.MolFromSmiles("Cl[C@@](Br)(F)(I)")
l6 = Chem.MolFromSmiles("Cl[C@@](I)(Br)(F)")
l7 = Chem.MolFromSmiles("Br[C@@](I)(F)(Cl)")
l8 = Chem.MolFromSmiles("Br[C@@](F)(Cl)(I)")
l9 = Chem.MolFromSmiles("Br[C@@](Cl)(I)(F)")
l10 = Chem.MolFromSmiles("I[C@@](Br)(Cl)(F)")
l11 = Chem.MolFromSmiles("I[C@@](F)(Br)(Cl)")
l12 = Chem.MolFromSmiles("I[C@@](Cl)(F)(Br)")
l13 = Chem.MolFromSmiles("F[C@](Br)(Cl)(I)")
l14 = Chem.MolFromSmiles("F[C@](I)(Br)(Cl)")
l15 = Chem.MolFromSmiles("F[C@](Cl)(I)(Br)")
l16 = Chem.MolFromSmiles("Cl[C@](I)(F)(Br)")
l17 = Chem.MolFromSmiles("Cl[C@](F)(Br)(I)")
l18 = Chem.MolFromSmiles("Cl[C@](Br)(I)(F)")
l19 = Chem.MolFromSmiles("Br[C@](F)(I)(Cl)")
l20 = Chem.MolFromSmiles("Br[C@](Cl)(F)(I)")
l21 = Chem.MolFromSmiles("Br[C@](I)(Cl)(F)")
l22 = Chem.MolFromSmiles("I[C@](Cl)(Br)(F)")
l23 = Chem.MolFromSmiles("I[C@](Br)(F)(Cl)")
l24 = Chem.MolFromSmiles("I[C@](F)(Cl)(Br)")
g1 = Chem.MolFromSmiles('[C@H](Cl)(Br)I');
g2 = Chem.MolFromSmiles('[C@@H](Br)(Cl)I')
print "Greg 1: " + Chem.MolToSmiles(g1,True)
print "Greg 2: " + Chem.MolToSmiles(g2,True)
print "Greg's example: reactant changes"
rxn2 = AllChem.ReactionFromSmarts( '[Cl:2][C@H:1]([Br:3])[I:4]>>[Cl:2][C@@H:1]([Br:3])[F:4]')
rxn2.Initialize()
ps =rxn2.RunReactants((Chem.MolFromSmiles('[C@H](Cl)(Br)I'),))
print Chem.MolToSmiles(ps[0][0],True) + " expected: F[C@H](Cl)Br"
ps =rxn2.RunReactants((Chem.MolFromSmiles('[C@H](Br)(I)Cl'),))
print Chem.MolToSmiles(ps[0][0],True) + " expected: F[C@H](Cl)Br"
ps =rxn2.RunReactants((Chem.MolFromSmiles('[C@H](I)(Cl)Br'),))
print Chem.MolToSmiles(ps[0][0],True) + " expected: F[C@H](Cl)Br"
ps =rxn2.RunReactants((g1,))
print Chem.MolToSmiles(ps[0][0],True) + " expected: F[C@H](Cl)Br"
print
#Now provide the same input molecule with a different atom ordering:
ps =rxn2.RunReactants((Chem.MolFromSmiles('[C@@H](Br)(Cl)I'),))
print Chem.MolToSmiles(ps[0][0],True) + " expected: F[C@H](Cl)Br"
ps =rxn2.RunReactants((Chem.MolFromSmiles('[C@@H](I)(Br)Cl'),))
print Chem.MolToSmiles(ps[0][0],True) + " expected: F[C@H](Cl)Br"
ps =rxn2.RunReactants((Chem.MolFromSmiles('[C@@H](Cl)(I)Br'),))
print Chem.MolToSmiles(ps[0][0],True) + " expected: F[C@H](Cl)Br"
ps =rxn2.RunReactants((g2,))
print Chem.MolToSmiles(ps[0][0],True) + " expected: F[C@H](Cl)Br"
print
print "This should invert r1"
rxn2 = AllChem.ReactionFromSmarts("[I:5][C@@:1]([Br:4])([F:2])([Cl:3])>>[Br:4][C@:1]([I:5])([F:2])([Cl:3])")
# - r23 r7
rxn2.Initialize()
p1 = rxn2.RunReactants((r1,))
print "Invert: " + Chem.MolToSmiles(p1[0][0], isomericSmiles=True)
print "This should keep r1"
rxn2 = AllChem.ReactionFromSmarts("[I:5][C@:1]([F:2])([Br:4])([Cl:3])>>[Br:4][C@:1]([I:5])([F:2])([Cl:3])")
# r11 r7
rxn2.Initialize()
p1 = rxn2.RunReactants((r1,))
print "Keep: " + Chem.MolToSmiles(p1[0][0], isomericSmiles=True)
print "This should keep r1"
rxn2 = AllChem.ReactionFromSmarts("[I:5][C@:1]([Br:4])([F:2])([Cl:3])>>[Br:4][C@:1]([I:5])([F:2])([Cl:3])")
# r23 r7
rxn2.Initialize()
p1 = rxn2.RunReactants((r1,))
print "Keep: " + Chem.MolToSmiles(p1[0][0], isomericSmiles=True)
print "This should keep r1"
rxn2 = AllChem.ReactionFromSmarts("[Br:4][C@:1]([I:5])([F:2])([Cl:3])>>[I:5][C@:1]([Br:4])([F:2])([Cl:3])")
# r7 r23
rxn2.Initialize()
p1 = rxn2.RunReactants((r1,))
print "Keep: " + Chem.MolToSmiles(p1[0][0], isomericSmiles=True)
print "This should invert r1"
rxn2 = AllChem.ReactionFromSmarts("[I:5][C@:1]([Br:4])([F:2])([Cl:3])>>[Br:4][C@@:1]([I:5])([F:2])([Cl:3])")
# r23inv r7inv
rxn2.Initialize()
p1 = rxn2.RunReactants((r1,))
print "Invert: " + Chem.MolToSmiles(p1[0][0], isomericSmiles=True)
#print Chem.MolToSmiles(r1, isomericSmiles=True)
#print Chem.MolToSmiles(r2, isomericSmiles=True)
#print Chem.MolToSmiles(r3, isomericSmiles=True)
#print Chem.MolToSmiles(r4, isomericSmiles=True)
#print Chem.MolToSmiles(r5, isomericSmiles=True)
#print Chem.MolToSmiles(r6, isomericSmiles=True)
#print Chem.MolToSmiles(r7, isomericSmiles=True)
#print Chem.MolToSmiles(r8, isomericSmiles=True)
#print Chem.MolToSmiles(r9, isomericSmiles=True)
#print Chem.MolToSmiles(r10, isomericSmiles=True)
#print Chem.MolToSmiles(r11, isomericSmiles=True)
#print Chem.MolToSmiles(r12, isomericSmiles=True)
#print Chem.MolToSmiles(r13, isomericSmiles=True)
#print Chem.MolToSmiles(r14, isomericSmiles=True)
#print Chem.MolToSmiles(r15, isomericSmiles=True)
#print Chem.MolToSmiles(r16, isomericSmiles=True)
#print Chem.MolToSmiles(r17, isomericSmiles=True)
#print Chem.MolToSmiles(r18, isomericSmiles=True)
#print Chem.MolToSmiles(r19, isomericSmiles=True)
#print Chem.MolToSmiles(r20, isomericSmiles=True)
#print Chem.MolToSmiles(r21, isomericSmiles=True)
#print Chem.MolToSmiles(r22, isomericSmiles=True)
#print Chem.MolToSmiles(r23, isomericSmiles=True)
#print Chem.MolToSmiles(r24, isomericSmiles=True)
rxn = AllChem.ReactionFromSmarts("[C@:1]>>[C@:1]")
rxn.Initialize()
print
print "Keep Products"
p1 = rxn.RunReactants((r1,))
print Chem.MolToSmiles(p1[0][0], isomericSmiles=True)
p2 = rxn.RunReactants((r2,))
p3 = rxn.RunReactants((r3,))
p4 = rxn.RunReactants((r4,))
p5 = rxn.RunReactants((r5,))
p6 = rxn.RunReactants((r6,))
p7 = rxn.RunReactants((r7,))
p8 = rxn.RunReactants((r8,))
p9 = rxn.RunReactants((r9,))
p10 = rxn.RunReactants((r10,))
p11 = rxn.RunReactants((r11,))
p12 = rxn.RunReactants((r12,))
p13 = rxn.RunReactants((r13,))
p14 = rxn.RunReactants((r14,))
p15 = rxn.RunReactants((r15,))
p16 = rxn.RunReactants((r16,))
p17 = rxn.RunReactants((r17,))
p18 = rxn.RunReactants((r18,))
p19 = rxn.RunReactants((r19,))
p20 = rxn.RunReactants((r20,))
p21 = rxn.RunReactants((r21,))
p22 = rxn.RunReactants((r22,))
p23 = rxn.RunReactants((r23,))
p24 = rxn.RunReactants((r24,))
print Chem.MolToSmiles(p2[0][0], isomericSmiles=True)
print Chem.MolToSmiles(p3[0][0], isomericSmiles=True)
print Chem.MolToSmiles(p4[0][0], isomericSmiles=True)
print Chem.MolToSmiles(p5[0][0], isomericSmiles=True)
print Chem.MolToSmiles(p6[0][0], isomericSmiles=True)
print Chem.MolToSmiles(p7[0][0], isomericSmiles=True)
print Chem.MolToSmiles(p8[0][0], isomericSmiles=True)
print Chem.MolToSmiles(p9[0][0], isomericSmiles=True)
print Chem.MolToSmiles(p10[0][0], isomericSmiles=True)
print Chem.MolToSmiles(p11[0][0], isomericSmiles=True)
print Chem.MolToSmiles(p12[0][0], isomericSmiles=True)
print Chem.MolToSmiles(p13[0][0], isomericSmiles=True)
print Chem.MolToSmiles(p14[0][0], isomericSmiles=True)
print Chem.MolToSmiles(p15[0][0], isomericSmiles=True)
print Chem.MolToSmiles(p16[0][0], isomericSmiles=True)
print Chem.MolToSmiles(p17[0][0], isomericSmiles=True)
print Chem.MolToSmiles(p18[0][0], isomericSmiles=True)
print Chem.MolToSmiles(p19[0][0], isomericSmiles=True)
print Chem.MolToSmiles(p20[0][0], isomericSmiles=True)
print Chem.MolToSmiles(p21[0][0], isomericSmiles=True)
print Chem.MolToSmiles(p22[0][0], isomericSmiles=True)
print Chem.MolToSmiles(p23[0][0], isomericSmiles=True)
print Chem.MolToSmiles(p24[0][0], isomericSmiles=True)
rxn = AllChem.ReactionFromSmarts("[C@@:1]>>[C@:1]")
rxn.Initialize()
print
print "Invert Products"
p1 = rxn.RunReactants((r1,))
print Chem.MolToSmiles(p1[0][0], isomericSmiles=True)
p2 = rxn.RunReactants((r2,))
p3 = rxn.RunReactants((r3,))
p4 = rxn.RunReactants((r4,))
p5 = rxn.RunReactants((r5,))
p6 = rxn.RunReactants((r6,))
p7 = rxn.RunReactants((r7,))
p8 = rxn.RunReactants((r8,))
p9 = rxn.RunReactants((r9,))
p10 = rxn.RunReactants((r10,))
p11 = rxn.RunReactants((r11,))
p12 = rxn.RunReactants((r12,))
p13 = rxn.RunReactants((r13,))
p14 = rxn.RunReactants((r14,))
p15 = rxn.RunReactants((r15,))
p16 = rxn.RunReactants((r16,))
p17 = rxn.RunReactants((r17,))
p18 = rxn.RunReactants((r18,))
p19 = rxn.RunReactants((r19,))
p20 = rxn.RunReactants((r20,))
p21 = rxn.RunReactants((r21,))
p22 = rxn.RunReactants((r22,))
p23 = rxn.RunReactants((r23,))
p24 = rxn.RunReactants((r24,))
print Chem.MolToSmiles(p2[0][0], isomericSmiles=True)
print Chem.MolToSmiles(p3[0][0], isomericSmiles=True)
print Chem.MolToSmiles(p4[0][0], isomericSmiles=True)
print Chem.MolToSmiles(p5[0][0], isomericSmiles=True)
print Chem.MolToSmiles(p6[0][0], isomericSmiles=True)
print Chem.MolToSmiles(p7[0][0], isomericSmiles=True)
print Chem.MolToSmiles(p8[0][0], isomericSmiles=True)
print Chem.MolToSmiles(p9[0][0], isomericSmiles=True)
print Chem.MolToSmiles(p10[0][0], isomericSmiles=True)
print Chem.MolToSmiles(p11[0][0], isomericSmiles=True)
print Chem.MolToSmiles(p12[0][0], isomericSmiles=True)
print Chem.MolToSmiles(p13[0][0], isomericSmiles=True)
print Chem.MolToSmiles(p14[0][0], isomericSmiles=True)
print Chem.MolToSmiles(p15[0][0], isomericSmiles=True)
print Chem.MolToSmiles(p16[0][0], isomericSmiles=True)
print Chem.MolToSmiles(p17[0][0], isomericSmiles=True)
print Chem.MolToSmiles(p18[0][0], isomericSmiles=True)
print Chem.MolToSmiles(p19[0][0], isomericSmiles=True)
print Chem.MolToSmiles(p20[0][0], isomericSmiles=True)
print Chem.MolToSmiles(p21[0][0], isomericSmiles=True)
print Chem.MolToSmiles(p22[0][0], isomericSmiles=True)
print Chem.MolToSmiles(p23[0][0], isomericSmiles=True)
print Chem.MolToSmiles(p24[0][0], isomericSmiles=True)
print
print "Mixed reaction - the actual stereochemistry specified in the SMARTS is not relevant, only the relative stereochemistry."
rxn1 = AllChem.ReactionFromSmarts("[F:2][C@:1]([Cl:3])([Br:4])[I:5]>>[F:2][C@:1]([Cl:3])([Br:4])([I:5])")
rxn1.Initialize()
p1 = rxn1.RunReactants((r1,))
print "Keep: " + Chem.MolToSmiles(p1[0][0], isomericSmiles=True)
rxn2 = AllChem.ReactionFromSmarts("[F:2][C@:1]([Cl:3])([Br:4])[I:5]>>[F:2][C@@:1]([Br:4])([Cl:3])([I:5])")
rxn2.Initialize()
p1 = rxn2.RunReactants((r1,))
print "Invert: " + Chem.MolToSmiles(p1[0][0], isomericSmiles=True)
rxn2 = AllChem.ReactionFromSmarts("[F:2][C@:1]([Cl:3])([Br:4])[I:5]>>[F:2][C@@:1]([Cl:3])([I:5])([Br:4])")
rxn2.Initialize()
p1 = rxn2.RunReactants((r1,))
print "Invert: " + Chem.MolToSmiles(p1[0][0], isomericSmiles=True)
rxn2 = AllChem.ReactionFromSmarts("[F:2][C@:1]([Cl:3])([Br:4])[I:5]>>[I:5][C@@:1]([F:2])([Cl:3])([Br:4])")
rxn2.Initialize()
p1 = rxn2.RunReactants((r1,))
print "Invert: " + Chem.MolToSmiles(p1[0][0], isomericSmiles=True)
rxn2 = AllChem.ReactionFromSmarts("[F:2][C@:1]([Cl:3])([Br:4])[I:5]>>[F:2][C@@:1]([Cl:3])([Br:4])[I:5]")
rxn2.Initialize()
p1 = rxn2.RunReactants((r1,))
print "Invert: " + Chem.MolToSmiles(p1[0][0], isomericSmiles=True)
rxn2 = AllChem.ReactionFromSmarts("[F:2][C@:1]([Cl:3])([Br:4])[I:5]>>[F:2][C@@:1]([Cl:3])([Br:4])[I:5]")
rxn2.Initialize()
p1 = rxn2.RunReactants((r1,))
print "Invert: " + Chem.MolToSmiles(p1[0][0], isomericSmiles=True)
rxn2 = AllChem.ReactionFromSmarts("[F:2][C@:1]([Cl:3])([Br:4])[I:5]>>[F:2][C@@:1]([Br:4])([Cl:3])[I:5]")
rxn2.Initialize()
p1 = rxn2.RunReactants((r1,))
print "Invert: " + Chem.MolToSmiles(p1[0][0], isomericSmiles=True)
rxn2 = AllChem.ReactionFromSmarts("[F:2][C@:1]([Cl:3])([Br:4])[I:5]>>[Cl:3][C@:1]([Br:4])([F:2])([I:5])")
rxn2.Initialize()
p1 = rxn2.RunReactants((r1,))
print "Keep: " + Chem.MolToSmiles(p1[0][0], isomericSmiles=True)
rxn2 = AllChem.ReactionFromSmarts("[F:2][C@:1]([Cl:3])([Br:4])[I:5]>>[Br:4][C@:1]([Cl:3])([I:5])([F:2])")
rxn2.Initialize()
p1 = rxn2.RunReactants((r1,))
print "Keep: " + Chem.MolToSmiles(p1[0][0], isomericSmiles=True)
rxn2 = AllChem.ReactionFromSmarts("[F:2][C@:1]([Cl:3])([Br:4])[I:5]>>[Br:4][C@:1]([F:2])([Cl:3])([I:5])")
rxn2.Initialize()
p1 = rxn2.RunReactants((r1,))
print "Keep: " + Chem.MolToSmiles(p1[0][0], isomericSmiles=True)
rxn2 = AllChem.ReactionFromSmarts("[F:2][C@:1]([Cl:3])([Br:4])[I:5]>>[Br:4][C@:1]([I:5])([F:2])([Cl:3])")
rxn2.Initialize()
p1 = rxn2.RunReactants((r1,))
print "Keep: " + Chem.MolToSmiles(p1[0][0], isomericSmiles=True)
rxn2 = AllChem.ReactionFromSmarts("[I:5][C@:1]([F:2])([Br:4])([Cl:3])>>[Br:4][C@:1]([I:5])([F:2])([Cl:3])")
rxn2.Initialize()
p1 = rxn2.RunReactants((r1,))
print "Keep: " + Chem.MolToSmiles(p1[0][0], isomericSmiles=True)
rxn2 = AllChem.ReactionFromSmarts("[I:5][C@:1]([Br:4])([F:2])([Cl:3])>>[Br:4][C@:1]([I:5])([F:2])([Cl:3])")
rxn2.Initialize()
p1 = rxn2.RunReactants((r1,))
print "Keep: " + Chem.MolToSmiles(p1[0][0], isomericSmiles=True)
rxn2 = AllChem.ReactionFromSmarts("[I:5][C@@:1]([Br:4])([F:2])([Cl:3])>>[Br:4][C@@:1]([I:5])([F:2])([Cl:3])")
rxn2.Initialize()
p1 = rxn2.RunReactants((r1,))
print "Keep: " + Chem.MolToSmiles(p1[0][0], isomericSmiles=True)
print "Richard's example: chiral in, chiral out - but only two bonds specified"
rxn2 = AllChem.ReactionFromSmarts( '[Cl:2][C@:1][Br:3]>>[Cl:2][C@:1][Br:3]')
rxn2.Initialize()
print Chem.MolToSmiles(rxn2.RunReactants((r1,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r2,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r3,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r4,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r5,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r6,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r7,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r8,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r9,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r10,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r11,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r12,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r13,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r14,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r15,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r16,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r17,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r18,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r19,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r20,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r21,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r22,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r23,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r24,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l1,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l2,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l3,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l4,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l5,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l6,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l7,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l8,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l9,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l10,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l11,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l12,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l13,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l14,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l15,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l16,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l17,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l18,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l19,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l20,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l21,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l22,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l23,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l24,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print "Richard's example: chiral in, chiral out - still only two bonds specified, but different template"
rxn2 = AllChem.ReactionFromSmarts( '[Cl:2][C@:1][Br:3]>>[Br:3][C@:1][Cl:2]')
rxn2.Initialize()
print Chem.MolToSmiles(rxn2.RunReactants((r1,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r2,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r3,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r4,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r5,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r6,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r7,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r8,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r9,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r10,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r11,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r12,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r13,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r14,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r15,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r16,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r17,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r18,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r19,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r20,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r21,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r22,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r23,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r24,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l1,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l2,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l3,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l4,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l5,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l6,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l7,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l8,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l9,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l10,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l11,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l12,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l13,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l14,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l15,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l16,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l17,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l18,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l19,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l20,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l21,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l22,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l23,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l24,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print "Richard's example: chiral in, chiral out - still only two bonds specified, but final template"
rxn2 = AllChem.ReactionFromSmarts( '[Cl:2][C@:1][Br:3]>>[C@:1]([Cl:2])[Br:3]')
rxn2.Initialize()
print Chem.MolToSmiles(rxn2.RunReactants((r1,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r2,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r3,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r4,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r5,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r6,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r7,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r8,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r9,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r10,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r11,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r12,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r13,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r14,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r15,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r16,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r17,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r18,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r19,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r20,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r21,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r22,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r23,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r24,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l1,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l2,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l3,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l4,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l5,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l6,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l7,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l8,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l9,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l10,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l11,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l12,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l13,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l14,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l15,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l16,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l17,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l18,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l19,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l20,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l21,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l22,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l23,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l24,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print "Richard's example: chiral in, chiral out - but only one bond specified"
rxn2 = AllChem.ReactionFromSmarts( '[Cl:2][C@:1]>>[Cl:2][C@:1]')
rxn2.Initialize()
print Chem.MolToSmiles(rxn2.RunReactants((r1,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r2,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r3,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r4,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r5,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r6,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r7,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r8,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r9,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r10,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r11,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r12,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r13,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r14,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r15,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r16,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r17,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r18,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r19,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r20,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r21,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r22,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r23,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r24,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l1,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l2,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l3,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l4,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l5,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l6,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l7,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l8,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l9,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l10,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l11,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l12,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l13,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l14,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l15,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l16,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l17,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l18,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l19,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l20,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l21,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l22,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l23,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l24,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((a1,))[0][0],True) + " expected: FC(Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((odd1,))[0][0],True) + " expected: C[C@@H](O)CCC(Cl)(Br)C/C=C\I"
print "Richard's example: chiral in, chiral out - but only one three bonds specified"
rxn2 = AllChem.ReactionFromSmarts( '[Cl:2][C@:1]([Br:3])[F:4]>>[Cl:2][C@:1]([Br:3])[F:4]')
rxn2.Initialize()
print Chem.MolToSmiles(rxn2.RunReactants((r1,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r2,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r3,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r4,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r5,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r6,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r7,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r8,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r9,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r10,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r11,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r12,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r13,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r14,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r15,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r16,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r17,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r18,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r19,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r20,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r21,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r22,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r23,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((r24,))[0][0],True) + " expected: F[C@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l1,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l2,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l3,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l4,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l5,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l6,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l7,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l8,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l9,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l10,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l11,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l12,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l13,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l14,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l15,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l16,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l17,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l18,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l19,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l20,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l21,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l22,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l23,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
print Chem.MolToSmiles(rxn2.RunReactants((l24,))[0][0],True) + " expected: F[C@@](Cl)(Br)I"
rxn = AllChem.ReactionFromSmarts( '[O:2][C@:1]>>[Cl:2][C@:1]') # replace OH with Cl. Keep chirality of C, if present.
rxn.Initialize()
print Chem.MolToSmiles(rxn.RunReactants((Chem.MolFromSmiles('C[C@](O)(Br)I'),))[0][0],True)
rxn = AllChem.ReactionFromSmarts( '[O:2][C@:1]>>[Cl:2][C@:1]') # replace OH with Cl. Keep chirality of C, if present.
rxn.Initialize()
print Chem.MolToSmiles(rxn.RunReactants((Chem.MolFromSmiles('CC(O)(Br)I'),))[0][0],True)
rxn = AllChem.ReactionFromSmarts( '[O:2][C:1]>>[Cl:2][C:1]') # replace OH with Cl. Should keep chirality of C, if present.
rxn.Initialize()
print Chem.MolToSmiles(rxn.RunReactants((Chem.MolFromSmiles('C[C@](O)(Br)I'),))[0][0],True)
#
# Cl\ /Br Cl\ /I
# C=C -> C=C
# F/ \I F/ \Br
#
#
rxn = AllChem.ReactionFromSmarts( '[C:1](\[Cl:3])(/[F:6])=[C:2](/[Br:4])(\[I:5])>>[C:1](\[Cl:3])(/[F:6])=[C:2](\[Br:4])(/[I:5])')
rxn.Initialize()
print Chem.MolToSmiles(rxn.RunReactants((Chem.MolFromSmiles('C(\Cl)(/F)=C(/Br)(\I)'),))[0][0],True)
print Chem.MolToSmiles( Chem.MolFromSmiles ( 'Cl\C=C/Br' ), True )
rt = Chem.MolFromSmiles ( 'Cl\C=C/Br' )
rt.UpdatePropertyCache()
Draw.MolToFile(rt, 'test.png')
------------------------------------------------------------------------------
Get a FREE DOWNLOAD! and learn more about uberSVN rich system,
user administration capabilities and model configuration. Take
the hassle out of deploying and managing Subversion and the
tools developers use with it. http://p.sf.net/sfu/wandisco-d2d-2
_______________________________________________
Rdkit-discuss mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/rdkit-discuss