一、引入所需庫
#! /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())