예제 #1
0
def GetPharmacoPFPs(mol,
                    bins=[(i, i + 1) for i in range(20)],
                    minPointCount=2,
                    maxPointCount=2,
                    return_bitInfo=False):
    '''
    Note: maxPointCont with 3 is slowly
    
    bins = [(i,i+1) for i in range(20)], 
    maxPonitCount=2 for large-scale computation
    
    '''
    MysigFactory = SigFactory(featFactory,
                              trianglePruneBins=False,
                              minPointCount=minPointCount,
                              maxPointCount=maxPointCount)
    MysigFactory.SetBins(bins)
    MysigFactory.Init()

    res = Generate.Gen2DFingerprint(mol, MysigFactory)
    arr = np.array(list(res)).astype(np.bool)
    if return_bitInfo:
        description = []
        for i in range(len(res)):
            description.append(MysigFactory.GetBitDescription(i))
        return arr, description

    return arr
# 指纹工厂中的参数设置完毕,接下来就可以生成2D指纹了。
# 计算2D药效团指纹 :
Gen2DFingerprint(
    mol,  # 要计算指纹的mol对象
    sigFactory,  # 设置了参数的指纹工厂
    bitinfo  # 获取指纹id及对应的原子
)

mol = Chem.MolFromSmiles('OCC(=O)CCCN')
fp = Generate.Gen2DFingerprint(mol, sigFactory)
print(len(fp))  # 2988
print(fp.GetNumOnBits())  # 23

# 关于指纹每一位所代表特征的信息、特征的距离矩阵等信息,都可以通过signature factory来查看
print(list(fp.GetOnBits())[:5])  #
print(sigFactory.GetBitDescription(1))  # Acceptor Acceptor |0 1|1 0|

# # 4.3 修改FDef设置
# 如果不需要某个特征,可以直接通过signature factory来跳过某个特征,而不用去修改FDef文件。

# 查看现有药效团(列表)列表:GetFeatureFamilies()

featureFamilies = featFactory.GetFeatureFamilies()
print(featureFamilies)
# ('Donor', 'Acceptor', 'NegIonizable', 'PosIonizable',
#  'ZnBinder', 'Aromatic', 'Hydrophobe', 'LumpedHydrophobe')

# 跳过某个药效团(特征家族):sigFactory.skipFeats
# 每次修改都要初始化以下 : init()
# 在查看指纹长度 : GetSigSize()