samtools

LogicStrider
• 阅读 200

samtools

在前面,我们向大家介绍了 sambamba — samtools 的高效平替工具,今天让我们为大家带来生信分析最重要的工具之一 samtools。

samtools

简介

samtools 是由李恒大神开发的一套用于读/写/编辑/索引/查看 SAM/ BAM/CRAM 格式的工具集。其功能包括:

  • view 进行 SAM 和 BAM 之间的文件格式转换或者查看二进制文件;
  • sort 用于对文件进行排序,也是我们用得最多的子命令。
  • index 生成索引文件,必须是 sort 之后的 bam 文件。
  • stats:生成关于比对数据的统计信息,如测序覆盖度、比对质量等;
  • faidx 对 fasta 文件建立索引,生成的索引文件以 .fai 后缀结尾。
  • tview 查看 reads 比对到基因组的情况,类似基因组浏览器的功能。
  • markdup 标记重复序列,但并没有将其去除。

samtools 安装方式

下载地址:http://www.htslib.org/download/

方式一:编译后安装

tar jxvf samtools-1.19.2.tar.bz2
cd samtools-1.19.2    # and similarly for bcftools and htslib
./configure --prefix=/where/to/install # 如果报错,跟着报错信息走
make
make install

典型报错信息:

configure: error: curses development files not found

yum install ncurses-devel

configure: error: libbzip2 development files not found

yum install bzip2-devel

configure: error: liblzma development files not found

yum install xz-devel

安装完成后添加到环境变量:

export PATH=/where/to/install/bin:$PATH    # for sh or bash users

或者创建软链接:

ln -s /where/to/install/bin/samtools /usr/local/bin/samtools

方法二:使用 conda 安装

$ conda install -y samtools

使用方法

按照不同场景,samtools 的多个子命令可以按照以下类别划分:

1. 格式准备

比对完参考基因组之后得到的 SAM 格式文件一般需要经过以下三连操作转换为 BAM 格式用于下游分析(IGV 可视化、variant calling 等):

1.1 view

SAM 文件转 BAM:

samtools view -bS -o out.bam in.sam

-b 输出 bam 文件;

-S 输入 SAM 文件;

查看 bam 文件头部信息:

samtools view -H out.bam
1.2 sort

对 bam 文件排序

samtools sort -@ 4 -o out.bam in.bam

值得注意的是:

  1. samtools1.9 版本以后 sort 算法从 qsort 升级为了 radixsort,性能提升非常大。此外,相对于 samtools+zlib,samtools+libdeflate 编译后的性能速度也得到了大幅提高,但 sambamba 仍然是我们的最佳选择。参考:https://bioinformatics.stackexchange.com/questions/18538/samt...
  2. 此外,排序方式可分为两种,默认按 coordinate 进行排序;也可使用 -t 选项按 tag 排序;
1.3 index

对排序后 bam 格式的比对文件构建索引。

samtools index sorted.bam

注意:

  1. 必须对 bam 文件进行排序后,才能建立索引;
  2. BAI 索引格式支持最长 512 Mbp(2^29 碱基)的单个染色体。如果输入文件可能包含比对到更远位置的 reads,建议使用 sambamba。

2. 数据统计

depth

统计每个碱基位点的测序深度

samtools depth -b test.bed in.bam > test.depth

输出结果:

  • 第一列 序列名称
  • 第二列 碱基位置
  • 第三列 测序深度
flagstat

统计 bam 文件中 read 的比对情况

samtools flagstat in.bam

输出:

in total (QC-passed reads + QC-failed reads),332843724,0
secondary,0,0
supplementary,0,0
duplicates,73213258,0
mapped,328386001:98.66%,0:N/A
paired in sequencing,332843724,0
read1,166421862,0
read2,166421862,0
properly paired,317070676:95.26%,0:N/A
with itself and mate mapped,327763284,0
singletons,622717:0.19%,0:N/A
with mate mapped to a different chr,1720040,0
with mate mapped to a different chr (mapQ>=5),275739,0

结果一共有13 项,根据 QC 结果,每一项都分 PASS 和 FAIL,一般都是 PASS,因为 QC 都在比对前做过了,低质量的大都过滤了。

idxstats

统计 bam 索引文件里的比对信息

samtools idxstats in.bam

idxstats 统计一个表格,4列,分别为 ”序列名,序列长度,比对上的 reads 数量,未比对上的 reads 数量”

3. 文件处理

merge

用于合并多个已排序的比对文件,生成一个包含所有输入记录的单一排序输出文件,同时保持现有的排序顺序。在表观基因组学中用的较多。

samtools merge -o merge_out.bam test_sort.bam test2_sort.bam

4. variant calling

markdup

识别并标记那些在进行基因组坐标排序后被视为重复的比对记录(默认情况下不去除)

samtools markdup in.bam out.markdup.bam

-r 删除重复 read

mpileup

没错,samtools 也可以直接用来进行 calling SNP/InDel。与 GATK 中使用复杂的局部组装和机器学习算法不同,samtools 检测变异的方法其实就是对每个位点做碱基堆积,然后提取与参考基因组不同的位点。但相对于 GATK ,samtools 在速度上并没有优势,所以我们一般不推荐,这里也只简单介绍一下。

samtools mpileup [-EB] [-C capQcoef] [-r reg] [-f in.fa] [-l list] [-Q minBaseQ] [-q minMapQ] in.bam [in2.bam [...]]

简单用法:

samtools  mpileup -q 1 -C 50 -S -D -m 2 -F 0.002 -u -f ref.fa -b bam.list -l split1.txt > test.mpileup
  • -B, --no-BAQ 不计算单碱基比对质量分值(BAQ)

    BAQ (Base Alignment Quality)

    BAQ 是读取碱基错配的 Phred-scaled 概率。其有助于识别由错配引起的假阳性 SNP。关于 BAQ 的计算参考:“Improving SNP discovery by base alignment quality”, Heng Li, Bioinformatics, Volume 27, Issue 8 https://doi.org/10.1093/bioinformatics/btr076

  • -f:输入有索引文件的 fasta 参考序列
  • -A:在检测变异中,不忽略异常的 reads 对
  • -C:用于调节比对质量的系数,如果 reads 中含有过多的错配,不能设置为零;
  • -D:输出每个样本的 reads 深度
  • -l:BED 文件或者包含区域位点的位置列表文件。注意:位置文件包含两列,染色体和位置,从1开始计数。BED文件至少包含3列,染色体、起始和终止位置,开始端从0开始计数。
  • -r:在指定区域产生 pileup,需已建立索引的 bam 文件,通常和 -l 参数一起使用
  • -o/g/v:输出文件类型(标准格式文件或者 VCF、BCF 文件)
  • -t:设置 FORMAT 和 INFO 的列表内容,以逗号分割
  • -u:生成未压缩的 VCF 和 BCF 文件
  • -I:跳过 INDEL 检测
  • -m:候选 INDEL 的最小间隔的 reads
  • -F:含有间隔 reads 的最小片段

扫码关注微信公众号【生信F3】获取文章完整内容,分享生物信息学最新知识。
samtools

本文由mdnice多平台发布

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Easter79 Easter79
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Stella981 Stella981
3年前
Linux日志安全分析技巧
0x00前言我正在整理一个项目,收集和汇总了一些应急响应案例(不断更新中)。GitHub地址:https://github.com/Bypass007/EmergencyResponseNotes本文主要介绍Linux日志分析的技巧,更多详细信息请访问Github地址,欢迎Star。0x01日志简介Lin
Wesley13 Wesley13
3年前
FPGA+CPU助力数据中心实现图像处理应用体验与服务成本新平衡
!(https://oscimg.oschina.net/oscnet/b27bc0d4a279e71e209ef9a9520ee00c145.jpg)图片逐渐成为互联网主要的内容构成,相应的图片处理需求也在高速成长,移动应用与用户生产内容(UGC)正在驱动数据中心图像处理的业务负载快速增加。本文深维科技联合创始人兼CEO樊平详细剖析了
暗箭伤人 暗箭伤人
1年前
【www.ithunter.club】 20230922下午
不容易的2023年,我们一起努力【www.ithunter.club】(2023092208:00:00.8872062023092216:00:00.887206)1.人事招聘专员数名(可选远程或入职)2.招聘向坐标东京Yahoo、Shift、L