Skip to content

Instantly share code, notes, and snippets.

@johnmay
Last active September 8, 2022 14:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save johnmay/fa35492e6531877a870b55b16f874d91 to your computer and use it in GitHub Desktop.
Save johnmay/fa35492e6531877a870b55b16f874d91 to your computer and use it in GitHub Desktop.
import sys
import daylight
from daylight import Smiles, Smirks
def output(smiin, smirks, smiout, comment):
print ("%s\t%s\t%s\t%s" % (smiin, smirks, smiout, comment))
def main(fname):
file = open(fname, 'r')
for line in file.readlines():
line = line.strip()
if not line or line.startswith("#"):
print(line);
continue
parts = line.split('\t')
smiles = parts[0]
smirks = parts[1]
comment = ""
if len(parts) != 2:
comment = parts[2]
try:
mol = Smiles.smilin(smiles)
if not mol:
output(smiles, smirks, "<bad smiles>", comment)
continue
try:
trans = Smirks.compile(smirks)
reactions = trans.xtransform(mol,0)
if len(reactions) == 0:
output(smiles, smirks, "<no match>", comment)
else:
output(smiles, smirks, reactions[0].cansmiles(1), comment)
except:
output(smiles, smirks, "<bad smirks>", comment)
except:
output(smiles, smirks, "<bad smiles>", comment)
if __name__ == "__main__":
if len(sys.argv) != 2:
sys.stderr.write("usage: dy-smirks.py test.smirks > outname\n");
sys.exit(1)
main(sys.argv[1])
"""
From Andrew's documentation
>>>
>>> mol = Smiles.smilin("c1ccccc1N(=O)(=O)")
>>> trans = Smirks.compile("[c:1][N:2](=[O:6])=[O:4]>>[c:1][N+:2](=[O:6])[O-:4]")
>>> reactions = trans.transform(mol)
>>> print "ANSWERS:", len(reactions)
ANSWERS: 2
>>> for reaction in reactions:
... print reaction.cansmiles()
...
USMILES: O=N(=O)c1ccccc1>>[O-][N+](=O)c1ccccc1
USMILES: O=N(=O)c1ccccc1>>[O-][N+](=O)c1ccccc1
>>> for reaction in reactions:
... print reaction.cansmiles(1)
...
ASMILES: [O:1]=[N:8](=[O:2])[c:9]1[cH:6][cH:4][cH:3][cH:5][cH:7]1>>[O-:1][N+:8](=[O:2])[c:9]1[cH:6][cH:4][cH:3][cH:5][cH:7]1
ASMILES: [O:1]=[N:8](=[O:2])[c:9]1[cH:6][cH:4][cH:3][cH:5][cH:7]1>>[O-:1][N+:8](=[O:2])[c:9]1[cH:6][cH:4][cH:3][cH:5][cH:7]1
>>>
"""
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment