Wednesday, 26 March 2008

MadMol - Chemistry-aware code

There are definitely better things you can do with the functional group fingerprint (FP4) of OpenBabel, but instead, I've created MadMol. Basically, give MadMol a SMILES string such as CC(=O)CCl and it will tell you all you ever wanted to know about that molecule:

That there's a Primary_carbon. Isn't that a Alkylchloride? Wake up and smell the Ketone, cause that's what it is. Most people wouldn't realise this is a C_ONS_bond. It's a 1,3-Tautomerizable (or your money back). I don't believe it, it's a Rotatable_bond! Wake up and smell the CH-acidic, cause that's what it is.

phrases = ["I don't believe it, it's a %s!", "Isn't that a %s?", "It's a whadyamacallit, a %s.", "Looks like a %s to me.", "That there's a %s.", "Most people wouldn't realise this is a %s.", "It's a %s (or your money back).", "Wow, a %s. Last time I saw one of these, I hit the" "fire alarm and ran.", "Could be a %s...yes, I'm sure of it.", "It's a %s if I've ever seen one.", "Wake up and smell the %s, cause that's what it is.", "It's a %s. I wish I had one.", "You've hit the jackpot, you and your %s!", "A %s. You know, back in the day, we used to have" "fun with these.", "It takes me back years, this %s does."]

if __name__=="__main__":ifnot len(sys.argv)==2: sys.exit("You need a SMILES string like CC(=O)CCl") molecule = pybel.readstring("smi", sys.argv[1])print "So you want me to tell you about %s, do you?\n" % ( sys.argv[1],) patterns = readsmartsfile()print "".join([random.choice(phrases) % name for smarts, name in patterns if smarts.findall(molecule)])