add
This commit is contained in:
57
script/optimize_sdf.py
Normal file
57
script/optimize_sdf.py
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- encoding: utf-8 -*-
|
||||||
|
'''
|
||||||
|
@file :optimize_sdf.py
|
||||||
|
@Description: : 使用rdkit 将2d转3d,增加基本的坐标优化功能
|
||||||
|
@Date :2024/09/07 09:34:41
|
||||||
|
@Author :lyzeng
|
||||||
|
@Email :pylyzeng@gmail.com
|
||||||
|
@version :1.0
|
||||||
|
'''
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
import os
|
||||||
|
import click
|
||||||
|
from rdkit import Chem
|
||||||
|
from rdkit.Chem import AllChem
|
||||||
|
|
||||||
|
def generate_3d_coordinates(input_sdf: str, output_sdf: str):
|
||||||
|
# 读取SDF文件
|
||||||
|
suppl = Chem.SDMolSupplier(input_sdf)
|
||||||
|
writer = Chem.SDWriter(output_sdf)
|
||||||
|
|
||||||
|
for mol in suppl:
|
||||||
|
if mol is None:
|
||||||
|
continue
|
||||||
|
|
||||||
|
# 生成3D坐标
|
||||||
|
mol = Chem.AddHs(mol) # 添加氢原子
|
||||||
|
if AllChem.EmbedMolecule(mol) == 0: # 生成3D坐标
|
||||||
|
AllChem.UFFOptimizeMolecule(mol) # 优化分子结构
|
||||||
|
writer.write(mol) # 将分子写入输出文件
|
||||||
|
|
||||||
|
writer.close()
|
||||||
|
|
||||||
|
@click.command()
|
||||||
|
@click.argument('input_sdf', type=click.File('r'))
|
||||||
|
@click.option('--output_dir', type=click.Path(), default='.', help='输出目录,默认为当前目录')
|
||||||
|
def optimize_sdf(input_sdf, output_dir):
|
||||||
|
"""优化输入SDF文件中的3D坐标并输出到指定目录"""
|
||||||
|
# 获取输入文件名并构造输出文件路径
|
||||||
|
input_filename = os.path.basename(input_sdf.name)
|
||||||
|
output_sdf = os.path.join(output_dir, f"optimized_{input_filename}")
|
||||||
|
|
||||||
|
# 创建输出目录(如果不存在)
|
||||||
|
os.makedirs(output_dir, exist_ok=True)
|
||||||
|
|
||||||
|
# 生成3D结构并保存
|
||||||
|
generate_3d_coordinates(input_sdf.name, output_sdf)
|
||||||
|
|
||||||
|
click.echo(f"优化的SDF文件已保存到: {output_sdf}")
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
optimize_sdf()
|
||||||
|
|
||||||
|
# python optimize_sdf.py /mnt/c/project/pymol/data/Structure2D_COMPOUND_CID_5280440.sdf --output_dir /mnt/c/project/pymol/data/output
|
||||||
|
# python optimize_sdf.py --help
|
||||||
Reference in New Issue
Block a user