如何从化合物的SMILES字符串获取化合物的3D结构?以下几种方法供参考:
1,借助pubchem的py查询接口进行查询
首先需要安装pubchempy(conda install pubchempy)
sdf = pubchempy.get_sdf(canonical_smi,'smiles')
if(sdf != None):
cid = sdf.split('\n')[0]
if canonical_smi in smiles:
if cid != smiles[canonical_smi]:
print("Waining: different cids(%s,%s) for smiles:%s; ori_smiles:%s" %(cid, smiles[canonical_smi],canonical_smi,l))
else:
continue
#pubchempy.download("SDF",output_base + canonical_smi + '.sdf',canonical_smi,"smiles")
#pubchempy.download("SDF",out,canonical_smi,"smiles")
pubchempy.download("SDF",output_base + cid + '.sdf',sdf,"sdf")
smiles[canonical_smi] = cid
else:
not_found.add(l)
然后通过 get_sdf函数,获取当前SMILES的sdf结构,通过download函数,下载sdf文件
2,通过openbabel 查询
首先安装openbabel,然后通过以下命令进行查询
obabel -i smi "ccccc" -o mol2 --gen3D
3,通过pybel进行查询
首先通过conda安装openbabel,然后通过make3D或者localopt函数进行生成化合物的3D结构即可,最后通过write函数写入到文件
from openbabel import pybel
mol = pybel.readstring("smi", e)
#mol.make3D()
mol.localopt()
mol.write("mol2","./generateMol2/" + fname + ".mol2", True)