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的能力分成三个层面:转录水平注释、功能预测、临床数据整合。下面这张表我每次培训都会拿出来讲——尤其是第三列,全是血泪教训换来的经验。
| 功能类别 | 具体输出信息 | 我的避坑经验 |
|---|---|---|
| 转录本 & 蛋白 | 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,速度能快一倍。