文章目錄
- 一、引入所需庫
- 二、芳香性
- 三、 配位鍵
- 四、閉環
- 五、通過atomic number 指定原子
- 六、ChemAxon SMILES 拓展 CXSMILES extensions
- 七、使用坐标和異構SMILES從molfile中識别手性中心
rdkit涵蓋了Daylight SMILES所有的标準功能以及一些有用的擴充,下面是擴充的部分内容
一、引入所需庫
#! /usr/bin/python
# coding: utf-8
import os
from rdkit import Chem
from rdkit.Chem import Draw
二、芳香性
和氧同族的Te(碲 , 拼音 : dì , 原子序數52 , 是銀白色的類金屬 ) 元素也可能具有芳香性 , 當其連接配接2個芳香原子時 , 它貢獻2個pi電子 。
m = Chem.MolFromSmiles('OC(=O)c1[te]ccc1')
Draw.MolToImageFile(
m,
'/Users/zeoy/st/drug_development/st_rdcit/img/mol48.jpg',
legend='tellurophene-2-carboxylic acid'
)
# 碲吩-2甲酸分子
# Te原子的編号是4,下面檢查其芳香性
aromatic_atom4 = m.GetAtomWithIdx(4).GetIsAromatic()
print('atom4 is aromatic', aromatic_atom4) # atom4 is aromatic True
三、 配位鍵
rdkit通過 -> 和 < -來支援配位鍵表示 , 箭頭的方向非常重要 , 代表了誰提供電子
配位鍵不會影響起始原子的價态 , 隻會影響指向原子的價态
cu_mol = Chem.MolFromSmiles('[Cu](Cl)Cl')
bipy = Chem.MolFromSmiles('C1(C2=NC=CC=C2)=CC=CC=N1')
bipycu = Chem.MolFromSmiles('c1cccn->2c1-c1n->3cccc1.[Cu]23(Cl)Cl')
mols = [cu_mol, bipy, bipycu]
img = Draw.MolsToGridImage(
mols,
molsPerRow=3,
subImgSize=(400, 400),
legends=['CuCl2', 'bipy', 'bipycu']
)
img.save(
'/Users/zeoy/st/drug_development/st_rdcit/img/mol49.jpg'
)
# 擷取Cu原子
cu_atom = cu_mol.GetAtoms()[0]
# Cu原子在分子中的價位
cu_valence = cu_atom.GetExplicitValence()
print('Cu atom valence in the first molecule', cu_valence)
# Cu atom valence in the first molecule 2
n_atom = bipy.GetAtoms()[2]
n_valence = n_atom.GetExplicitValence()
print('N atom valence in the second molecule', n_valence)
# N atom valence in the second molecule 3
n_atom = bipycu.GetAtoms()[4]
n_valence = n_atom.GetExplicitValence()
print('N atom valence in the third molecule', n_valence)
# N atom valence in the third molecule 3
cu_atom = bipycu.GetAtoms()[12]
cu_valence = cu_atom.GetExplicitValence()
print('Cu atom valence in the third molecule', cu_valence)
# Cu atom valence in the third molecule 4
有上述的資料我們看到,在配位後Cu的價态由二價變為四價,N的價态不變 還是三價。
四、閉環
rdkit除了支援[atom]n的方式表示閉環外,還支援 %(n)的表示方法。N的方位是0-99999;n可以不從0開始,可以是任意數字。
mol1 = Chem.MolFromSmiles('C%(1000)OC%(1000)')
mol2 = Chem.MolFromSmiles('C2OC2')
mol3 = Chem.MolFromSmiles('C1OC1')
Draw.MolToImageFile(
mol1,
'/Users/zeoy/st/drug_development/st_rdcit/img/mol50.jpg',
legend='Propylene Oxide'
)
環氧丙烷
五、通過atomic number 指定原子
rdkit 除了直接指定原子symbol也支援通過atomic number來指定原子[atomic number]。 atomic number 預設是在SMARTS中使用的,Smiles 也支援這種形式。
mol1 = Chem.MolFromSmiles(‘C1OC1’)
mol2 = Chem.MolFromSmiles(’[#6]1[#8][#6]1’)
六、ChemAxon SMILES 拓展 CXSMILES extensions
RDKit 支援部分ChemAxon 拓展的SMILES 文法功能。
1.atomic coordinates 原子坐标
2.atomic values 原子值
3.atomic labels 原子标簽
4.atomic properties 原子性質
5.coordinate bonds(these are translated into double bonds)
6.radicals
7.enhanced stereo(these are converted into StereoGroups)
rdkit.Chem.rdmolfiles.MolToCXSmiles>
_ 導出ChemAxon 格式的SMILES. 前6個性質可通過方法
rdkit.Chem.rdmolfiles.MolToCXSmiles() < https: // www.rdkit.org/docs/source/rdkit.Chem.rdmolfiles.html
m = Chem.MolFromSmiles('OC')
m.GetAtomWithIdx(0).SetProp('p1', '2')
m.GetAtomWithIdx(1).SetProp('p1', '5')
m.GetAtomWithIdx(1).SetProp('p2', 'A1')
m.GetAtomWithIdx(0).SetProp('atomLabel', 'O1')
m.GetAtomWithIdx(1).SetProp('atomLabel', 'C2')
sm = Chem.MolToCXSmiles(m)
print(sm) # CO |$C2;O1$,atomProp:0.p1.5:0.p2.A1:1.p1.2|
七、使用坐标和異構SMILES從molfile中識别手性中心
mol = Chem.MolFromMolBlock("""
RDKit 2D
6 5 0 0 0 0 0 0 0 0999 V2000
0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.2990 0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.2990 2.2500 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
2.5981 -0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
2.5981 -1.5000 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
3.8971 0.7500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
2 1 1 6
2 3 1 0
2 4 1 0
4 5 2 0
4 6 1 0
M END""")
Draw.MolToImageFile(
mol,
'/Users/zeoy/st/drug_development/st_rdcit/img/mol51.jpg',
legend='L-alanin'
)
L-丙氨酸
# 根據結構指定原子手性标記
Chem.AssignAtomChiralTagsFromStructure(mol)
# 找到分子的手性中心
chiral_center = Chem.FindMolChiralCenters(mol)
print(chiral_center) # [(1, 'S')]
# 在smiles中也有該性質
sm = Chem.MolToSmiles(mol)
print(sm) # C[[email protected]](N)C(=O)O
m2 = Chem.MolFromSmiles(sm)
Chem.AssignAtomChiralTagsFromStructure(m2)
chiral_center = Chem.FindMolChiralCenters(m2)
print(chiral_center) # [(1, 'S')]
# 當以非異構體的形式輸出讀取時,因為分子不在有構象是以手性資訊會丢失
m3 = Chem.MolToSmiles(mol, isomericSmiles=False)
print(m3) # CC(N)C(=O)O
m4 = Chem.MolFromSmiles(m3)
Chem.AssignAtomChiralTagsFromStructure(m4)
chiral_center = Chem.FindMolChiralCenters(m4)
print(chiral_center) # []