3.2 软件介绍
主要分为三大功能类。
Indexing 建立索引;
VCF/BCF manipulation :vcf 和 bcf 文件操作;
VCF/BCF analysis :vcf 和 bcf 文件分析;
1、Indexing
2、manipulation 大项主要是对文件的一些操作,包括查看,注释,合并,转换,排序等。
- annotate 注释,用于增加或者移除注释信息;
- concat 连接同一个样品或者同一个数据集的 vcf 或者 bcf 文件;
- convert 格式转换 VCF 与 BCF 之间转换,或者转换为其他格式;
- isec 取交集,多个 vcf 文件文件可以取共有的突变;
- merge 和 samtools 的 merge 类似,合并文件,
- norm normalize 标准化 indels
- plugin 用户自定义功能
- query 将 vcf 或 bcf 转换为用户自定义格式;
- reheader 修改 header 文件,修改样品名等;
- sort 对文件排序;
- view 查看文件
复制代码 3、VCF/BCF analysis
- call Call SNP 和 Indel;
- consensus 将所有变异位点合并成一个一致性序列
- cnv Copy Number Variation caller,检测拷贝数变异
- csq 检测变异的一致性序列;
- filter 过滤 vcf
- gtcheck 检查样本一致性,检测样品交换和污染
- mpileup 和 samtools 的 mpileup 类似;
- roh 识别 autozygosity
- stats 进行统计
复制代码 4、常用选项参数
- output options:
- --no-version
- -o, --output <file> :输出文件名,最好与文件类型保持一致,例如 vcf,vcf.gz,bcf,
- bcf.gz
- -O, --output-type <b|u|z|v>:输出文件类型,b,u,z,v 分别对应 bcf 与 vcf,以及是否压缩
- --threads <int> :线程数
- -e, --exclude <expr> :排除
- -i, --include <expr> :包括
- -r, --regions <region> :区域,给定表达式,染色体:起始位置-终止位置
- -R, --regions-file <file> :区域,bed 文件
- -s, --samples <list> :样品名,多个样品之间用逗号分隔
- -S, --samples-file <file> :样品名文件
- -t, --targets <region> :目标,染色体名字,例如 chr1,多个染色体之间用逗号分隔
- -T, --targets-file <file> :目标,写到文件中
- -l, --compression-level [0-9] :压缩等级,数字越大,压缩率越高,压缩时间越长
复制代码 5、表达式
- http://www.htslib.org/doc/bcftools.html#expressions
复制代码
3.3 bcftools 使用案例
1、格式转换
格式转换是将 vcf 与 bcf 之间进行格式转换,并同时进行压缩,bcf 为二进制格式,无法使用 less 等命令直接查看,但更加节约存储。如果是 bcf 格式文件,可以使用 view 功能进行查看。vcf 或者 bcf 必须使用 bgzip 压缩。
- #格式转换
- bcftools view file.vcf -O b -o file.bcf.gz
复制代码 2、建立索引
对于行数较多的数据,需要建立索引。这样便于快速检索。索引需要基于排序后的结果。后面很多应用都需要使用到索引。排序可以使用 sort 功能,索引使用 index 功能。index 命令用于对 VCF 文件建立索引,要求输入的 VCF 文件必须是使用 bgzip 压缩之后的文件,支持.csi和.tbi 两种索引,默认情况下建立的索引是.csi 格式。
- #排序
- bcftools sort file.bcf.gz
- #建立索引
- bcftools index file.bcf.gz
复制代码 3、统计绘图
如果想知道 vcf 中包含多少中突变,以及每种突变对应的数据,就需要对文件进行统计,stats选项可以用于 vcf 文件的统计。可以直接统计突变个数、突变类型的个数、转换颠换个数、测序深度、Indel 长度。统计完成之后可以使用 plot-vcfstats 进行可视化绘图。
- #数据统计与绘图
- bcftools stats file.bcf.gz >view.stats
- plot-vcfstats view.stats -p output
复制代码 4、查看固定区域
建立索引之后,就可以快速检索目标区域,例如得到结果之后,想快速查看某一区域,或者某个基因的情况,可以直接填写目标区域,格式为“染色体:起始位点-终止位点”。如果一次要查看多个区域,则可以添加一个 bed 文件。
- #查看固定区域
- bcftools view file.bcf.gz
- bcftools view all.bcf.gz 12:200000-300000
- #选出位于 bed 文件中的所有区域的突变位点
- bcftools view -R Target.bed file.bcf.gz >filt.onTarget.vcf
复制代码 5、拆分不同类型
- #提取 SNP
- bcftools view -v snps chr22.vcf >chr22.snp.vcf
- #提取 InDel
- bcftools view -v indels chr22.vcf >chr22.indel.vcf
- #提取 SV
- bcftools view -v other chr22.vcf >chr22.sv.vcf
复制代码 6、提取某一条染色体
- #提取 21 号染色体
- bcftools view -r 21
- ALL.wgs.phase3_shapeit2_mvncall_integrated_v5b.20130502.sites.vcf.gz >chr21.vc
- f
- #提取 22 号染色体
- bcftools view -r 22
- ALL.wgs.phase3_shapeit2_mvncall_integrated_v5b.20130502.sites.vcf.gz >chr22.vc
- f
复制代码 7、concat 合并
concat 命令用于合并 vcf 文件,为“横向合并“,是同一样品内部的合并,例如将同一样品不同染色体的突变信息进行合并,或者将同一样品的 SNP 结果与 InDel 结果进行合并。合并之前每个 VCF 文件必须是排序之后的,如果包含多个样本的信息,样本的顺序也必须一致。
- #合并 21 和 22 号染色体的结果
- bcftools concat chr21.vcf chr22.vcf -o merge.bcf.gz -O b
- #合并 SNP 与 InDel
- bcftools concat chr22.snp.vcf chr22.indel.vcf -o chr22.merge.vcf
复制代码 8、提取固定样品
- #筛选样品 HG00100
- bcftools view -s HG00100
- ALL.chr1.phase3_shapeit2_mvncall_integrated_v5a.20130502.genotypes.vcf.gz -O
- b >HG00100.vcf
- #筛选样品 HG00141
- bcftools view -s HG00141
- ALL.chr1.phase3_shapeit2_mvncall_integrated_v5a.20130502.genotypes.vcf.gz -O
- b >HG00141.vcf
复制代码 9. merge 合并
vcf 中不仅可以包含单个样品,也可以同时包含多个样品的信息,只需要将多个样品的 vcf合并即可。可以使用 merge 功能进行合并,与 concat“横向合并”不同,merge 合并为“纵向合并”,是合并不同样品到同一个 vcf 文件中。注意合并之前需要对每个样品创建索引。
- #合并样品 HG00100 与 HG00141
- bcftools merge a.vcf.gz b.vcf.gz -o merge.vcf
复制代码 注意:输入文件必须是经过 bgzip 压缩的文件, 而且还需要有.tbi 的索引。
10、集合运算
isec 用于在多个 VCF 文件之间取交集,差集,并集等操作,经典的应用场景是对多种软件的SNP calling 结果进行 venn 分析。用法如下
- #isec 取交集
- bcftools isec a.vcf.gz b.vcf.gz -p dir
复制代码 默认参数就是取交集,更多高级用法请参考帮助文档。
11、query 功能
vcf 里面包含的信息非常多,比较混乱,如果只想从中筛选出需要的内容,例如只需要Genotype 信息,可以使用 bcftools 的 query 功能实现。query 中最重要的就是表达式的写法。
- bcftools query -f '%CHROM\t%POS\t%REF\t%ALT[\t%SAMPLE=%GT]\n' A1.bcf.gz
复制代码 注意格式的熟悉,每个关键字前面使用%,“\t”或者“\n”代表制表符与换行符。
12、过滤
变异检测的策略一般是先找全,然后在找准。也就是软件首先输出尽可能多的结果,保存到vcf 文件中,然后在采取不同的标准对 vcf 进行过滤。过滤可以采取很多的标准,一般包括测序深度,打分制,碱基质量值,先验概率等。可以使用 bcftools 进行过滤。bcftools 的 filter功能其实与 query,view 都类似,可以进行多种模式的过滤,关键是要掌握其表达式EXPRESSIONS 的写法。
- #过滤掉等位频率>0.3 同时覆盖深度小于 10 的突变位点
- bcftools filter -e "INFO/AF[0] > 0.3 & FORMAT/DP < 30" A1.bcf.gz
- bcftools view -i '%TYPE!="snp" & MAF[0]<0.01'
- ALL.chr1.phase3_shapeit2_mvncall_integrated_v5a.20130502.genotypes.vcf.g
复制代码 13、注释
vcf 的注释主要是将突变位点定位到基因组上,确定突变发生在哪个基因,因为不同的突变发生位置,会对基因产生不同的影响,例如同义突变,错误突变或者无义突变等。另外一种注释就是与已知突变位点进行比较,定位到已知的 rs number 号上面。
annotate 命令有两个用途:
- #注释 VCF 文件,用法如下
- bcftools annotate -a /ifs1/Database/gatk/hg38/dbsnp_146.hg38.vcf.gz -c ID,QUAL
- ,+TAG file.vcf -o annotate.vcf
复制代码 -a 参数指定注释用的数据库文件,格式可以是 VCF, BED, 或者是\t 分隔的自定义文件。在\t 分隔的自定义文件中,必须包含 CHROM, POS 字段;
-c 参数指定将数据库的哪些信息添加到输出文件中。
- #编辑 VCF 文件,比如去除其中的某些注释信息,或者去除某些样本
- bcftools annotate -x ID,INFO/DP,FORMAT/DP view.vcf -o removed.id.vcf
复制代码 -x 参数表示去除 VCF 文件中的注释信息,可以是其中的某一列,比如 ID, 也可以是某些字段,比如 INFO/DP,多个字段的信息用逗号分隔;去除之后,这些信息所在的列并不会去除,而是用.填充。
|