化学结构 SMILES 和 SDF 格式

from rdkit import Chem
from rdkit.Chem import AllChem

# 定义氨基酸的SMILES字符串
amino_acids = {
    "焦谷氨酸": "C(C(=O)O)N1C(=O)C(N1)C(=O)O",
    "氨基 (吡咯) 乙酸": "C(C(=O)O)C(N)C1=CC=CC=N1",
    "1,4-二氨基丁酸": "C(C(C(=O)O)N)NCC",
    "4-脯氨酸丙氨酸": "C(C(=O)O)C(=C)C(C(=O)O)N",
    "2,5-二甲基氨基酸": "C(C(=O)O)C(C)C(C)C(=O)N",
    "艾丁基甘氨酸": "C(C(=O)O)C(N)C1=CN=C(C1)C(=O)O",
    "新色氨酸": "C(C(=O)NCC1=CC2=C(C=C1)C=CN2)C(=O)O",
    "环已基甘氨酸": "C1(CCCCC1)C(=O)N"
}

# 生成分子并转换为SDF格式
for name, smiles in amino_acids.items():
    mol = Chem.MolFromSmiles(smiles)
    if mol:
        # 添加氢原子
        mol = Chem.AddHs(mol)
        # 优化分子
        AllChem.EmbedMolecule(mol)
        AllChem.UFFOptimizeMolecule(mol)

        # 导出为SDF格式
        sdf = Chem.MolToMolBlock(mol)
        with open(f"{name}.sdf", "w") as file:
            file.write(sdf)

        # 输出SMILES格式
        print(f"{name} SMILES: {smiles}")

print("分子生成成功并已保存为SDF格式。")

焦谷氨酸 SMILES: C(C(=O)O)N1C(=O)C(N1)C(=O)O
氨基 (吡咯) 乙酸 SMILES: C(C(=O)O)C(N)C1=CC=CC=N1
1,4-二氨基丁酸 SMILES: C(C(C(=O)O)N)NCC
4-脯氨酸丙氨酸 SMILES: C(C(=O)O)C(=C)C(C(=O)O)N
2,5-二甲基氨基酸 SMILES: C(C(=O)O)C(C)C(C)C(=O)N
艾丁基甘氨酸 SMILES: C(C(=O)O)C(N)C1=CN=C(C1)C(=O)O
新色氨酸 SMILES: C(C(=O)NCC1=CC2=C(C=C1)C=CN2)C(=O)O
环已基甘氨酸 SMILES: C1(CCCCC1)C(=O)N
分子生成成功并已保存为SDF格式。

以下是提取的化学分子信息及其对应 SMILES 结构的表格:

名称 缩写 SMILES 结构
焦谷氨酸 pyroGlu O=C1CCC(N1)C(=O)O
氨基(哌嗪基)乙酸 Gly(PipAm) NCC(=O)N1CCNCC1
1,4-二氨基丁酸 Dab NCCCC(N)C(=O)O
4-胍基苯丙氨酸 Phe(4-Gu) NC(CC1=CC=C(C=C1)C(NC(=NH)NH2)C(=O)O
2,5-二甲基酪氨酸 Dmt CC1CC(C(C1)O)C(=O)N
异丁基甘氨酸 Tle CC(C)C(N)C(=O)O
新色氨酸 neo-Trp CC(C(=O)O)N1CCC(CC1)C(=O)O

这个表格包含了名称、缩写和对应的 SMILES 结构。你可以使用这些 SMILES 结构来生成分子模型或进一步分析分子性质。

from rdkit import Chem
from rdkit.Chem import Draw

# SMILES
# 定义: SMILES是一种简化的化学结构输入系统,用于以一行文本表示分子的结构。
# 结构: SMILES字符串通过字符表示原子、键和分子的连接关系,支持环、支链等复杂结构。

# 思路:
# 用多模态大模型(即提取图片文字)提取 pdf 中氨基酸的名称,然后再通过大模型或者其他方式将名称转为
# SMILES 格式,然后再通过 rdkit 库画图
# 焦谷氨酸 
pyroGlu_smiles = 'O=C1CCC(N1)C(=O)O'  # 替换为你的SMILES字符串
mol = Chem.MolFromSmiles(pyroGlu_smiles)
img = Draw.MolToImage(mol)
img.show()

为者常成,行者常至