BBMap (aligner for DNA/RNAseq)是一个开源的工具。

BBDuk(Adapter/Quality Trimming and Filtering)

“Duk”代表使用 Kmers 进行净化。BBDuk 速度极快、可扩展且内存效率高,同时保持比其他工具更高的灵敏度和特异性。kmers模式包括:Trimming(切除)/Filtering(过滤)/Masking(掩饰) ,如果未设置 ktrim、kmask 和 ksplit,则默认行为是 kfilter。所有 kmer 处理模式都是互斥的。BBDuk 不可以同时进行两种kmers操作,但是它可以在同一个操作中进行质量修整和污染物过滤等。BBDuk 还可以执行各种其他过滤程序,例如复杂性过滤、长度过滤、gc 含量过滤、平均质量过滤、纯洁度过滤(chastity-filtering)和按 N 数过滤。(complexity filtering, length filtering, gc-content filtering, average-quality filtering, chastity-filtering, and filtering by number of Ns.)

kmer参数详解:

  • ktrim=f :修剪reads以删除匹配参考 kmers 的碱基。取值:f(不要修剪),r(向右修剪),l(向左修剪)

“ktrim=r” is for right-trimming (3’ adapters), “ktrim=l” is for left-trimming (5’ adapters), and “ktrim=N” just masks the kmers with “N”

  • kmask= : 将比对上ref kmers的碱基用其他标识去替换(Replace bases matching ref kmers with another symbol.)。允许任何非空白字符。’kmask=lc’ 将掩码碱基转换为小写。
  • “k” :特殊的 kmers 大小,最大为整段查找的序列的长度(如adapter的长度)。
  • “mink” :允许在reads末尾使用较短的 kmers。 (for example, k=11 for the last 11 bases).
  • “hdist”:汉明距离(”hamming distance”),hdist=1表示允许一个错配,(范围:0-3)
  • “literal”:example,”literal=ACTGGT,TTTGGTG” ,可以替代”ref=file”
  • “skipr1”:Don’t do kmer-based operations on read 1(跳过read1)
  • “skipr2”:Don’t do kmer-based operations on read 2(跳过read2)
  • BBTools包在 /bbmap/resources/ 中包含 Truseq 和 Nextera 的adapter序列,如 truseq.fa.gz、truseq_rna.fa.gz 和 nextera.fa.gz。
  • rcomp:“rcomp=t”或“rcomp=f”指定 BBDuk 是否查找参考序列的反向互补序列以及正向序列;默认情况下,它会同时查找两者。

    质量控制(Quality trimming):

  • trimq:进行Quality trimming, “trimq=10” 表示使用Phred算法,如果平均质量值低于 Q10 的序列将被修剪掉,也可以设置为浮点型,如7.3。

  • “qtrim=rl” 表示会修剪左右两边;您可以改为设置“qtrim=l”,“qtrim=r”,“qtrim=f”或“qtrim=w”。

    1. # Quality trimming:
    2. bbduk.sh -Xmx1g in=reads.fq out=clean.fq qtrim=rl trimq=10

    污染过滤(Contaminant filtering):

  • outm:输出比对上的序列

  • stats:统计文件,统计有多少污染序列,以及占比情况

    1. # remove所有比对上phix.fa的reads,比对长度为31,运行一个错配
    2. bbduk.sh -Xmx1g in=reads.fq out=unmatched.fq outm=matched.fq ref=phix.fa k=31 hdist=1 stats=stats.txt

    碱基替换/掩盖(Kmer masking):

  • ktrim=N: just masks the kmers with “N”,将在ecoli.fa序列中含有 salmonella.fa 的序列用N来替代,也可以用其他的,如”X”

    1. # 将大肠杆菌中也由沙门氏菌共享的所有长度25序列替换为N
    2. bbduk.sh -Xmx1g in=ecoli.fa out=ecoli_masked.fq ref=salmonella.fa k=25 ktrim=N rskip=0

    内存设置

    BBDuk能够处理 fasta, fastq, scarf, qual 及 sam 文件,包括 raw, gzipped, or bzipped格式。

  • -Xmx:内存设置, -Xmx20g will specify 20 gigs of RAM, and -Xmx200m will specify 200 megs.

  • threads=auto :设置线程数
  • prealloc=f 在表中预分配内存。允许更快的表加载和更有效的内存使用,以供大量参考。
  • monitor=f 如果该进程崩溃,则终止该进程。 monitor=600,0.01 表示会在 1% 的使用率下 600 秒后杀死进程。

参考来源:http://seqanswers.com/forums/showthread.php?t=41057

BBDuk2

BBDuk2与BBDuk类似,但是kfilter, kmask, and ktrim能在一个操作中进行。
部分参数解释:

  • fref= Comma-delimited list of fasta reference files for filtering. rref= Comma-delimited list of fasta reference files for right-trimming.
  • lref= Comma-delimited list of fasta reference files for left-trimming.
  • mref= Comma-delimited list of fasta reference files for masking.
  • fliteral= Comma-delimited list of literal sequences for filtering.
  • rliteral= Comma-delimited list of literal sequences for right-trimming.
  • lliteral= Comma-delimited list of literal sequences for left-trimming.
  • mliteral= Comma-delimited list of literal sequences for masking.
  • mingc=0 Discard reads with GC content below this.
  • maxgc=1 Discard reads with GC content above this.
  • hammingdistance=0 (hdist) Maximum Hamming distance for ref kmers (subs only).
    1. Memory use is proportional to (3*K)^hdist.
  • qhdist=0 Hamming distance for query kmers; impacts speed, not memory.
  • editdistance=0 (edist) Maximum edit distance from ref kmers (subs and indels). Memory use is proportional to (8*K)^edist.
  • hammingdistance2=0 (hdist2) Sets hdist for short kmers, when using mink.
  • qhdist2=0 Sets qhdist for short kmers, when using mink.
  • editdistance2=0 (edist2) Sets edist for short kmers, when using mink.

汉明距离

汉明距离:两个等长字符串之间的汉明距离是两个字符串对应位置的不同字符的个数。换句话说,它就是将一个字符串变换成另外一个字符串所需要替换的字符个数。字符串a与b之间的汉明距离表示为 d(a,b)。如下示例:
010 ⊕ 011 = 001, d(010, 011) = 1.
010 ⊕ 101 = 111, d(010, 101) = 3.
010 ⊕ 111 = 101, d(010, 111) = 2.