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()