分子描述符是确定分子性质的指标。
本文想看看描述分子特性中侧重于“ 化合物芳香度 ”的描述符。随着交叉偶联反应的发展,将芳环引入分子变得更加容易。另一方面,已知具有多个芳环的化合物的物理性质不是非常良好。因此,从数字上把握化合物的芳香度是药物发现化学研究中的有用指南。
已经提出了各种描述符:
- 表示芳香度的描述符的定义和性质
- 如何使用RDKit计算
芳香指标:Ar / HA,AP
引入芳香指数作为代表“化合物芳香度”的值
芳香指数=芳香原子数(AP)/ 原子总数(HA)
HA是重原子
芳香比:ARR
几乎等同于Ar / HA的描述符是芳族比(ARR)
芳族比率=分子中芳族键的数目 / 键总数(不包括涉及氢的键)
该描述符着重于键的数量,而不是诸如Ar / HA的原子数。
芳香环数:NAR,AROM
芳环的数目也是经常用来表示芳族性的分子描述符:
- 苯有一个环
- 2萘
- 三蒽
每个稠密的环结构被计为环数。
随着芳环数目的增加,脂肪溶解度通常趋于改善。但是,由于报告的化合物,其中所述的CLogP常数的化合物在水中的溶解度产生不利影响,在还没有这样数目的芳族环认为芳香环的数目有一些无关效果和亲脂性看起来不错。
脂肪族指数:Fsp3
由于芳族化合物和脂族化合物在正面和背面之间具有关系,因此具有高芳族指数的化合物必然是具有低脂族性的化合物。
Fsp3 = sp3碳数 / 碳总数
Fsp3通常用作描述化合物三维特征的描述符。
物性预测指数:PFI
PFI = logD 7.4 +芳环数(AROM)
据报道,由等式定义的PFI 可以比单独使用logD或AROM更好地描述各种化合物的性质。换句话说,如AROM部分所述,芳环数的影响
- 与脂肪溶解度有关的影响
- 与脂肪溶解无关的作用
在PFI中,每种化合物的权重之和为1:1。这意味着,当检查具有一定logD和AROM值的化合物时,该化合物的溶解度会随着每个描述符的变化而改变。
芳族/脂肪族平衡:Ar-sp3
化合物的芳香性和脂肪性是同一枚硬币的两个侧面,但作为这两者之间平衡的指标
芳香原子数– sp3碳数
可以使用定义的值。该指数优于Ar / HA和Fsp3的优点在于,即使芳香族原子数和sp3碳数为零,也可以对其进行参数化。
苯酯指数:BI
碳芳环和杂芳环对物理性能的影响被认为是不同的。
BI =碳芳环数 / 所有芳环数
大的BI值表示碳芳环的百分比高,并且显影成功率趋于降低。
芳香族分子描述符的相关性
导入包
from rdkit import rdBase, Chem
from rdkit.Chem import AllChem, PandasTools, Descriptors
import pandas as pd
载入数据
df = PandasTools.LoadSDF('cmpounds.sdf')
定义函数
def Calc_ARR(mh):
m = Chem.RemoveHs(mh)
num_bonds = m.GetNumBonds()
num_aromatic_bonds = 0
for bond in m.GetBonds():
if bond.GetIsAromatic():
num_aromatic_bonds += 1
ARR = num_aromatic_bonds/num_bonds
return ARR
def Calc_AROM(mh):
m = Chem.RemoveHs(mh)
ring_info = m.GetRingInfo()
atoms_in_rings = ring_info.AtomRings()
num_aromatic_ring = 0
for ring in atoms_in_rings:
aromatic_atom_in_ring = 0
for atom_id in ring:
atom = m.GetAtomWithIdx(atom_id)
if atom.GetIsAromatic():
aromatic_atom_in_ring += 1
if aromatic_atom_in_ring == len(ring):
num_aromatic_ring += 1
return num_aromatic_ring
def Calc_Carbo_Hetero_Aromatic(mh):
m = Chem.RemoveHs(mh)
ring_info = m.GetRingInfo()
atoms_in_rings = ring_info.AtomRings()
num_Caromatic_ring = 0
num_Hetaromatic_ring = 0
for ring in atoms_in_rings:
aromatic_atom_in_ring = 0
heteroatom_in_ring = 0
for atom_id in ring:
atom = m.GetAtomWithIdx(atom_id)
if atom.GetIsAromatic():
aromatic_atom_in_ring += 1
if atom.GetSymbol() != 'C':
heteroatom_in_ring += 1
if aromatic_atom_in_ring == len(ring):
if heteroatom_in_ring == 0:
num_Caromatic_ring += 1
else:
num_Hetaromatic_ring += 1
return (num_Caromatic_ring, num_Hetaromatic_ring)
def Calc_Ar_Alk_balance(mh):
m = Chem.RemoveHs(mh)
num_aromatic_carbon = len(m.GetAromaticAtoms())
num_sp3_carbon = 0
for atom in m.GetAtoms():
if str(atom.GetHybridization()) == 'SP3' and atom.GetSymbol() == 'C':
num_sp3_carbon += 1
ar_alk_balance = num_aromatic_carbon - num_sp3_carbon
return ar_alk_balance
计算描述符
df['Ar/HA'] = df.ROMol.map(lambda x: len(x.GetAromaticAtoms())/x.GetNumHeavyAtoms())
df['ARR'] = df.ROMol.map(Calc_ARR)
df['AROM'] = df.ROMol.map(Descriptors.NumAromaticRings)
df['Fsp3'] = df.ROMol.map(Descriptors.FractionCSP3)
df['Ar-sp3'] = df.ROMol.map(Calc_Ar_Alk_balance)
描述符相关性计算
df['Ar/HA_STD'] = (df['Ar/HA'] - df['Ar/HA'].mean()) / df['Ar/HA'].std()
df['ARR_STD'] = (df['ARR'] - df['ARR'].mean()) / df['ARR'].std()
df['AROM_STD'] = (df['AROM'] - df['AROM'].mean()) / df['AROM'].std()
df['Fsp3_STD'] = (df['Fsp3'] - df['Fsp3'].mean()) / df['Fsp3'].std()
df['Ar-sp3_STD'] = (df['Ar-sp3'] - df['Ar-sp3'].mean()) / df['Ar-sp3'].std()
df[['Ar/HA_STD', 'ARR_STD', 'AROM_STD', 'Fsp3_STD', 'Ar-sp3_STD']].corr().round(2)