Skip to content

Instantly share code, notes, and snippets.

@jhjensen2
Last active January 13, 2018 12:39
Show Gist options
  • Save jhjensen2/a3a29f1e0dd6eaceef56b33ae8d6aa3f to your computer and use it in GitHub Desktop.
Save jhjensen2/a3a29f1e0dd6eaceef56b33ae8d6aa3f to your computer and use it in GitHub Desktop.
from rdkit import Chem
import itertools
atoms = ["C","N","O","F","Si","P","S","Cl","Br","I"]
bonds = ["","=","#"]
raw_smiles = []
mols = []
smiles_list = []
atom_pairs = list(itertools.product(atoms, repeat=2))
for a,b in atom_pairs:
for x in bonds:
raw_smiles.append(a+x+b)
atom_triples = list(itertools.product(atoms, repeat=3))
bond_pairs = list(itertools.product(bonds, repeat=2))
for a,b,c in atom_triples:
for x,y in bond_pairs:
raw_smiles.append(a+x+b+y+c)
atom_quads = list(itertools.product(atoms, repeat=4))
bond_triples = list(itertools.product(bonds, repeat=3))
for a,b,c,d in atom_quads:
for x,y,z in bond_triples:
raw_smiles.append(a+x+b+"("+y+c+")"+z+d)
atom_pents = list(itertools.product(atoms, repeat=5))
bond_quads = list(itertools.product(bonds, repeat=4))
for a,b,c,d,e in atom_pents:
for x,y,z,zz in bond_quads:
raw_smiles.append(a+x+b+"("+y+c+")"+"("+z+d+")"+zz+e)
for smiles in raw_smiles:
try:
mol = Chem.MolFromSmiles(smiles)
except:
continue
if mol != None:
smiles = Chem.MolToSmiles(Chem.MolFromSmiles(smiles))
if smiles not in smiles_list:
smiles_list.append(smiles)
mols.append(mol)
print len(mols)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment