使用snpEff分为两种情况,一种是snpEff已经构建了相应的数据集(例如人类和小鼠),另一种是则是snpEff未提供相应的数据集(例如自己组装的基因组)
情况1: 我们可以使用java -jar snpEff.jar databases | grep -i human
的方式列出所有的数据集,然后用grep
进行筛选
例如人类的基因组注释数据集就分为GRCh37.p13.RefSeq
和GRCh38.p7.RefSeq
两种
Candidatus_paraburkholderia_schumannianae Candidatus_paraburkholderia_schumannianae...
GRCh37.p13.RefSeq Human genome GRCh37 using RefSeq transcripts...
GRCh38.p7.RefSeq Human genome GRCh38 using RefSeq transcripts...
Pediculus_humanus Pediculus_humanus...
输出结果的第一列是基因组的版本号,我们根据这个版本号进行下载
java -jar snpEff.jar download GRCh38.p7.RefSeq
使用上面这种方法,我们无法保证数据下载速度,也不能保证注释信息时刻最新,因此我更推荐自己下载相应的基因组序列和注释文件,然后构建注释数据集。
我们编辑snpEff文件夹下的snpEff.config
, 增加新的物种信息。尽管能够在该文件的任何一行添加信息,但是为了方便查找,建议在# Databases & Genomes
后增加记录。
# XXX
XXX.genome : 物种名
这里的XXX是物种注释信息的版本号,XXX要和data下的文件夹对应
mkdir -p data/XXX
在data下面存放两个文件
- sequences.fa.gz: 参考基因组
- genes.gff.gz: 注释文件,GFF3格式(也可以是GFF2格式)
之后就可以用build
子命令进行构建
java -jar snpEff.jar build -gff3 -v XXX
# -v: verbose
# -gff3/gff2/-gtf22
建立数据库之后,注释这一步就相对简单
java -jar snpEff.jar ann XXX input.vcf.gz > snpeff.vcf
默认情况下snpEff的注释信息会很多,我们可以用如下几个参数来简化输出
- -no-downstream
- -no-upstream
- -no-utr
- -no-intergenic
- -no-intron
比如说我们只关注CDS中的注释信息,不考虑上游、下游、UTR、基因间区等信息
java -jar snpEff.jar ann -no-utr -no-downstream -no-upstream -no-intergenic XXX input.vcf.gz > snpeff.vcf
最终除了输出的vcf文件外,我们还会有额外两个文件,记录总结性信息
- snpEff_genes.txt: 总结每个基因的突变位点数
- snpEff_summary.html: 总结突变的类型数