You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将SMILES表示的聚合物重复单元聚合成二聚体?求RDkit解决方案

用RDKit生成聚合物重复单元的二聚体SMILES

要将带*聚合位点的重复单元聚合成二聚体,核心逻辑是连接两个重复单元的中间聚合位点,同时保留二聚体两端的位点。以下是基于RDKit的具体实现方案:

实现步骤与代码

  1. 导入RDKit依赖库
from rdkit import Chem
  1. 定义重复单元并解析为分子对象
repeat_unit = "*CCC(C)C(*)C"
# 解析两个重复单元分子,保留代表聚合位点的Dummy原子(*)
mol_a = Chem.MolFromSmiles(repeat_unit)
mol_b = Chem.MolFromSmiles(repeat_unit)
  1. 定位聚合位点
    每个重复单元包含两个*位点,我们选取mol_a的右端位点和mol_b的左端位点进行连接:
# 筛选出分子中的Dummy原子(符号为*)
dummy_a = [atom for atom in mol_a.GetAtoms() if atom.GetSymbol() == '*']
dummy_b = [atom for atom in mol_b.GetAtoms() if atom.GetSymbol() == '*']

# 获取要连接的原子索引:mol_a的第二个Dummy(右端)、mol_b的第一个Dummy(左端)
connect_idx_a = dummy_a[1].GetIdx()
connect_idx_b = dummy_b[0].GetIdx()
  1. 合并分子并完成聚合连接
    通过编辑对象实现键的添加和冗余Dummy原子的删除:
# 合并两个分子
combined = Chem.CombineMols(mol_a, mol_b)
edit_mol = Chem.EditableMol(combined)

# 注意:mol_b的原子索引需要加上mol_a的原子总数偏移量
offset = mol_a.GetNumAtoms()
edit_mol.AddBond(connect_idx_a, connect_idx_b + offset, Chem.BondType.SINGLE)

# 删除用于连接的两个Dummy原子
edit_mol.RemoveAtom(connect_idx_b + offset)
edit_mol.RemoveAtom(connect_idx_a)

# 生成最终二聚体分子并输出SMILES
dimer = edit_mol.GetMol()
Chem.SanitizeMol(dimer)  # 清理分子结构,确保格式合法
dimer_smiles = Chem.MolToSmiles(dimer)
print(dimer_smiles)

关键说明

  • 运行后输出的SMILES会保留二聚体两端的*位点,符合聚合物片段的表示要求;
  • 若需要生成三聚体,只需重复上述逻辑,将二聚体与第三个重复单元进行连接即可;
  • 若Dummy原子的顺序不符合预期(比如左端和右端索引颠倒),可通过打印原子信息调整dummy_a和dummy_b的索引取值。

内容的提问来源于stack exchange,提问作者Blue

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 06:33:24