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

Reply via email to