Funcotator初识:什么是Funcotator,它能做什么

从我的实战说起

先讲个真实的事。两年前,我接手一批儿科遗传病的WES数据,变异列表里有个COL2A1的错义突变,ClinVar标注为“致病”,但我想看看这个位点在已知功能域的具体注释时——GenomeBrowse、ANNOVAR、VEP……翻了个遍,发现不同工具给出的功能影响描述差异很大,让我一度怀疑是不是数据出了问题。

当时团队里有人推荐了Funcotator。说实话,我一开始没太在意,觉得又是个“新轮子”。但后来在GATK官方文档里看到它专为临床场景优化,我抱着试试的心态跑了一遍。结果呢?同一份VCF,它不但把转录本、蛋白质改变、dbSNP ID、人群频率、ClinVar临床意义都对齐了,还能自动标记关键的“LOF”标签。嗯,从那以后,它就成了我日常解读变异的标配。

Funcotator到底是什么

说白了,Funcotator就是一个变异注释工具。它读取你的VCF或MAF文件,根据参考基因组和一组内置的“数据源”(比如GenCode、ClinVar、gnomAD、COSMIC等),逐个位点地补充上你关心的生物学和临床信息。它的全称是Functional Annotator,但官方文档里说它“is designed for clinical and translational research”——这一点和很多通用注释器不一样。

核心定位:从原始变异坐标 → 带功能与临床意义的可解读表格。

下面这张图概括了它在整个变异解读流程中的位置和输入输出。

Funcotator 在临床变异解读流程中的角色 输入 VCF / MAF 参考数据源 GenCode / ClinVar / gnomAD Funcotator 批量注释引擎 临床 / 功能 / 人群 输出 注释后的VCF / MAF 变异解读 临床报告 / ACMG 💡 说明 Funcotator 支持 3 种数据源模式:本地缓存、URL 自动下载、自定义 GATK 数据源包(.dataSourcesFolder)。 临床解读中我通常同时使用 ClinVar + gnomAD + COSMIC 三路数据源,覆盖率最高。

它能做什么——核心功能一览

我习惯把Funcotator的能力分成三个层面:转录水平注释、功能预测、临床数据整合。下面这张表我每次培训都会拿出来讲——尤其是第三列,全是血泪教训换来的经验。

功能类别 具体输出信息 我的避坑经验
转录本 & 蛋白 HGVS c./p. 命名,外显子/内含子编号,转录本ID 默认用 Gencode v19(GRCh37),如果你用 GRCh38 记得切换数据源包,否则位置会偏
功能预测 变异类型(missense/nonsense/LOF),SIFT/PolyPhen(需额外数据源) 我建议把“LOF”标志位作为第一筛选条件——它比单个预测分数稳定
人群频率 gnomAD/ExAC 等位频率,并自动标出常见变异标记 注意:Funcotator 默认只标出频率 > 1% 的常见变异,但你可以用 --minimum-mapping-quality 调整
临床意义 ClinVar 的“致病”“良性”等标签,以及提交者数量、证据状态 有一次我忽略了 ClinVar 的“conflicting”标注,后来发现两个实验室给的评级完全相反……
数据库交叉 dbSNP rs ID、COSMIC 突变 ID、OMIM 疾病关联 COSMIC 数据源挺大(> 2GB),我通常只在肿瘤样本时才启用

小技巧:如果你只想要“蛋白改变”和“人群频率”,可以只加载 GenCode + gnomAD 两个数据源,运行时间能压缩到原来的三分之一。

在临床变异解读中的角色

Funcotator 不是解读者,而是解读者的“军火库”。它的真正价值在于把原始VCF中的每一行变异坐标,转换成人类可读的、带有丰富上下文信息的表格。你想想看,如果没有这样一个统一标注层,你拿着几千个变异,光去每个数据库逐一查rs号就能查三天。

我自己的临床流程是这样:先走GATK HaplotypeCaller得到raw VCF,然后用功能过滤(比如 --filter-name "Funcotator_common")筛掉频率大于1%的SNP,最后才把剩余的变异输入Funcotator做全注释。注释完直接生成MAF格式,导入IGV和电子病历系统,每行都带ClinVar评级和ACMG豁免建议——这就是Funcotator在真实报告流程中的角色:把“可能性”转化成“可解释性”。

⚠️ 我曾经踩过的坑

Funcotator 对多等位基因位点的处理方式和 GATK 4.0 版本有关。有一次我跑完注释,发现一个位点的第二个ALT等位基因完全没有注释信息,查了半天才发现是 --merge-input-intervals 参数没加。现在我的脚本里都会显式加上这一行:

--merge-input-intervals true
--filter-out-filtered-variants false

前者保证多等位位点不会被拆散;后者避免丢掉低质量但可能关键的临床变异。

怎么在命令行里跑起来?

最低成本的入门命令(假设你已经下载了Funcotator数据源到 /data/funcotator_ref):

gatk Funcotator \
    --variant input.vcf \
    --reference /data/hg38/Homo_sapiens_assembly38.fasta \
    --ref-version hg38 \
    --data-sources-path /data/funcotator_ref \
    --output output.vcf \
    --output-file-format VCF

如果你想要MAF格式(我习惯这样,因为可以直接导入实验室的LIMS系统),把--output-file-format改成MAF就行:

gatk Funcotator \
    --variant input.vcf \
    --reference /data/hg38/Homo_sapiens_assembly38.fasta \
    --ref-version hg38 \
    --data-sources-path /data/funcotator_ref \
    --output output.maf \
    --output-file-format MAF

跑完之后,你会看到每一列都是标准化的:Hugo_Symbol、Chromosome、Start_Position、Variant_Classification……这就是为下游R/Python分析铺好路的“毛坯房”。

提速秘诀:如果数据源已经提前解压并配置好,第一次运行Funcotator大概需要5~10分钟(取决于VCF大小和机器IO)。我个人的经验是,把 --tmp-dir 指向一个高速SSD,速度能快一倍。