samtools的说明文档:http://samtools.sourceforge.net/samtools.shtml
samtools是一个用于操作sam和bam文件的工具合集。包含有许多命令。
Usage: samtools [options]
Commands:
-- Indexing
dict create a sequence dictionary file
faidx index/extract FASTA
index index alignment
-- Editing
calmd recalculate MD/NM tags and '=' bases
fixmate fix mate information
reheader replace BAM header
rmdup remove PCR duplicates
targetcut cut fosmid regions (for fosmid pool only)
addreplacerg adds or replaces RG tags
markdup mark duplicates
-- File operations
collate shuffle and group alignments by name
cat concatenate BAMs
merge merge sorted alignments
mpileup multi-way pileup
sort sort alignment file
split splits a file by read group
quickcheck quickly check if SAM/BAM/CRAM file appears intact
fastq converts a BAM to a FASTQ
fasta converts a BAM to a FASTA
-- Statistics
bedcov read depth per BED region
depth compute the depth
flagstat simple stats
idxstats BAM index stats
phase phase heterozygotes
stats generate stats (former bamcheck)
-- Viewing
flags explain BAM flags
tview text alignment viewer
view SAM<->BAM<->CRAM conversion
depad convert padded BAM to unpadded BAM
以下是常用命令的介绍:
1、mpileup
作用:对参考基因组每个位点做碱基堆积,用于call SNP和INDEL。主要是生成BCF、VCF文件或者pileup一个或多个bam文件。比对记录以@RG中的样本名作为区分标识符。如果样本标识符缺失,那么每一个输入文件则视为一个样本。
Usage: samtools mpileup [options] in1.bam [in2.bam [...]]
Input options:
-6, --illumina1.3+ quality is in the Illumina-1.3+ encoding
#碱基质量格式为Illumina 1.3+打分方式
-A, --count-orphans do not discard anomalous read pairs
#在检测变异中,不忽略异常的reads对
-b, --bam-list FILE list of input BAM filenames, one per line
#以list形式输入BAM文件。每一行代表一个bam文件路径
-B, --no-BAQ disable BAQ (per-Base Alignment Quality)
#不计算单碱基比对质量分值
-C, --adjust-MQ INT adjust mapping quality; recommended:50, disable:0 [0]
#用于降低比对质量的系数,如果reads中含有过多的错配,不能设置为零。BWA推荐值为50
-d, --max-depth INT max per-file depth; avoids excessive memory usage [250]
#对参考基因组上的每个位点进行SNP/Indel分析的时候,samtools对每个输入文件仅读取的
reads数目有上限,该上限默认值是8000/n,其中n表示输入的BAM文件个数。当该参数设置
的值>8000/n,则此上限有-d参数决定,否则-d参数无效。例如:当对1000个样品进行重测序
后进行SNP/Indel分析,上限若为8000/n,则过小(可能低于测序覆盖度了),此时-d参数
生效;而当需要分析的样品数较少的时候,对每个位点读取的reads数目上限则为8000/n,
能充分利用测序深度非常高位点的数据
-E, --redo-BAQ recalculate BAQ on the fly, ignore existing BQs
#重新计算BAQ值
-f, --fasta-ref FILE faidx indexed reference sequence file
#输入参考基因组序列fasta文件,fasta文件必须有以fai为后缀的索引文件
-G, --exclude-RG FILE exclude read groups listed in FILE
# 排除所有包含在FILE中的RG
-l, --positions FILE skip unlisted positions (chr pos) or regions (BED)
#输入bed文件,仅在指定区间内进行分析
-q, --min-MQ INT skip alignments with mapQ smaller than INT [0]
#用于分析的比对质量最小值
-Q, --min-BQ INT skip bases with baseQ/BAQ smaller than INT [13]
#用于分析的碱基质量最小值
-r, --region REG region in which pileup is generated
#仅仅在此区间进行分析。默认对所有区间进行分析
-R, --ignore-RG ignore RG tags (one BAM = one sample)
#忽略BAM文件中的@RG信息,认为一个BAM文件就是一个样品的数据
--rf, --incl-flags STR|INT required flags: skip reads with mask bits unset []
#只包含FLAG已经标记的结果
--ff, --excl-flags STR|INT filter flags: skip reads with mask bits set
[UNMAP,SECONDARY,QCFAIL,DUP]
#忽略FLAG被标记的结果
-x, --ignore-overlaps disable read-pair overlap detection
#不检查read pair的overlap
Output options:
-o, --output FILE write output to FILE [standard output]
#将结果输出到指定文件,默认输出到标准输出
-g, --BCF generate genotype likelihoods in BCF format
#进行基因分型,将结果输出到BCF格式
-v, --VCF generate genotype likelihoods in VCF format
#进行基因分型,将结果输出到VCF格式。默认输出bgzip压缩格式的VCF文件,若加入-u参数后则不进行bgzip压缩
Output options for mpileup format (without -g/-v): #不使用-g/-v参数时有效
-O, --output-BP output base positions on reads
#输出reads中的碱基位置信息
-s, --output-MQ output mapping quality
#输出比对质量
--output-QNAME output read names
-a output all positions (including zero depth)
#输出所有位点,包括覆盖深度为0的位点
-a -a (or -aa) output absolutely all positions, including unused ref. sequences
#输出所有位点,包括参考基因组中未比对上的位点
Output options for genotype likelihoods (when -g/-v is used): #当使用-g/-v参数时
-t, --output-tags LIST optional tags to output:
DP,AD,ADF,ADR,SP,INFO/AD,INFO/ADF,INFO/ADR []
#设置FORMAT和INFO的列表内容,以逗号分割,输出哪些可选标签
-u, --uncompressed generate uncompressed VCF/BCF output
#不对BCF进行压缩,通常用于管道中输入到下一个命令进行分析
SNP/INDEL genotype likelihoods options (effective with -g/-v): #SNP/Indel 基因分型参数
-e, --ext-prob INT Phred-scaled gap extension seq error probability [20]
#空位延伸的测序错误概率用Phred分数表示,不能大于20
-F, --gap-frac FLOAT minimum fraction of gapped reads [0.002]
#空位reads的最小比例
-h, --tandem-qual INT coefficient for homopolymer errors [100]
-I, --skip-indels do not perform indel calling
#不检测indel变异
-L, --max-idepth INT maximum per-file depth for INDEL calling [250]
# 进行INDEL calling的单文件最大深度
-m, --min-ireads INT minimum number gapped reads for indel candidates [1]
#候选INDEL的最小间隔的reads
-o, --open-prob INT Phred-scaled gap open seq error probability [40]
# 可作为gap open候选的测序错误分值的最大分值
-p, --per-sample-mF apply -m and -F per-sample for increased sensitivity
#同时设置-m和-F以提高结果的敏感性
-P, --platforms STR comma separated list of platforms for indels [all]
--input-fmt-option OPT[=VAL]
Specify a single input file format option in the form
of OPTION or OPTION=VALUE
--reference FILE
Reference sequence FASTA FILE [null]
Notes: Assuming diploid individuals. 假定是二倍体
samtools mpileup生成的典型结果
chr1 2841 A 11 ,,,...,.... BHIGDGIJ?FF
chr1 2842 C 12 ,$,,...,....^I. CFGEGEGGCFF+
chr1 2843 G 11 ,,...,..... FDDDDCD?DD+
chr1 2844 G 11 ,,...,..... FA?AAAA
文件一般包含6列,每一列的意义是:
1). 参考序列
2). 参考序列中的位置(坐标)
3). 参考序列对应位置的核苷酸
4). 比对上的reads的数量
5). 比对的具体情况
6)比对上的reads在该位置的mapping质量值。
2、samtools view
主要功能:sam和bam文件之间相互转换,针对bam文件进行相关操作。bam文件是sam文件的二进制格式,占据内存较小且运算速度快。
view的主要参数:
Usage: samtools view [options] | [region1 [...]]
默认情况下不加 region,则是输出所有的 region.
Options: -b output BAM
默认下输出是 SAM 格式文件,该参数设置输出 BAM 格式
-S input is SAM
默认下输入是 BAM 文件,若是输入是 SAM 文件,则最好加该参数,否则有时候会报错。
-h print header for the SAM output
默认下输出的 sam 格式文件不带 header,该参数设定输出sam文件时带 header 信息
-H print header only (no alignments)
只输出header部分,不输出比对结果
-u uncompressed BAM output (force -b)
该参数的使用需要有-b参数,能节约时间,但是需要更多磁盘空间。
-c Instead of printing the alignments, only count them and print the
total number. All filter options, such as ‘-f’, ‘-F’ and ‘-q’ ,
are taken into account.
只输出比对的数量。如果用了过滤选项,只计算符合条件的比对结果
-1 fast compression (force -b)
快速压缩
-x output FLAG in HEX (samtools-C specific)
输出的FLAG用十六进制表示
-X output FLAG in string (samtools-C specific)
输出的FLAG用字符串表示
-c print only the count of matching records
只输出匹配的记录数
-L FILE output alignments overlapping the input BED FILE [null]
输出与输入BED文件具有overlapping的比对结果
-t FILE list of reference names and lengths (force -S) [null]
使用一个list文件来作为header的输入
-T FILE reference sequence file (force -S) [null]
使用序列fasta文件作为header的输入
-o FILE output file name [stdout]
输出文件名
-R FILE list of read groups to be outputted [null]
指定需要输出的RG
-f INT required flag, 0 for unset [0]
只输出符合FLAG的比对结果
-F INT filtering flag, 0 for unset [0]
过滤掉符合FLAG的结果
Skip alignments with bits present in INT [0]
数字4代表该序列没有比对到参考序列上
数字8代表该序列的mate序列没有比对到参考序列上
-q INT minimum mapping quality [0]
最小比对质量分数
-l STR only output reads in library STR [null]
只输出某个库中的reads
-r STR only output reads in read group STR [null]
只输出某个RG中的reads
-s FLOAT fraction of templates to subsample; integer part as seed [-1]
用于采样的模板的比例,整数部分作为seed,如1234.60表示的是采样比例是0.60,而seed=1234
-? longer help
3、samtools flags
FLAG的十六进制和二进制表示
About: Convert between textual and numeric flag representation
Usage: samtools flags INT|STR[,...]
Flags:
0x1 PAIRED .. paired-end (or multiple-segment) sequencing technology
表示采用了PE测序技术,否则为SE技术
0x2 PROPER_PAIR .. each segment properly aligned according to the aligner
根据比对结果,表明序列片段有正常的pairing
0x4 UNMAP .. segment unmapped
比对结果说明片段没有比对到参考序列上
0x8 MUNMAP .. next segment in the template unmapped
模板对应的Pair片段没有比对到参考序列上
0x10 REVERSE .. SEQ is reverse complemented
序列与目标参考序列反向互补,说明是另一条链
0x20 MREVERSE .. SEQ of the next segment in the template is reversed
配对序列是反向互补
0x40 READ1 .. the first segment in the template
是模板中的第一个片段
0x80 READ2 .. the last segment in the template
是模板中的最后一个片段
0x100 SECONDARY .. secondary alignment
0x200 QCFAIL .. not passing quality controls
比对没有达到mapping质量的要求
0x400 DUP .. PCR or optical duplicate
是PCR复制的结果
0x800 SUPPLEMENTARY .. supplementary alignment
嵌合(chimeric)比对
1 : 代表这个序列采用的是PE双端测序
2: 代表这个序列和参考序列完全匹配,没有插入缺失
4: 代表这个序列没有mapping到参考序列上
8: 代表这个序列的另一端序列没有比对到参考序列上,比如这条序列是R1,它对应的R2端序列没有比对到参考序列上
16:代表这个序列比对到参考序列的负链上
32 :代表这个序列对应的另一端序列比对到参考序列的负链上
64 : 代表这个序列是R1端序列, read1;
128 : 代表这个序列是R2端序列,read2;
256: 代表这个序列不是主要的比对,一条序列可能比对到参考序列的多个位置,只有一个是首要的比对位置,其他都是次要的
512: 代表这个序列在QC时失败了,被过滤不掉了(# 这个标签不常用)
1024: 代表这个序列是PCR重复序列(#这个标签不常用)
2048: 代表这个序列是补充的比对(#这个标签不常用)
14:90631880|+-294|GGACTCCT+CTCACGTG#-1#4_2 419 1 10161560 0 96S31M 15 90631886 0 CNANNNANNANNNNNNCNNNNNGGGGNNCNNAAANTNNTNCNNNNGNANGNNNNNNNNNNNNNNNNNNNAANNNNNNGGNNNNNGNNNNNNNCNANTTTTTTTTTTTTTTTTTTTTTTTTTGAGACA >HE;A<@AAC<09>AJJJHCAJJJJC@>E;JJHEJJE9HF4CE>CE@7JCJ>HF>C;FCCEH497CAC@FHHEC@EA2F9-JJJJJJJJJJJJJJJJJJHJJJJJJHJJJJH@JJ MD:Z:31 RG:Z:FC17PD2 NM:i:0 AS:i:31 XS:i:31
0:11854234|-+194|ACTGTGTC+TACTGACA#-1#9_8 339 1 11854240 60 127M = 11854305 184 CTCCCTAAGCCCTTCCAGGTGGAGGTCTCCCAACTTACCCTTCTCCCTTTGCCATGTCCACAGCATGGAGGGGAGGGCACAGGATGGGGAAGTCACAGCCCCGCAGCCTGGCCTGCAGCTGGGGTCA JJJJIJIIHIJJGIHHIFGCHJGJGBGIJIHHIJEIEHGGHJJIJHIJJJJJJIIIJGHGHEBEGFHGHIIJICIHIHGIGJHGHGJIIFIHIGGGCIIFHHHGDFGIGIHIHEGHFFIEHJGD==A MC:Z:119M MD:Z:127 RG:Z:FC17PD2 NM:i:0 MQ:i:60 AS:i:127 XS:i:20
0:11854235|-+168|GGACTCCT+CTCGAGAA#-1#6_6 163 1 11854241 60 127M = 11854280 158 TCCCTAAGCCCTTCCAGGTGGAGGTCTCCCAACTTACCCTTCTCCCTTTGCCATGTCCACAGCATGGAGGGGAGGGCACAGGATGGGGAAGTCACAGCCCCGCAGCCTGGCCTGCAGCNGGGGTCAG HJIJFIHIGHHJHIFHIFGIJJGGEGIHIIHJJJJIJIJGHJIJJHHJJJIIFIIHHHIJJJICHGIDGHJHGHIJEEGIHIIFIIIJHHHEIIJHJGGIGGFEJFJIIJJIDGJJIH=G@CFDEGH MC:Z:119M MD:Z:118T8 RG:Z:FC17PD2 NM:i:1 MQ:i:60 AS:i:125 XS:i:20
samtools flags 419
0x1a3 419 PAIRED,PROPER_PAIR,MREVERSE,READ2,SECONDARY
samtools flags 339
0x153 339 PAIRED,PROPER_PAIR,REVERSE,READ1,SECONDARY
根据上面给结果可以看出,flag为419代表PAIREED(1), PROPER_PAIR(2),MREVRSE(32),READ2(128),SECONDARY(256),其中
PAIRED 代表这条序列采用双端测序, 其值为1;
PROPER_PAIR 代表这条序列完全匹配, 其值为2;
MREVRSE 代表这条序列对应的另一端序列比对到参考序列的负链上,其值为32;
READ2 代表这条序列是R2端序列,其值为128
SECONDARY 代表这条序列不是primary alignment, 其值为256
1 + 2 +32 +128 + 256 = 419
所以419对应的序列是R2端序列, 同理,339代表的序列是R1段序列。
4、samtools sort
Usage: samtools sort [options...] [in.bam]
Options:
-l INT Set compression level, from 0 (uncompressed) to 9 (best)
设置压缩比,从0(不压缩)到9(最大压缩)
-m INT Set maximum memory per thread; suffix K/M/G recognized [768M]
设置每个线程能使用的最大内存(单位为K/M/G)
-n Sort by read name
按照read名进行排序,默认按照参考序列的名字顺序和坐标排序
-o FILE Write final output to FILE rather than standard output
将结果写到文件FILE中
-T PREFIX Write temporary files to PREFIX.nnnn.bam
指定生成临时文件的前缀
--input-fmt-option OPT[=VAL]
Specify a single input file format option in the form
of OPTION or OPTION=VALUE
指定每个输入文件的格式
-O, --output-fmt FORMAT[,OPT[=VAL]]...
Specify output format (SAM, BAM, CRAM)
指定输出格式(SAM/BAM/CRAM)
--output-fmt-option OPT[=VAL]
Specify a single output file format option in the form
of OPTION or OPTION=VALUE
指定每个输出文件的格式
--reference FILE
Reference sequence FASTA FILE [null]
参考序列FASTA文件
-@, --threads INT
Number of additional threads to use [0]
指定线程数
5、samtools merge
功能:合并多个已经sort的bam文件
当有多个样本的bam文件时,可以使用samtools的merge命令将这些bam文件合并为一个排序的且保持所有输入记录并保持现有排序顺序的bam文件。
Usage: samtools merge [-nurlf] [-h inh.sam] [-b ] [ ... ]
将in1.bam等合并到out.bam文件中。
Options:
-n Input files are sorted by read name
输入文件按照read name排序
-r Attach RG tag (inferred from file names)
附上RG标记
-u Uncompressed BAM output
将BAM输出解压缩
-f Overwrite the output BAM if exist
覆盖存在的BAM文件
-1 Compress level 1
最小压缩
-l INT Compression level, from 0 to 9 [-1]
设置压缩水平
-R STR Merge file in the specified region STR [all]
合并在特定region的文件
-h FILE Copy the header in FILE to [in1.bam]
将FILE中的header复制到out.bam中
-c Combine @RG headers with colliding IDs [alter IDs to be distinct]
合并@RG header
-p Combine @PG headers with colliding IDs [alter IDs to be distinct]
合并@PG header
-s VALUE Override random seed
重载随机seed
-b FILE List of input BAM filenames, one per line [null]
输入BAM文件的列表,每行一个
--input-fmt-option OPT[=VAL]
Specify a single input file format option in the form
of OPTION or OPTION=VALUE
指定输入文件类型
-O, --output-fmt FORMAT[,OPT[=VAL]]...
Specify output format (SAM, BAM, CRAM)
指定输出文件类型
--output-fmt-option OPT[=VAL]
Specify a single output file format option in the form
of OPTION or OPTION=VALUE
指定单个输出文件类型
--reference FILE
Reference sequence FASTA FILE [null]
参考序列FASTA文件
-@, --threads INT
Number of additional threads to use [0]
设置线程数
6、samtools index
主要功能:对bam文件建立索引,但在此之前必须进行排序(sort),生成后缀是.bai的文件。
Usage: samtools index [-bc] [-m INT] [out.index]
Options:
-b Generate BAI-format index for BAM files [default]
为BAM文件创建bai索引
-c Generate CSI-format index for BAM files
为BAM文件创建csi索引
-m INT Set minimum interval size for CSI indices to 2^INT [14]
设置CSI索引的最小区间大小
-@ INT Sets the number of threads [none]
设置线程数
7、samtools faidx
功能:对fasta格式的文件建立索引,后缀名.fai。根据索引文件和序列文件,可以快速提取任意区域的序列文件。
fasta序列格式要求:每条序列,除了最后一行外,其他行的长度必须相同!
用法:
samtools faidx sequence.fa
最后生成一个sequence.fa.fai索引文件,一共5列,每列之间tab分割。
第一列:序列的名称
第二列:序列长度
第三列:第一个碱基的偏移量,从0开始计数
第四列:除了最后一行外,序列中每行的碱基数
第五列:除了最后一行外,序列中每行的长度(包括换行符)
我们可以有目的的从中提取序列:
提取1号染色体:
samtools faidx sequence.fa Chr1 > Chr1.fa
提取1号染色体100-200bp的序列:
samtools faidx sequence.fa Chr1:100-200 > Chr1_100_200.fa
8、samtools flagst
作用:reads的比对情况统计
Usage: samtools flagstat [options]
--input-fmt-option OPT[=VAL]
Specify a single input file format option in the form
of OPTION or OPTION=VALUE
指定输入文件格式
-@, --threads INT
Number of additional threads to use [0]
设置线程数
samtools flagstat FC17PD2.x.0_realigned.bam
8723046 + 0 in total (QC-passed reads + QC-failed reads)
#总共的reads数
870 + 0 secondary
0 + 0 supplementary
0 + 0 duplicates
8676910 + 0 mapped (99.47% : N/A)
#总体上reads的匹配率
8722176 + 0 paired in sequencing
#有多少reads是属于paired reads
4361088 + 0 read1
#reads1中的reads数
4361088 + 0 read2
#reads2中的reads数
7825350 + 0 properly paired (89.72% : N/A)
#完美匹配的reads数:比对到同一条参考序列,并且两条reads之间的距离符合设置的阈值
8630720 + 0 with itself and mate mapped
#paired reads中两条都比对到参考序列上的reads数
45320 + 0 singletons (0.52% : N/A)
#单独一条匹配到参考序列上的reads数,和上一个相加,则是总的匹配上的reads数。
3248 + 0 with mate mapped to a different chr
#paired reads中两条分别比对到两条不同的参考序列的reads数
1610 + 0 with mate mapped to a different chr (mapQ>=5)
#同上一个,只是其中比对质量>=5的reads的数量
9、samtools depth
作用:每个碱基位点的测序深度
Usage: samtools depth [options] in1.bam [in2.bam [...]]
Options:
-a output all positions (including zero depth)
输出包括测序深度为0的所有位点
-a -a (or -aa) output absolutely all positions, including unused ref. sequences
输出包含一直未用的参考序列
-b list of positions or regions
包含位点或区域的列表文件
-f list of input BAM filenames, one per line [null]
输入BAM文件列表,每行一个
-l read length threshold (ignore reads shorter than ) [0]
读长的阈值(忽略短于该长度的read)
-d/-m maximum coverage depth [8000]
最大深度
-q base quality threshold [0]
设置纳入计算的最小测序质量分值阈值
-Q mapping quality threshold [0]
比对质量分值的阈值
-r region
设置需要计算的区域
--input-fmt-option OPT[=VAL]
Specify a single input file format option in the form
of OPTION or OPTION=VALUE
输入文件格式
--reference FILE
Reference sequence FASTA FILE [null]
10、cat
作用:连接多个bam文件(不做排序)
Usage: samtools cat [-h header.sam] [-o out.bam]
用法:
samtools cat -o out.bam in1.ban in2.bam
11、split
作用:根据read group 分割bam文件
用法:
samtools split test.sort.bam