基于RDKit 获取分子指纹
分子指纹(化学指纹,Chemical Fingerprinting):
将化学分子的特征利用二进制表示,如MDL公司开发的MACCSkeys指纹。
MACCSkeys共有166个特征,但是MACCSkeys总长度为167bits。
第0位为占位符,第1~166位为分子特征位。
具体操作见下
from rdkit import Chem
from rdkit.Chem import MACCSkeys
molecule = Chem.MolFromSmiles('') # 当分子为空值时,fingerprints全为0
fingerprints = MACCSkeys.GenMACCSKeys(molecule)
print(fingerprints) # result 1
print(len(fingerprints.ToBitString())) # result 2
print(fingerprints.ToBitString()) # result 3
运行结果如下:
[1] result 1 :
<rdkit.DataStructs.cDataStructs.ExplicitBitVect object at 0x000001ECF1263F80>
[2] result 2 :
167
[3] result 3 :
00000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000
我们再以3-戊酮为例:
from rdkit import Chem
from rdkit.Chem import MACCSkeys
molecule = Chem.MolFromSmiles('CCC(=O)CC') # 3-戊酮
fingerprints = MACCSkeys.GenMACCSKeys(molecule)
print(fingerprints) # result 1
print(len(fingerprints.ToBitString())) # result 2
print(fingerprints.ToBitString()) # result 3
运行结果如下:
[1] result 1 :
<rdkit.DataStructs.cDataStructs.ExplicitBitVect object at 0x000001ECF1249490>
[2] result 2 :
167
[3] result 3 :
000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000
10100000000000000010000000000000000100101100001000100
除了第1位,后面2~167位:每个0和1的具体含义我的个人理解如下:
如有不正确之处,还请批评指正!
那么我们先看一下MACCSkeys166个特征具体是什么:
下为个人理解,非严谨翻译,需要后续更新请留言或私信
001 ISOTOPE # 存在同分异构体
002 103 < ATOMIC NO. < 256 # 存在原子序号在103~256之间的元素
003 GROUP IVA,VA,VIA PERIODS 4-6 (Ge...) # 存在第IVA,VA,VIA族的元素
004 ACTINIDE # 存在锕系元素
005 GROUP IIIB,IVB (Sc...) # 存在第IIIB,IVB族的元素
006 LANTHANIDE # 存在镧系元素
007 GROUP VB,VIB,VIIB (V...) # 存在第VB,VIB,VIIB族的元素
008 QAAA@1
009 GROUP VIII (Fe...)
010 GROUP IIA (ALKALINE EARTH)
011 4M RING # 存在4员环
012 GROUP IB,IIB (Cu...) # 存在第IB,IIB族的元素
013 ON(C)C
014 S-S # 存在二硫键
015 OC(O)O # 存在碳酸根
016 QAA@1
017 CTC
018 GROUP IIIA (B...) # 存在第IIIA族的元素
019 7M RING # 存在7员环
020 SI # 存在硅元素
021 C=C(Q)Q
022 3M RING # 存在3员环
023 NC(O)O
024 N-O # 存在N-O键
025 NC(N)N
026 C$=C($A)$A
027 I
028 QCH2Q
029 P
030 CQ(C)(C)A
031 QX
032 CSN
033 NS
034 CH2=A
035 GROUP IA (ALKALI METAL)
036 S HETEROCYCLE
037 NC(O)N
038 NC(C)N
039 OS(O)O
040 S-O
041 CTN
042 F
043 QHAQH
044 OTHER
045 C=CN
046 BR
047 SAN
048 OQ(O)O
049 CHARGE
050 C=C(C)C
051 CSO
052 NN
053 QHAAAQH
054 QHAAQH
055 OSO
056 ON(O)C
057 O HETEROCYCLE
058 QSQ
059 Snot%A%A
060 S=O
061 AS(A)A
062 A$A!A$A
063 N=O
064 A$A!S
065 C%N
066 CC(C)(C)A
067 QS
068 QHQH (&...)
069 QQH
070 QNQ
071 NO
072 OAAO
073 S=A
074 CH3ACH3
075 A!N$A
076 C=C(A)A
077 NAN
078 C=N
079 NAAN
080 NAAAN
081 SA(A)A
082 ACH2QH
083 QAAAA@1
084 NH2
085 CN(C)C
086 CH2QCH2
087 X!A$A
088 S
089 OAAAO
090 QHAACH2A
091 QHAAACH2A
092 OC(N)C
093 QCH3
094 QN
095 NAAO
096 5M RING # 存在5员环
097 NAAAO
098 QAAAAA@1
099 C=C
100 ACH2N
101 8M RING # 存在8员环
102 QO
103 CL
104 QHACH2A
105 A$A($A)$A
106 QA(Q)Q
107 XA(A)A
108 CH3AAACH2A
109 ACH2O
110 NCO
111 NACH2A
112 AA(A)(A)A
113 Onot%A%A
114 CH3CH2A
115 CH3ACH2A
116 CH3AACH2A
117 NAO
118 ACH2CH2A > 1
119 N=A
120 HETEROCYCLIC ATOM > 1 (&...)
121 N HETEROCYCLE
122 AN(A)A
123 OCO # 二氧化碳
124 QQ
125 AROMATIC RING > 1
126 A!O!A
127 A$A!O > 1 (&...)
128 ACH2AAACH2A
129 ACH2AACH2A
130 QQ > 1 (&...)
131 QH > 1
132 OACH2A
133 A$A!N
134 X (HALOGEN)
135 Nnot%A%A
136 O=A > 1
137 HETEROCYCLE
138 QCH2A > 1 (&...)
139 OH # 存在羟基
140 O > 3 (&...) # 氧元素数量大于3
141 CH3 > 2 (&...) #甲基数量大于2
142 N > 1 # 氮元素数量大于1
143 A$A!O
144 Anot%A%Anot%A
145 6M RING > 1 # 6员环数量大于2
146 O > 2 # 氧元素数量大于2
147 ACH2CH2A
148 AQ(A)A
149 CH3 > 1 # 甲基数量大于1
150 A!A$A!A
151 NH # 存在N-H单键(非三级胺)
152 OC(C)C
153 QCH2A
154 C=O # 存在C-O双键(羰基)
155 A!CH2!A
156 NA(A)A
157 C-O # 存在C-O单键
158 C-N # 存在C-N单键
159 O > 1 # 氧元素数量大于1
160 CH3 # 存在甲基
161 N # 存在N元素
162 AROMATIC # 存在芳香族
163 6M RING # 存在6员环
164 O # 存在氧元素
165 RING # 存在环
166 FRAGMENTS # 非标准的SMARTS格式
参考链接:http://www.mayachemtools.org/docs/modules/html/MACCSKeys.html