bedtools的使用技巧(持续更新)
2020-10-26 本文已影响0人
一只烟酒僧
参考链接(注意这个是旧版,但是写的很详细!):https://anjingwd.github.io/AnJingwd.github.io/2017/08/19/bedtools%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B%E8%AF%A6%E8%A7%A3/
参考链接:https://zhuanlan.zhihu.com/p/52322803
技巧一、使用bedtools bamtobed将bam文件转bed文件(基础)
参考:https://uteric.github.io/CHIPSEQ/bamtobed/
bedtools bamtobed -i SRR3022344.sorted.bam >test.bed
image.png第一列:染色体位置
第二列:start
第三列:end
第四列:对应BAM文件的QNAME,包含测序平台,read name等信息
第五列:对应BAM文件的MAPQ,即比对质量
第六列:正负链
注意:
start1和start2起始坐标第一个碱基都为0,所以start=9, end=20表示碱基跨度是从第10位到第20位
染色体用.表示unknown;位置信息用-1表示unknown
技巧二、使用bedtools intersect计算两个或多个bed中的intersect区域(可接受多个文件类型bed/gff/vcf/bam)
bedtools intersect [OPTIONS] -a <bed/gff/vcf/bam> -b <bed/gff/vcf/bam>
-wa参数可以报告出原始的在A文件中的feature
-wb参数可以报告出原始的在B文件中的feature
-c参数可以报告出两个文件中的overlap的feature的数量
-wo 返回overlap碱基数
-v 返回非overlap区间
-s 相同链上的feature
#例题请看参考链接!
注意,自己生成测试bed文件,都必须用tab键分割,否则会报错!!
案例一:包含着染色体位置的两个文件,分别记为A文件和B文件。分别来自于不同文件的染色体位置的交集是什么?
$ cat A.bed
chr1 10 20
chr1 30 40
$ cat B.bed
chr1 15 25
$ bedtools intersect -a A.bed -b B.bed
chr1 15 20
案例二:包含着染色体位置的两个文件,分别记为A文件和B文件。求A文件中哪些染色体位置是与文件B中的染色体位置有overlap.
$ cat A.bed
chr1 10 20
chr1 30 40
$ cat B.bed
chr1 15 25
$ bedtools intersect -a A.bed -b B.bed -wa
chr1 10 20
案例三:包含着染色体位置的两个文件,分别记为A文件和B文件。求A文件中染色体位置与文件B中染色体位置的交集,以及对应的文件B中的染色体位置.
$ cat A.bed
chr1 10 20
chr1 30 40
$ cat B.bed
chr1 15 25
$ bedtools intersect -a A.bed -b B.bed -wb
chr1 15 20 chr1 15 25
案例四(经用): 包含着染色体位置的两个文件,分别记为A文件和B文件。求对于A文件的染色体位置是否与文件B中的染色体位置有交集。如果有交集,分别输入A文件的染色体位置和B文件的染色体位置;如果没有交集,输入A文件的染色体位置并以’. -1 -1’补齐文件。
$ cat A.bed
chr1 10 20
chr1 30 40
$ cat B.bed
chr1 15 25
$ bedtools intersect -a A.bed -b B.bed -loj
chr1 10 20 chr1 15 25
chr1 30 40 . -1 -1
案例五: 包含着染色体位置的两个文件,分别记为A文件和B文件。对于A文件中染色体位置,如果和B文件中染色体位置有overlap,则输出在A文件中染色体位置和在B文件中染色体位置,以及overlap的长度.
$ cat A.bed
chr1 10 20
chr1 30 40
$ cat B.bed
chr1 15 20
chr1 18 25
$ bedtools intersect -a A.bed -b B.bed -wo
chr1 10 20 chr1 15 20 5
chr1 10 20 chr1 18 25 2
案例六: 包含着染色体位置的两个文件,分别记为A文件和B文件。对于A文件中染色体位置,如果和B文件中染色体位置有overlap,则输出在A文件中染色体位置和在B文件中染色体位置,以及overlap的长度;如果和B文件中染色体位置都没有overlap,则用’. -1-1’补齐文件
$ cat A.bed
chr1 10 20
chr1 30 40
$ cat B.bed
chr1 15 20
chr1 18 25
$ bedtools intersect -a A.bed -b B.bed -wao
chr1 10 20 chr1 15 20 5
chr1 10 20 chr1 18 25 2
chr1 30 40 . -1 -1
案例七: 包含着染色体位置的两个文件,分别记为A文件和B文件。对于A文件中染色体位置,输出在A文件中染色体位置和有多少B文件染色体位置与之有overlap.
$ cat A.bed
chr1 10 20
chr1 30 40
$ cat B.bed
chr1 15 20
chr1 18 25
$ bedtools intersect -a A.bed -b B.bed -c
chr1 10 20 2
chr1 30 40 0
案例八(常用): 包含着染色体位置的两个文件,分别记为A文件和B文件。对于A文件中染色体位置,输出在A文件中染色体位置和与B文件染色体位置至少有X%的overlap的记录。
$ cat A.bed
chr1 100 200
$ cat B.bed
chr1 130 201
chr1 180 220
$ bedtools intersect -a A.bed -b B.bed -f 0.50 -wa -wb
chr1 100 200 chr1 130 201
#一个2G的bam文件约需要15-20分钟!!!
注意:当用bedtools intersect 处理大文件时比较耗内存,有效的方法是对A和B文件按照染色体名字(chromosome)和位置(position)排序,重新intersect
bedtools sort [OPTIONS] -i <bed/gff/vcf>
bedtools sort -chrThenSizeA -i test.bed
-sizeA Sort by feature size in ascending order.
-sizeD Sort by feature size in descending order.
-chrThenSizeA Sort by chrom (asc), then feature size (asc).
-chrThenSizeD Sort by chrom (asc), then feature size (desc).
-chrThenScoreA Sort by chrom (asc), then score (asc).
-chrThenScoreD Sort by chrom (asc), then score (desc).
技巧三:使用bedtools genomecov染色体和全基因组覆盖度计算(可以用来做深度计算)
单个输入bed文件(-i指定)和genome files;如果输入为bam(-ibam指定)文件,则不需要genome files
bedtools genomecov [OPTIONS] -i <bed/gff/vcf> -g <genome>
-ibam The input file is in BAM format
Note: BAM _must_ be sorted by position
示例
$ cat ranges-cov-sorted.bed
chr1 4 9
chr1 1 6
chr1 8 19
chr1 25 30
chr2 0 20
$ cat cov.txt (染色体及每条染色体总碱基数)
chr1 30
chr2 20
bedtools genomecov -i ranges-cov-sorted.bed -g cov.txt
chr1 0 7 30 0.233333 1
chr1 1 20 30 0.666667
chr1 2 3 30 0.1
chr2 1 20 20 1 2
genome 0 7 50 0.14 3
genome 1 40 50 0.8
genome 2 3 50 0.06
#name 覆盖次数 覆盖碱基数 总碱基数 覆盖度
#同时计算单染色体和全基因组覆盖度
如果输入的是-ibam bam 文件,则输出结果为
名称 覆盖次数 该次数下的碱基数 该染色体长度 染色体覆盖度
chr1 0 248951704 248956422 0.999981
chr1 1 4136 248956422 1.66134e-05
chr1 2 582 248956422 2.33776e-06
chr2 0 242190850 242193529 0.999989
chr2 1 2358 242193529 9.73602e-06
chr2 2 321 242193529 1.32539e-06
chr3 0 198292860 198295559 0.999986
chr3 1 2398 198295559 1.20931e-05
chr3 2 301 198295559 1.51794e-06
chr4 0 190212444 190214555 0.999989
chr4 1 1622 190214555 8.52721e-06
chr4 2 489 190214555 2.57078e-06
chr5 0 181536919 181538259 0.999993
chr5 1 1280 181538259 7.05086e-06
chr5 2 60 181538259 3.30509e-07
chr6 0 170804532 170805979 0.999991
chr6 1 1095 170805979 6.41078e-06
chr6 2 352 170805979 2.06082e-06
chr7 0 159344307 159345973 0.99999
chr1 248951704+4136+582=248956422
2G的bam文件大概的时间消耗
real 3m29.649s
user 3m19.071s
sys 0m9.387s
genomecov也会对全基因组的按照不同深度做统计!!(有用啊)
-u Write the original A entry once if any overlaps found in B
image.png
注意-u参数,1、使用后相当于进入-wa模式,2、若A与B有相同重复,则会去重
技巧四、使用bedtools coverage计算染色体给定区间的深度和覆盖度,输入文件可以是bam
bedtools coverage [OPTIONS] -a <bed/gff/vcf> -b <bed/gff/vcf>
其中-a指定interval文件,即你想看的染色体区间 -b指定的是你比对的结果或bed等文件
示例
$ cat A.bed
chr1 0 100
chr1 100 200
chr2 0 100
$ cat B.bed
chr1 10 20
chr1 20 30
chr1 30 40
chr1 100 200
$ bedtools coverage -a A.bed -b B.bed
A的名称 起始 终止 B在A中匹配次数 匹配的总长度 该区域总长度 比例
chr1 0 100 3 30 100 0.3000000
chr1 100 200 1 100 100 1.0000000
chr2 0 100 0 0 100 0.0000000
结果解释:前三列是interval文件的信息,后四列为统计信息