I can't comment on spreadsheet-like tools.
But I'm frequently using Open Babel, which is free (as in free speech and free beer).
If you're not so much into using command-line tools or using programmes via their bindings to programming languages, a GUI for Open Babel is available too, but I've never used it.
Generates 2D structure for the entered compounds (based on name or SMILES)
Names might be tough in general, but SMILES (Simplified Molecular Input Line Entry System) can be processed with Open Babel when the identifier is read from a file. Output to large number of chemical formats and image formats is possible.
obabel -ismi stuff.smi -omol -O stuff.mol
would convert a SMILES string to a mol file.
Converting a collection of SMILES to MOL and writing them to a SDF file is not a big thing:
#!/usr/bin/env python
import os
import pybel
# dictionary of SMILES taken from chemspider.com
insecticides = {
'parathion' : 'CCOP(=S)(OCC)OC1=CC=C(C=C1)[N+](=O)[O-]',
'disulfaton' : 'CCOP(=S)(OCC)SCCSCC',
'permethrin' : 'C1(C(C1C(=O)OCC2=CC(=CC=C2)OC3=CC=CC=C3)C=C(Cl)Cl)C',
'furathiocarb' : 'CCCCOC(=O)N(C)SN(C)C(=O)OC1=CC=CC2=C1OC(C2)(C)C',
'methomyl' : 'CC(=NOC(=O)NC)SC'
}
# write dict items to multi-component SDF file
outdir = '/home/klaus/workspace/chemistry/stackexchange/similarity/'
outname = 'insecticides.sdf'
outpath = os.path.join(outdir, outname)
outfmt = 'sdf'
datafile = pybel.Outputfile(outfmt, outpath, overwrite = True)
for name, smiles in insecticides.iteritems():
mol = pybel.readstring('smi', smiles)
mol.title = name
datafile.write(mol)
datafile.close()
EDIT
Easy to search and create customized reports (such as similarity search)
For the substructure search, I used the Drug-likeness NCI subset from ligand.info. The unpacked SDF file (445.2 MB) has 193,323 entries on 14,757,262 lines (wc -l
).
From the SDF file, I first generated a binary fastsearch file using
obabel data.sdf -ofs -O data.fs
Searches are based on SMILES and SMARTS patterns.
I thought that 2-aminobenzothiazole might be an interesting fragment to search for and with a bit of fiddling, I wrote the suitable SMARTS pattern: c12ccccc1nc(N)s2
If in doubt about the correct representation, it is always a good idea to convert the pattern to an image file here: obabel -:"c12ccccc1nc(N)s2" -opng -O pattern.png
.
The search was performed using:
obabel -ifs data.fs -s"c12ccccc1nc(N)s2" -osvg -O results.svg -xd -xc5 -xA -xC
and generated a SVG table with 233 entries.