RDKit | 操作与实践

RDKit|在PostgreSQL中进行分子相似性搜索

2020-05-30  本文已影响0人  最会设计的科研狗

文章目录

一、分子指纹计算
二、相似性搜索
三、自定义搜索函数

一、分子指纹计算

本文介绍在windows环境下,使用rdkit函数在postgresql数据库中进行相似性搜索。环境搭建、数据表准备不再赘述,可以参考这篇文章。在上述工作基础上,继续进行指纹计算、建立索引。操作之前先看看在postgresql中支持的指纹函数:

接下来在postgresql中计算分子指纹

select id, torsionbv_fp(m) as torsionbv, morganbv_fp(m) as mfp2, featmorganbv_fp(m) as ffp2 into rdk.fps from rdk.mols;
create index fps_ttbv_idx on rdk.fps using gist(torsionbv);
create index fps_mfp2_idx on rdk.fps using gist(mfp2);
create index fps_ffp2_idx on rdk.fps using gist(ffp2);

二、相似性搜索

进行相似性比对和搜索需要用到相似性搜索相关的操作符:

select count(*) from rdk.fps where mfp2%morganbv_fp('O=C1CN=C(c2ccccn2)c2ccccc2N1');
set rdkit.tanimoto_threshold=0.3;
select id, mfp2<%>morganbv_fp('O=C1CN=C(c2ccccn2)c2ccccc2N1') knn from rdk.fps order by knn asc limit 10;
1

三、自定义搜索函数

如果自带的函数无法满足需求,还可以通过create or replace function来创建一个新的函数。用下面的自定义函数为例进行介绍:

create or replace function get_mfp2_neighbors(smiles text)
returns table(id int, m mol, similarity double precision) as
$$
select id, m, tanimoto_sml(morganbv_fp(mol_from_smiles($1::cstring)), mfp2) as similarity from rdk.fps join rdk.mols using (id)
where morganbv_fp(mol_from_smiles($1::cstring))%mfp2
order by morganbv_fp(mol_from_smiles($1::cstring))<%>mfp2;
$$ language sql stable;
select * from get_mfp2_neighbors('O=C1CN=C(c2ccccn2)c2ccccc2N1') limit 10;
2

本文参考自rdkit官方文档

上一篇 下一篇

猜你喜欢

热点阅读