首页 > > > 在PostgreSQL中进行分子相似性搜索
一、分子指纹计算
二、相似性搜索
三、自定义搜索函数
本文介绍在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=.3;select id, mfp2<%>morganbv_fp('O=C1CN=C(c2ccccn2)c2ccccc2N1') knn from rdk.fps order by knn asc limit 10;
如果自带的函数无法满足需求,还可以通过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;
本文参考自rdkit官方文档。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31537575/viewspace-3168844/ ,如需转载,请注明出处,否则将追究法律责任。