首页 > 其他分享 >2022-006 在bam中检查指定突变

2022-006 在bam中检查指定突变

时间:2023-10-10 22:46:48浏览次数:46  
标签:10 102775349 006 2022 100021916 突变 bam bcftools

 

转载

2022-006 在bam中检查指定突变

SSSimon Yang SSSimon Yang 个人微信公众号 SSSimon Yang  

需求

检查突变在bam文件中存不存在。

注意:以下操作均需要bam文件按坐标排序并建立索引。

$ samtools sort -@ 24 -o sorted.bam un_sorted.bam
$ samtools index sorted.bam

参考基因组经常用到,因此赋值到变量。

hg19=~/project/0-reference/2-GATK/hg19/human_g1k_v37_decoy.fasta

示例突变为一个SNP和一个INDEL:

  • SNP 10_100021916_T_C 10号染色体100021916处T到C的单碱基突变
  • INDEL 10_102775349_CT_C 10号染色体102775349处CT到C的1bp删除

方案一:直接看

使用samtools命令可以对bam文件的指定位置进行展示。

10_100021916_T_C:

$ samtools tview -p 10:100021916 test1.bam ${hg19}

 

有多条reads在T位置为C,表示突变存在。

10_102775349_CT_C:

$ samtools tview -p 10:102775349 test2.bam ${hg19}

 

 

有多条reads在C后的T位置为*,表缺失,表示突变存在。

也可以使用IGV (Integrative Genomics Viewer) 对指定区域的reads进行可视化。

10_100021916_T_C:

 

10_102775349_CT_C:

 

samtools相比,IGV可以更清楚地可视化duplicate reads等信息,但在操作上略麻烦。

方案优点:简单,能够直接观察reads的质量。

方案缺点:每次只能检查一个bam,不能根据阈值对reads进行筛选。

方案二:输出碱基数

使用sambamba,可以输出指定位置的碱基数。

10_100021916_T_C:

$ sambamba depth base -F '' -L 10:100021916-100021916 test1.bam
REF     POS     COV     A       C       G       T       DEL     REFSKIP SAMPLE
Processing reference #10 (10)
10      100021915       306     0       140     0       166     0       0       test1

可以看到C有140个,T有166个,表示突变存在。

10_102775349_CT_C:

$ sambamba depth base -F '' -L 10:102775349-102775350 test2.bam
REF     POS     COV     A       C       G       T       DEL     REFSKIP SAMPLE
Processing reference #10 (10)
10      102775348       44      0       44      0       0       0       0       test2
10      102775349       48      0       2       0       26      20      0       test2

可以看到第二行的T有26个,DEL有20个,表示突变存在。

sambamba的输出是0-based,所以坐标会自动减一位。

在命令中的-F ''可以替换成其他的筛选条件,其默认值为mapping_quality > 0 and not duplicate and not failed_quality_control。详见filter expression syntax

sambamba可以同时检查多个bam。

$ sambamba depth base -F '' -L 10:100021916-100021916 *.bam
REF     POS     COV     A       C       G       T       DEL     REFSKIP SAMPLE
Processing reference #10 (10)
10      100021915       306     0       140     0       166     0       0       test1
10      100021915       352     0       0       0       352     0       0       test2

对输出文件稍加处理即可确定突变的存在与否。

方案优点:能够对reads进行阈值筛选,能够同时处理多个bam。

方案缺点:对INDEL的处理较为麻烦。

方案三:指定位置call突变

call突变有很多工具,最简单的工具就是bcftools。而bcftools恰好能够只在指定位置call突变。

10_100021916_T_C:

$ bcftools mpileup -r 10:100021916 -f ${hg19} -Ou test1.bam | bcftools call -mv
...
#CHROM  POS     ID      REF     ALT     QUAL    FILTER  INFO    FORMAT  test1
10      100021916       .       T       C       222.385 .       DP=240;VDB=0.312239;SGB=-0.693147;RPBZ=-0.522758;BQBZ=2.65699;SCBZ=-1.51572;FS=0;MQ0F=0;AC=1;AN=2;DP4=41,25,34,26;MQ=60 GT:PL   0/1:255,0,255

突变存在。

10_102775349_CT_C:

$ bcftools mpileup -r 10:102775349 -f ${hg19} -Ou test2.bam | bcftools call -mv
#CHROM  POS     ID      REF     ALT     QUAL    FILTER  INFO    FORMAT  test2
10      102775349       .       CT      C       138.301 .       INDEL;IDV=16;IMF=0.421053;DP=38;VDB=2.58825e-06;SGB=-0.689466;RPBZ=-0.222168;FS=0;MQ0F=0;AC=1;AN=2;DP4=15,7,14,2;MQ=60  GT:PL   0/1:171,0,143

突变存在。

bcftools可以同时处理多bam的多区域。

$ cat test
10      100021916
10      102775349
$ bcftools mpileup -R test -f ${hg19} -q 10 -Q 10 --ff UNMAP -Ou *.bam | bcftools call -mv
...
#CHROM  POS     ID      REF     ALT     QUAL    FILTER  INFO    FORMAT  test1      test2
10      100021916       .       T       C       221.283 .       DP=544;VDB=0.206128;SGB=49.7367;RPBZ=-0.237584;BQBZ=-1.49091;SCBZ=-0.406369;FS=0;MQ0F=0;AC=1;AN=4;DP4=146,92,46,28;MQ=60        GT:PL   0/1:255,0,255   0/0:0,255,255
10      102775349       .       CT      C       150.169 .       INDEL;IDV=20;IMF=0.454545;DP=82;VDB=1.39796e-09;SGB=12.3071;RPBZ=-0.746538;SCBZ=-0.567962;FS=0;MQ0F=0;AC=1;AN=4;DP4=45,14,17,3;MQ=60    GT:PL   0/0:0,105,194   0/1:184,0,143

通过指定-q -Q --ff等参数对reads进行筛选。--ff的默认值是UNMAP,SECONDARY,QCFAIL,DUP。详见mpileup

bcftools的输出为vcf文件,确定突变存在与否需要对其进行的文本处理更为简单。

方案优点:能够对reads进行阈值筛选,能够处理多个bam,能够比较好的处理INDEL。

END

总的来说,使用bcftools以call突变的方式检查指定突变的存在是目前最好的解决方案。我也尝试过使用gatk实现该需求,但是gatk并不能只在指定位置call突变,因此废弃。

我是 SSSimon Yang,关注我,用code解读世界

标签:10,102775349,006,2022,100021916,突变,bam,bcftools
From: https://www.cnblogs.com/xiaojikuaipao/p/17755937.html

相关文章

  • CSP-J/S 2022 游寄
    省流:J组:\(235\),一等线:\(215\)S组:\(185\),一等线:\(195\)蓝勾?9.18初赛。第一次线上考,鸡冻。上午是J,下午是S。在考试之前啊要弄一大坨什么答题设备的摄像头啊,什么监控设备的摄像头啊,万一停电了又要备摄像头啊……然后我现在家里有\(3\)个手机/摄像头支架,\(2\)台笔记本电脑......
  • 2021-2022 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2021) gym 104670
    原题容易想到最短路DAG求出来,起初我以为要求最小割,但这是错误的,因为可能有多条边联通了一个点的情况,这时候选择最小割不一定是最优的我们猜想一个思路:答案一定是包含\(1\)号节点的连通块全部填\(N\),剩下的填\(S\)。发现在最短路DAG中,\(1\rightarrown\)的所有路径......
  • 微软正式发布 C# 10,支持.NET 6 和 Visual Studio 2022 (附更新内容大全)
    微软正式发布C#10,支持.NET6和VisualStudio2022(附更新内容大全)2022/2/1211:24:36 来源:IT之家 作者:潇公子 责编:潇公子评论:0IT之家 2月12日消息,据微软中国MSDN,宣布C#10作为.NET6和VisualStudio2022的一部分已经发布了。在这篇文章中,微软将介绍C#......
  • 力扣-2006-差的绝对值为 K 的数对数目
    给你一个整数数组nums和一个整数k,请你返回数对(i,j)的数目,满足i<j且|nums[i]-nums[j]|==k。|x|的值定义为:如果x>=0,那么值为x。如果x<0,那么值为-x。示例1:输入:nums=[1,2,2,1],k=1输出:4解释:差的绝对值为1的数对为:-[1,2,2,1]-[1,2,2,1]-......
  • P7928 [COCI2021-2022#1] Kamenčići
    P7928[COCI2021-2022#1]Kamenčići[P7928COCI2021-2022#1]Kamenčići-洛谷|计算机科学教育新生态(luogu.com.cn)目录P7928[COCI2021-2022#1]Kamenčići题目大意思路code题目大意Alice和Bob又在玩游戏。在他们面前有\(n\)块石头排成一行,石头有红和蓝两种颜......
  • P9474 [yLOI2022] 长安幻世绘
    题目意思:需要在元素互不相同的数列\(a\)中选出一个长度为\(m\)的元素互不相邻的子列,使得子列的极差最小。做法我们知道,对于一组数列,我们只需知道它的最大值和最小值,就可以得到它的极差。那么我们可以将数字从小到大排序,固定最小值,寻找最优的最大值,当最小值和最大值的位置固......
  • 传纸条 luoguP1006
    题目描述小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题。一次素质拓展活动中,班上同学安排坐成一个mm行nn列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了。幸运的是,他们可以通过传纸条来进行交流。纸条要经由许多同学传到对方手里,小渊......
  • 2022 杭州 ICPC 补题 ACKG
    2022杭州ICPC补题ACKGhttps://codeforces.com/gym/104090笨成sb,啥也不会写完两个签到就坐牢(要补到银首,所以还差一个G题没补)说实话补了三题,感觉就是一些算法的延申,比如这一场的铜牌题其实考到的就是exgcd,Trie,背包dp,但是又不完全是单纯靠这个算法,需要你有一些引......
  • P8813 [CSP-J 2022] 乘方
    题目描述小文同学刚刚接触了信息学竞赛,有一天她遇到了这样一个题:给定正整数\(a\)和\(b\),求\(a^b\)的值是多少。\(a^b\)即\(b\)个\(a\)相乘的值,例如\(2^3\)即为\(3\)个\(2\)相乘,结果为\(2\times2\times2=8\)。“简单!”小文心想,同时很快就写出了一份程序,......
  • 2022 China Collegiate Programming Contest (CCPC) Mianyang Onsite
    2022ChinaCollegiateProgrammingContest(CCPC)MianyangOnsiteC.CatchYouCatchMe解题思路:站在距离出口最近的点等深度深的蝴蝶飞上来即可。时间复杂度:\(O(n)\)代码:#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;voidsolve(){ intn......