rdkit 修改分子

一、引入所需庫

#! /usr/bin/python
# coding: utf-8
# rdkit 修改分子

from rdkit import Chem
from rdkit.Chem import Draw

二、增刪H原子

mol = Chem.MolFromSmiles('OC1C2C1CC2')
# 畫分子結構
Draw.MolToImageFile(
    mol,
    '/Users/zeoy/st/drug_development/st_rdcit/img/mol5.jpg'
)

分子結構圖:
分子結構圖

2.1 增加H原子函數解析

將氫添加到分子圖上

rdkit.Chem.rdmolops.AddHs(
    (Mol)mol   # 要修飾的分子
    [,(bool) explicitOnly = False # (可選)如果設置了此切換,則僅將顯式Hs添加到分子中。默認值爲0(添加隱式和顯式Hs)。
    [,(bool) addCoords = False # (可選) 如果設置了此開關,則Hs將設置3D座標。默認值爲0(無3D座標)。
    [,(AtomPairsParameters) onlyOnAtoms = None  # (可選)如果提供了此序列,則僅將這些原子視爲具有添加的Hs
    [,(bool)addResidueInfo = False # (可選)如果爲true,則將殘基信息添加到氫原子(對PDB文件有用)。
    ]]]]
)

2.2 增加H原子

注:3D構象優化的時候,需要採用顯式H原子

mol2 = Chem.AddHs(mol)
# 畫分子結構
Draw.MolToImageFile(
    mol2,
    '/Users/zeoy/st/drug_development/st_rdcit/img/mol6.jpg'
)
print('mol smiles:', Chem.MolToSmiles(mol))  # mol smiles: OC1C2CCC12
print('mol2 smiles:', Chem.MolToSmiles(mol2)) # mol2 smiles: [H]OC1([H])C2([H])C([H])([H])C([H])([H])C12[H]
print('num ATOMs in mol:', mol.GetNumAtoms()) # num ATOMs in mol: 6
print('num ATOMs in mol:', mol2.GetNumAtoms()) # num ATOMs in mol: 14

加氫後的分子結構圖:
加氫後的分子結構圖

2.3 刪除H原子函數解析

從分子圖中除去所有氫。

rdkit.Chem.rdmolops.RemoveHs(
    (Mol)mol  # 要修飾的分子
    [,(bool)implicitOnly = False # hiddenOnly :(可選)如果設置了此切換,則只會從圖中刪除隱式Hs。默認值爲0(刪除隱式和顯式Hs)。
    [,(bool)updateExplicitCount = False  #(可選)如果設置了此切換,則將更新具有Hs的原子的顯式H計數。默認值爲0(不更新顯式H計數)。
    [,(bool)sanitize = True  # (可選)如果設置了此切換開關,則去除Hs後將對分子進行消毒。缺省值爲1(進行消毒)。
    ] ] ])

筆記:
未與重原子連接的氫將不會被去除。這樣可防止分子[H] [H]除去所有原子。
標記的氫(例如原子序數= 1,但同位素> 1的原子)將不會被去除。
兩個座標Hs,例如C [H-] C中的中心H,將不會被刪除
連接到虛擬原子的Hs將不會被移除
屬於雙鍵立體化學定義的Hs將不會被移除
未連接到其他任何對象的HS將不會被刪除

2.4 刪除H原子

mol3 = Chem.RemoveHs(mol2)
print('mol3 smiles:', Chem.MolToSmiles(mol3))  # mol3 smiles: OC1C2CCC12
print('num ATOMs in mol3:', mol3.GetNumAtoms()) # num ATOMs in mol3: 6

三、芳香共軛鍵和庫裏單雙鍵

RDKit 默認把芳香體系的鍵的類型識別爲芳香鍵。

# 以苯爲例
mol4 = Chem.MolFromSmiles('c1ccccc1')
# 畫分子結構
Draw.MolToImageFile(
    mol4,
    '/Users/zeoy/st/drug_development/st_rdcit/img/mol7.jpg'
)

在這裏插入圖片描述
鍵類型

for bond in mol4.GetBonds():
    print(bond.GetBondType())
# AROMATIC
# AROMATIC
# AROMATIC
# AROMATIC
# AROMATIC
# AROMATIC

3.1 將芳香鍵的類型修改爲單雙建的類型

Chem.Kekulize(mol4)
# 畫分子結構
Draw.MolToImageFile(
    mol4,
    '/Users/zeoy/st/drug_development/st_rdcit/img/mol8.jpg'
)

在這裏插入圖片描述

for bond in mol4.GetBonds():
    print(bond.GetBondType())

# DOUBLE
# SINGLE
# DOUBLE
# SINGLE
# DOUBLE
# SINGLE

# bond 1 is aromatic True
print('bond 1 is aromatic', mol4.GetBondWithIdx(1).GetIsAromatic())
# atom 1 is aromatic True
print('atom 1 is aromatic', mol4.GetAtomWithIdx(1).GetIsAromatic())
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章