计算化学公社

标题: 一个输入SMILES获取分子pdb文件的小工具 [打印本页]

作者
Author:
TerminSong    时间: 2025-3-4 15:34
标题: 一个输入SMILES获取分子pdb文件的小工具
本帖最后由 TerminSong 于 2025-3-5 15:35 编辑

萌新报道,本身是个毫无技术含量的工具,要说哪里困难可能也就是研究怎么把RDKit静态连接到MFC程序里花了我一天(笑

初学lammps开发,去年完成了一个不大不小的后处理项目,现在正在找未来的科研课题,欢迎讨论与合作 (, 下载次数 Times of downloads: 54)

(, 下载次数 Times of downloads: 44)





作者
Author:
rugals    时间: 2025-3-4 17:17

作者
Author:
liuyuje714    时间: 2025-3-5 10:34
你这个编译好的缺少boost的动态库,别人一般用不了。
作者
Author:
TerminSong    时间: 2025-3-5 15:36
liuyuje714 发表于 2025-3-5 10:34
你这个编译好的缺少boost的动态库,别人一般用不了。

我去 ,还真是,打包的时候把freetype放进去了忘了吧boost的库放进去,手滑多点了一下
已经更新了打包,把boost的dll依赖加进去了
作者
Author:
wal    时间: 2025-3-5 15:44
静态链接怎么搞啊XD 我想把我写的一个python脚本转成C++的 结果卡在openbabel库上 是要先手动编译一遍对应库吗
作者
Author:
TerminSong    时间: 2025-3-5 16:26
wal 发表于 2025-3-5 15:44
静态链接怎么搞啊XD 我想把我写的一个python脚本转成C++的 结果卡在openbabel库上 是要先手动编译一遍对应 ...

我是从头自己按需编译了RDkit,编译出来的静态库再丢给连接器,但是boost我用的导入库是官方发布的二进制windows版本,windows下的话你找找openbable(我没用过这个)目录下面有没有lib之类的文件夹,进去看看有没有.lib文件,一股脑都丢给连接器让它自己挑就可以了。
作者
Author:
Daniel_Arndt    时间: 2025-4-1 10:36
我以前用过RDKit中的ETKDGv3功能( https://www.rdkit.org/docs/source/rdkit.Chem.rdDistGeom.html )。这是当时写的从SMILES字符串生成xyz文件的代码,博君一笑。ETKDGv3是自RDKit 2020.03版本引入的。自RDKit 2024.03开始,ETKDGv3成为RDKit中生成构象的默认功能。

  1. '''
  2. This script generates xyz files from a SMILES string. This script requires
  3. RDKit which should be at least version 2020.03. Cite the following paper
  4. if you use this script in any published work.
  5. S. Wang, J. Witek, G. A. Landrum, S. Riniker, J. Chem. Inf. Model. 2020, 60(4), 2044–2058

  6. Generate one conformer for a molecule with the following command:
  7.   python smiles2xyz.py -s "CC(CC1=CC=CC=C1)[N+]2=NOC(=C2)/N=C(/NC3=CC=CC=C3)\[O-]" -c mesocarb
  8. Generate ten conformers for a molecule with the following command:
  9.   python smiles2xyz.py -s "CC(CC1=CC=CC=C1)[N+]2=NOC(=C2)/N=C(/NC3=CC=CC=C3)\[O-]" -c mesocarb -n 10
  10. '''

  11. import sys
  12. import argparse
  13. from rdkit import Chem
  14. from rdkit.Chem import AllChem

  15. def write_xyz_file(fragment, fragment_name):
  16.     number_of_atoms = fragment.GetNumAtoms()
  17.     symbols = [a.GetSymbol() for a in fragment.GetAtoms()]
  18.     fNames = []
  19.     for i,conf in enumerate(fragment.GetConformers()):
  20.         file_name = fragment_name+"_"+str(i)+".xyz"
  21.         fNames.append(file_name)
  22.         with open(file_name, "w") as file:
  23.             file.write(str(number_of_atoms)+"\n")
  24.             file.write("\n")
  25.             for atom,symbol in enumerate(symbols):
  26.                 p = conf.GetAtomPosition(atom)
  27.                 line = " ".join((symbol,str(p.x),str(p.y),str(p.z),"\n"))
  28.                 file.write(line)
  29.     return fNames

  30. parser = argparse.ArgumentParser(usage=__doc__)
  31. parser.add_argument('--string', '-s', required=True, type=str, help='SMILES string')
  32. parser.add_argument('--compound', '-c', required=True, type=str, help='Compound name, which will be used as the prefix for xyz file')
  33. parser.add_argument('--number', '-n', default=argparse.SUPPRESS, type=int, help='Number of conformers for a compound')
  34. args = parser.parse_args()

  35. mol = Chem.MolFromSmiles(args.string)
  36. mol_h = Chem.AddHs(mol)

  37. params = Chem.rdDistGeom.srETKDGv3()
  38. params.randomSeed = 0xf00d
  39. params.clearConfs = True
  40. if 'number' in args:
  41.     if args.number > 0:
  42.         number_of_conformers = args.number
  43.     else:
  44.         print("The argument for number of conformers in the input cannot be used.")
  45.         sys.exit(1)
  46. else:
  47.     number_of_conformers = 1
  48. cids = AllChem.EmbedMultipleConfs(mol_h, number_of_conformers, params)
  49. fn = write_xyz_file(mol_h, args.compound)
复制代码







欢迎光临 计算化学公社 (http://ccc.keinsci.com/) Powered by Discuz! X3.3