皂苷和氨基酸反应项目

 1.皂苷和多肽成功反应的代码

我的这个项目比较特殊,因为我甾环上的羟基并不能被成功识别,因为不是常规意识上的碱。所以我的解放方案,是间接通过多肽和氨基酸取代的方法实现的皂苷和多肽反应的代码

#########################################
#这是最终调试成功的我的皂苷和氨基酸调试的代码
#########################################
from rdkit import Chem
from rdkit.Chem import AllChem
import os

# 皂苷分子结构定义
smiles_saponin = "C[C@]12CC[C@@H](C([C@@H]1CC[C@@]3([C@@H]2CC=C4[C@]3(CC[C@@]5([C@H]4CC(CC5)(C)C)C(=O)O)C)C)(C)C)O"
mol_a = Chem.MolFromSmiles(smiles_saponin)


def save_product(mol, base_name, group_idx, prod_idx, output_dir):
    """保存单个产物到SDF文件"""
    try:
        AllChem.Compute2DCoords(mol)
        filename = f"{base_name}_group{group_idx}_prod{prod_idx}.sdf"
        output_path = os.path.join(output_dir, filename)
        writer = Chem.SDWriter(output_path)
        writer.write(mol)
        writer.close()
        print(f"    已保存产物到: {output_path}")  # 显示完整路径
    except Exception as e:
        print(f"    保存失败: {str(e)}")


def process_sdf_folder(input_folder, output_folder):
    """处理SDF文件并保存产物到指定路径"""
    # 创建输出目录(包括中间目录)
    os.makedirs(output_folder, exist_ok=True)

    sdf_files = [f for f in os.listdir(input_folder) if f.endswith(".sdf")]

    for sdf_file in sdf_files:
        input_path = os.path.join(input_folder, sdf_file)
        print(f"\n正在处理文件: {input_path}")

        supplier = Chem.SDMolSupplier(input_path)
        mol_b = supplier[0] if supplier else None

        if not mol_b:
            print(f"警告:{sdf_file} 未找到有效分子,已跳过")
            continue

        reaction_smarts = "[C:1][OH:2].[C:3](=[O:4])[OH:5]>>[C:1][O:2][C:3](=[O:4])"
        rxn = AllChem.ReactionFromSmarts(reaction_smarts)
        products = rxn.RunReactants((mol_a, mol_b))

        if products:
            print(f"发现 {len(products)} 组产物")
            base_name = os.path.splitext(sdf_file)[0]

            for group_idx, prod_group in enumerate(products, 1):
                print(f"  第{group_idx}组产物:")

                for prod_idx, mol in enumerate(prod_group, 1):
                    print(f"    产物{prod_idx}: {Chem.MolToSmiles(mol)}")
                    save_product(mol, base_name, group_idx, prod_idx, output_folder)
        else:
            print(f"未生成产物,请检查反应条件")


if __name__ == "__main__":
    # 用户自定义路径
    input_folder = "E:/AIDDproject/Pycharm/rdkit/chemical_reaction/amino/"  # 输入目录
    output_folder = "E:/AIDDproject/Pycharm/rdkit/chemical_reaction/djjproducts"  # 输出目录(可任意指定)

    if os.path.exists(input_folder):
        process_sdf_folder(input_folder, output_folder)
        print(f"\n处理完成!产物保存在: {os.path.abspath(output_folder)}")
    else:
        print(f"错误:输入路径 {input_folder} 不存在")

下面是调试代码

单个皂苷和单个氨基酸调试成功的代码

#####          单个皂苷和单个氨基酸调试成功的代码
##############
from rdkit import Chem
from rdkit.Chem import AllChem

# 分子结构定义
smiles_saponin = "C[C@]12CC[C@@H](C([C@@H]1CC[C@@]3([C@@H]2CC=C4[C@]3(CC[C@@]5([C@H]4CC(CC5)(C)C)C(=O)O)C)C)(C)C)O"
smiles_arginine = "C(CC(C(=O)O)N)CN=C(N)N"  # 精氨酸含羧酸基团

# 加载分子
mol_a = Chem.MolFromSmiles(smiles_saponin)
mol_b = Chem.MolFromSmiles(smiles_arginine)

# 更新反应规则:羟基与羧酸缩合
# 模式解释:皂苷羟基[C:1]-[OH:2] + 精氨酸羧酸[C:3]-[OH:4] → 形成酯键[C:1]-O-[C:3]
reaction_smarts = "[C:1][OH:2].[C:3](=[O:4])[OH:5]>>[C:1][O:2][C:3](=[O:4])"
rxn = AllChem.ReactionFromSmarts(reaction_smarts)

# 执行反应
products = rxn.RunReactants((mol_a, mol_b))

# 结果输出
if products:
    print("成功生成酯化产物:")
    for i, prod in enumerate(products[0]):
        print(f"产物{i+1}: {Chem.MolToSmiles(prod)}")
else:
    print("提示:请确认羟基位点是否匹配,或尝试调整反应模式")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DJ.马

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值