samtools 使用说明

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). 比对的具体情况

  • ","表示与参考序列的正链匹配
  • "."表示与参考序列的负链匹配
  • "[ATCGN]"表示在该位置上的碱基与参考序列的正链不匹配(mismatch)
  • "[atcgn]"表示在该位置上的碱基与参考序列的负链不匹配(mismatch)
  • "+[ATCGNatcgn]"表示在该位置插入了序列,大小写分别表示正链或者负链
  • "-[ATCGNagcgn]"表示在该位置发生了DEL,大小写分别表示对应正链还是负链
  • "^"表示一个read的开始,其后跟的ASCII码对应的是这个碱基的mappling质量的PHRED分值,再后面的才是这个位置的碱基
  • "$"表示一个read的结束,修饰的是其前面的碱基
  • "*"表示模糊(ambiguous)碱基

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

你可能感兴趣的:(bioinformation)