两个分子之间的相似性计算
>>> ms =[Chem.MolFromSmiles('CCOC'),Chem.MolFromSmiles('CCO')]
>>> fps = [Chem.RDKFingerprint(x) for x in ms]
>>> DataStructs.FingerprintSimilarity(mfp[0], mfp[1])
0.6
多个分子之间的相似性计算,ex.生成的500个,与输入的500个
from rdkit.Chem.Draw import SimilarityMaps
import io
import matplotlib.pyplot as plt
from PIL import Image
import selfies as sf
from rdkit import Chem
from rdkit.Chem import Draw
from rdkit import DataStructs
import pandas as pd
import csv
f=open('./smility.csv','w')
wr=csv.writer(f)
df = pd.read_csv('./std_ligand.csv')
std_smiles=df['SMILES'].tolist()
df1 = pd.read_csv('./gencnn.csv')
gen_smiles=df1['SMILES'].tolist()
std_mols=[Chem.MolFromSmiles(s) for s in std_smiles]
gen_mols=[Chem.MolFromSmiles(s) for s in gen_smiles]
score_max=[]
index_list=[]
count=0
for gen_mol in gen_mols:
score_list=[]
for mol in std_mols:
gen_fp=Chem.RDKFingerprint(gen_mol)
fp=Chem.RDKFingerprint(mol)
score=DataStructs.FingerprintSimilarity(gen_fp,fp)
score_list.append(score)
max1= max(score_list)
index = score_list.index(max(score_list))
count+=1
score_max.append(max1)
score_max.append(index)####与哪个相似性最大下标
print(index)
##下面是将结果存入csv,共两列
def list_of_groups(init_list, children_list_len):
list_of_groups = zip(*(iter(init_list),) *children_list_len)
end_list = [list(i) for i in list_of_groups]
count = len(init_list) % children_list_len
end_list.append(init_list[-count:]) if count !=0 else end_list
return end_list
code_list = list_of_groups(score_max,2)
print(code_list)
for i in range(count):
# print('\t',code_list[i])
# print(code_list[i])
x=code_list[i]
print(x)
wr.writerows([x])
f.close()