首页 / 资讯中心 / 文章详情

RDKit FeatMaps 特征图模块完全指南:从化学特征到药效团打分与合并

RDKit FeatMaps 特征图模块完全指南:从化学特征到药效团打分与合并 ★ FEATURED ARTICLE
科学计算科研机器学习【免费下载链接】rdkitThe official sources for the RDKit library项目地址https://gitcode.com/gh_mirrors/rd/rdkit点击查看免费下载导读本文聚焦 RDKit 的rdkit.Chem.FeatMaps.FeatMaps模块源码位于 rdkit/Chem/FeatMaps/FeatMaps.py系统讲解化学特征图Feature Map药效团的核心数据表示的构建、打分与操作。读完本文你将掌握如何用FeatMapParams为不同特征族定义空间打分轮廓、如何用FeatMap对探针分子特征批量打分并理解All / Closest / Best三种打分模式、如何利用方向一致性增强药效团匹配的可靠性以及如何通过FeatMapParser用文本格式定义可复用的特征图。文中所有结论均以本仓库源码与单元测试为直接依据。FeatMaps 在 RDKit 中的定位与整体架构FeatMaps是 RDKit 化学信息工具链中用于表示和比较化学特征空间分布的模块典型应用是构建药效团模型pharmacophore从一组活性分子中提炼出共同的特征芳香环、氢键供体/受体、疏水中心等及其空间位置再用它去匹配和打分新分子。本模块的 API 文档页面 Docs/Book/source/rdkit.Chem.FeatMaps.FeatMaps.rst 通过 Sphinx 的automodule指令自动生成与其配套的还有 FeatMapPoint.rst、FeatMapParser.rst、FeatMapUtils.rst共同构成 rdkit.Chem.FeatMaps 包的四个子模块。四个子模块的职责划分如下子模块源码核心职责FeatMapsFeatMaps.py特征图主体打分模式、参数、打分算法FeatMapPointFeatMapPoint.py特征点位置、权重、方向向量的存储与计算FeatMapParserFeatMapParser.py文本格式特征图解析FeatMapUtilsFeatMapUtils.py特征点合并、特征图合并、距离矩阵特征点 FeatMapPoint位置、权重与方向特征图的基本单元是FeatMapPointFeatMapPoint.py它继承自ChemicalFeatures.FreeChemicalFeature因此天然拥有GetFamily()特征族如 Aromatic、Acceptor、GetType()特征类型、GetPos()三维坐标Point3D等能力并额外扩展了两项属性weight该特征点的权重默认0.0参与打分时的乘法因子featDirs方向向量列表每个元素为Geometry.Point3D用于表示特征的方向性如氢键受体的孤对电子方向。FeatMapPoint.initFromFeat(feat)负责从任意FreeChemicalFeature复制族、类型、位置与方向列表GetDist2(other)返回两点间距离平方(self.GetPos() - other.GetPos()).LengthSq()这是后续半径判断的基础。方向匹配 GetDirMatchGetDirMatch(other, useBestTrue)计算两个特征点的方向一致性逻辑如下FeatMapPoint.py任一方无方向向量featDirs为空时返回1.0方向不影响分数useBestTrue取两方向集合中所有点积的最大值表示存在一个最匹配的方向组合useBestFalse累加所有方向点积后除以len(self.featDirs) * len(other.featDirs)即平均点积。该文件内嵌的 doctest 验证了典型行为两个完全对齐的方向返回1.0完全反平行返回-1.0部分对齐如(0,0,1)与(0,1,0)返回0.0。这个返回值范围是 [-1, 1]下游FeatMap.GetFeatFeatScore会直接使用它。打分模式与参数两个枚举类 FeatMapParamsFeatMapScoreMode特征图打分模式FeatMaps.py 定义了三种模式控制探针特征如何与特征图中的特征配对枚举值数值语义FeatMapScoreMode.All0探针的每个特征与特征图中所有同族特征逐一打分并累加FeatMapScoreMode.Closest1只与特征图中距离最近的同族特征打分FeatMapScoreMode.Best2只与特征图中能产生最高分的同族特征打分FeatDirScoreMode方向打分模式枚举值数值语义FeatDirScoreMode.Ignore0忽略方向FeatDirScoreMode.DotFullRange1直接使用点积dot(f1Dir, f2Dir)允许反平行时出现负贡献FeatDirScoreMode.DotPosRange2将点积缩放至 [0, 1](dot 1) / 2FeatMapParams每特征族的打分参数每个特征族在特征图中都需要一个FeatMapParams实例FeatMaps.py参数默认值含义radius2.5截断半径距离平方超过radius²时得分为 0width1.0宽度参数即高斯分布的 sigma对 Triangle 轮廓则是三角底宽featProfileGaussian空间打分轮廓见下方枚举轮廓枚举FeatMapParams.FeatProfile提供三种打分函数Gaussian0score exp(-d² / width)距离越近分越高平滑衰减Triangle1score 1 - d / widthd width 时线性衰减Box2半径内恒为1.0硬截断。核心类 FeatMap构建与打分FeatMap是模块的核心类类级属性dirScoreMode、scoreMode、params作为默认值实例化时可通过FeatMap(paramsNone, featsNone, weightsNone)传入参数表、特征列表与权重列表。构建特征图AddFeature(feat, weightNone)把任意FreeChemicalFeature转成FeatMapPoint加入特征图若self.params非空而feat.GetFamily()不在其中会抛出ValueErrorFeatMaps.py。AddFeatPoint(featPt)直接加入一个FeatMapPoint实例同样校验族是否在 params 中。查询与删除GetFeatures()返回全部、GetNumFeatures()返回数量、GetFeature(i)按索引取、DropFeature(i)删除。__str__以表格形式输出每个特征点的序号、族、坐标x/y/z与权重FeatMaps.py。_initializeFeats要求feats与weights长度一致否则抛ValueError(feats and weights lists must be the same length)。单特征打分 GetFeatFeatScoreGetFeatFeatScore(feat1, feat2, typeMatchTrue)FeatMaps.py的完整算法若typeMatchTrue且两特征族不同直接返回0.0计算距离平方d2 feat1.GetDist2(feat2)若d2 radius²返回0.0按featProfile计算空间得分Gaussian / Triangle / Box乘以feat1.weight若dirScoreMode ! Ignore再乘以方向匹配分DotPosRange时先做(dirScore 1)/2缩放。该方法的数值行为有完整单元测试佐证UnitTestFeatMap.py 中Gaussian 模式下距离 1.0 与 1.5 分别得到exp(-1)、exp(-2.25)距离 2.1超过 radius2.0得 0Triangle 模式width2.0, radius3.0距离 1.0 得 0.5、距离 2.1 得 0Box 模式半径内恒等于权重1.1。批量打分 ScoreFeatsScoreFeats(featsToScore, mapScoreVectNone, featsScoreVectNone, featsToFeatMapIdxNone)FeatMaps.py是特征图与探针分子特征集合比对的主入口返回总得分同时可选地回填三个向量mapScoreVect长度等于特征图特征数记录特征图中每个特征从各探针特征获得的累计分数featsScoreVect长度等于探针特征数记录每个探针特征获得的分数featsToFeatMapIdx记录每个探针特征命中了特征图中哪些特征的索引All 模式为列表Closest/Best 模式为单元素列表。三种模式的具体行为差异源码 测试双重印证见 UnitTestFeatMap.pyAll 模式featsScoreVect[oIdx] lScoremapScoreVect[sIdx] lScore总分为sum(featsScoreVect)Closest 模式先找距离最近的同族特征d featsScoreVect[oIdx]时更新再统一用GetFeatFeatScore结算Best 模式每个探针特征只保留使其得分最高的特征图特征lScore featsScoreVect[oIdx]时更新。测试用例Box 轮廓简化计算中三个图特征权重 1.1/1.1/2.1探针特征Aromatic (0,1,0)、Acceptor (1.5,0,0)在 All 模式下总分为4.3Closest 模式为2.1Best 模式为3.2且三种模式均满足sum(mapScoreVect) sum(featsScoreVect) totScore。方向打分测试见 UnitTestFeatMap.pyDotFullRange下方向反平行得-1.1负贡献、正交得0.0切换为DotPosRange后反平行得0.0、同向得1.1。文本格式特征图FeatMapParser为了便于人工编辑和复用特征图模块提供了FeatMapParserFeatMapParser.py。它支持三种输入文件对象file、字符串data、字符串列表均可通过Parse()得到FeatMap。文本语法文件内嵌文档给出了完整的语法示例FeatMapParser.pyScoreModeAll DirScoreModeIgnore BeginParams familyAromatic radius2.5 width1.0 profileGaussian familyAcceptor radius1.5 EndParams # optional BeginPoints familyAcceptor pos(1.0, 0.0, 5.0) weight1.25 dir(1, 1, 0) familyAromatic pos(0.0,1.0,0.0) weight2.0 dir(0,0,1) dir(0,0,-1) familyAcceptor pos(1.0,1.0,2.0) weight1.25 EndPoints语法要点顶层键值对ScoreMode、DirScoreMode的取值对应上述枚举名注意解析时大小写不敏感scoreMode、dirscoremode均可识别但非法取值会抛FeatMapParseErrorBeginParams ... EndParams块为每个family定义一个FeatMapParams可写radius、width、profile取值Gaussian/Triangle/Boxfamily必须存在BeginPoints ... EndPoints块定义特征点family必需pos(x,y,z)定义坐标必须恰好三个分量weight定义权重dir(x,y,z)可重复出现以追加多个方向向量#为注释符行尾\支持续行FeatMapParser.py。解析行为与错误处理ParseParamBlock用正则([a-zA-Z]) * *(\S)逐项提取参数ParseFeatPointBlock用([a-zA-Z]) * *切分特征点字段。所有非法关键字、未知 profile、缺少EndParams/EndPoints、坐标分量数不为 3 等都会抛出FeatMapParseError坐标错误为ValueError详见 UnitTestFeatMapParser.py 中的 12 组负例测试。正例测试则验证了三种输入方式字符串、字符串列表、流对象解析结果一致且权重、方向数量、族顺序均正确还原。特征图操作工具FeatMapUtilsFeatMapUtils.py 提供特征图之间的合并能力由三组枚举控制策略MergeMethod合并后新点的位置策略——WeightedAverage按权重加权平均、Average简单平均、UseLarger取权重较大者位置MergeMetric判定两个点是否需要合并的准则——NoMerge、Distance距离低于阈值、Overlap重叠百分比超过阈值DirMergeMode方向向量的合并方式——NoMerge保留全部方向或Sum向量求和。关键函数GetFeatFeatDistMatrix(fm, mergeMetric, mergeTol, dirMergeMode, compatFunc)构建特征间距离/重叠矩阵compatFunc默认为familiesMatch仅同族可合并。注意文档与源码的明确提示mergeTol在 Distance 模式下是合并距离上限在 Overlap 模式下是重叠分数下限MergeFeatPoints(fm, ...)迭代合并互为最近邻的点对直至无可合并项返回是否发生合并布尔值CombineFeatMaps(fm1, fm2, ...)复制两张特征图参数取自fm1按需执行合并返回新特征图。这些工具适合多分子药效团提炼场景先对每个分子生成特征图再用CombineFeatMaps叠加合并得到覆盖全活性系列的共同特征分布。端到端实战从分子特征到特征图打分结合上述全部 API一个完整的实战流程如下from rdkit import Chem from rdkit.Chem import ChemicalFeatures from rdkit.Chem.FeatMaps import FeatMaps from rdkit import RDConfig import os # 1. 用特征定义文件fdef构建分子特征工厂 fdefName os.path.join(RDConfig.RDDataDir, BaseFeatures.fdef) factory ChemicalFeatures.BuildFeatureFactory(fdefName) # 2. 提取分子的化学特征返回 FreeChemicalFeature 元组 mol Chem.MolFromSmiles(c1ccccc1C(O)O) feats factory.GetFeaturesForMol(mol) # 每个特征含 Family / Type / 3D 位置 # 3. 为特征图涉及的每个特征族定义打分参数 params {} for f in feats: if f.GetFamily() not in params: p FeatMaps.FeatMapParams() p.radius 2.5 p.width 1.0 p.featProfile FeatMaps.FeatMapParams.FeatProfile.Gaussian params[f.GetFamily()] p # 4. 构建特征图也可以从文本用 FeatMapParser 加载 fm FeatMaps.FeatMap(paramsparams) for f in feats: fm.AddFeature(f, weight1.0) # 5. 用另一组特征对特征图打分返回总得分 queryFeats factory.GetFeaturesForMol(Chem.MolFromSmiles(c1ccccc1N)) score fm.ScoreFeats(queryFeats) print(similarity score:, score)实践要点weight是打分灵敏度的重要旋钮AddFeature时可以按特征重要性赋权若只关心存在性匹配使用Box轮廓 Best模式最直观若希望累积多个特征的重叠程度使用GaussianAll模式分子若有 3D 构象特征会带有方向信息如featDirs此时开启DirScoreMode.DotPosRange可要求方向一致避免仅凭位置匹配的假阳性。相关资源导航模块源码rdkit/Chem/FeatMaps/FeatMaps.py、FeatMapPoint.py、FeatMapParser.py、FeatMapUtils.py单元测试UnitTestFeatMap.py、UnitTestFeatMapParser.py、UnitTestFeatMapPoint.py、UnitTestFeatMapUtils.py特征来源ChemicalFeatures.BuildFeatureFactory与GetFeaturesForMolChemicalFeatures.pyfdef 定义文件示例见 Data/BaseFeatures.fdefAPI 文档本文对应的 Sphinx 页面 rdkit.Chem.FeatMaps.FeatMaps.rst 及其姊妹页面 FeatMapPoint.rst、FeatMapParser.rst、FeatMapUtils.rst赞分享科学计算科研机器学习【免费下载链接】rdkitThe official sources for the RDKit library项目地址https://gitcode.com/gh_mirrors/rd/rdkit点击查看免费下载相关推荐RDKit 化学特征模块rdkit.Chem.ChemicalFeatures完全指南从特征定义到药效团应用RDKit 化学特征模块rdkit.Chem.ChemicalFeatures完全指南从特征定义到药效团应用 rdkit.Chem.ChemicalFea科学计算科研机器学习sccache 编译器缓存安装指南接入 C/C、Rust 与 CMake 的完整清单sccache 编译器缓存安装指南接入 C/C、Rust 与 CMake 的完整清单 sccache 是 ccache 式的编译器缓存工具在编译命令前加开发工具构建工具OpenMed 端侧部署 Maple Preview从 Python MLX 到 Android/iOS/Web 的三端落地指南OpenMed 端侧部署 Maple Preview从 Python MLX 到 Android/iOS/Web 的三端落地指南 OpenMed 通过一个统一科学计算科研机器学习上一篇SkyWalking 端点分组规则实战基于 OpenAPI 定义与自定义配置的参数化端点聚合下一篇chezmoi 模板函数 lastpass / lastpassRaw 实战指南用 LastPass CLI 安全注入点文件机密创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?
咨询建站