一、介绍

  • Bowtie2 是将测序后的 reads 与长参考组的比对工具 (适用于将长度大约为50~1000bp的reads与相对较长的基因组, 如哺乳动物,进行比对)。
  • 通常是比较基因组学(包括 variation calling,ChIP-seq,RNA-seq,BS-seq)管道的第一步。
  • 可以处理非常长的 Reads(即10~100kb),但它针对近期测序仪产生的 Reads 长度和误差模式进行了优化,如Illumina HiSeq 2000,Roche 454和Ion Torrent仪器。
  • Bowtie2使用FM索引(基于Burrows-Wheeler Transform 或 BWT)对基因组进行索引,以此来保持其占用较小内存。对于人类基因组来说,内存占用在3.2G左右。Bowtie2 支持间隔,局部和双端对齐模式。可以同时使用多个处理器来极大的提升比对速度。

如果目的是对齐两个非常大的序列(例如两个基因组),请考虑使用MUMmer
如果目的是与相对较短的参考序列(如细菌基因组)非常灵敏的比对,可以使用Bowtie 2完成,但也可以考虑使用NUCmerBLATBLAST等工具。当参考基因组很长时,这些工具可能会非常缓慢,但当参考基因组很短时通常就足够了。

二、安装

这里提供两种方法,选择一种安装即可,强烈建议使用Conda方式安装

1. Conda 安装

conda install -y bowtie2

这里需要安装Conda (一款用于安装多数生物信息分析软件的管理软件,重要的是可以解决软件的依赖问题) : Conda 安装使用图文详解

2. 传统安装

下载

http://bowtie-bio.sourceforge.net/bowtie2/index.shtml

在Linux系统下将上述的链接下载到本地

sudo wget https://jaist.dl.sourceforge.net/project/bowtie-bio/bowtie2/2.3.4.1/bowtie2-2.3.4.1-linux-x86_64.zip

解压

unzip bowtie2-2.3.4.1-linux-x86_64.zip

设置环境变量

  • 打开环境变量设置文件
sudo vim /etc/environment
  • 添加软件 bin 目录的路径,并用 : 隔开,如下图

  • 执行source命令,使配置立即生效

sudo source /etc/enviroment

三、使用

1、参考基因组比对

单末端

"bowtie2 -p 10 -x genome_index -U input.fq | samtools sort -O bam -@ 10 -o - > output.bam

双末端

bowtie2 -p 10 -x genome_index -1 input_1.fq -2 input_2.fq | samtools sort -O bam -@ 10 -o - > output.bam

需要注意的是:

  • 这条命令把bowtie2 生成的sam文件通过管道|传递到samtools,将sam转换为bam文件,省去中间sam文件的空间占用
  • genome_index 指的是用于bowtie2的索引文件(如下图),而不是参考基因组本身,构建过程参考后文。
  • genome_index 需要指定路径及其共用文件名,比如我的索引文件放在/data/ref/bowtie2/mm10目录下,但是需要输入的参数为/data/ref/bowtie2/mm10/mm10。最后一个mm10指的是共用文件名。
    mark

必需参数

参数解释
-x 参考基因组索引的基名。基本名称是任何索引文件的名称,但不包括最终的.1.bt2/ .rev.1.bt2/等。bowtie2在当前目录中首先查找指定的索引,然后在BOWTIE2_INDEXES环境变量中指定的目录中查找。
-1 以逗号分隔的包含队友1的文件列表(文件名通常包含_1),例如-1 flyA_1.fq,flyB_1.fq。使用此选项指定的序列必须与文件中的文件和读取的文件一致<m2>。读数可能是不同长度的混合。如果-指定,bowtie2将从“标准输入”或“标准输入”文件句柄读取队友1。
-2 逗号分隔的包含队友2(文件名通常包括_2)的文件列表,例如-2 flyA_2.fq,flyB_2.fq。使用此选项指定的序列必须与文件中的文件和读取的文件一致<m1>。读数可能是不同长度的混合。如果-指定,bowtie2将从“标准输入”或“标准输入”文件句柄中读取队友2。
-U 逗号分隔的包含未配对读取的文件列表要对齐,例如lane1.fq,lane2.fq,lane3.fq,lane4.fq。读数可能是不同长度的混合。如果-指定,bowtie2则从“标准输入”或“标准输入”文件句柄中读取数据。
-S 将SAM对齐文件写入。默认情况下,对齐被写入“标准输出”或“标准输出”文件句柄(即控制台)。

可选参数(常用)

参数解释
-q读取(与指定<m1><m2><s>)是FASTQ文件。FASTQ文件通常有扩展名.fq.fastq。FASTQ是默认格式。另见:--solexa-quals--int-quals
-p/–threads NTHREADS启动NTHREADS并行搜索线程(默认值:1)。线程将在单独的处理器/内核上运行,并在解析读取和输出对齐时进行同步。搜索对齐高度平行,加速接近线性。提高-p增加的蝴蝶结2的内存占用。例如,当与人类基因组索引对齐时,-p从1增加到8会将内存占用增加数百兆字节。该选项仅在bowtiepthreads库链接时才可用(即,如果BOWTIE_PTHREADS=0未在构建时指定)。
–local在这种模式下,Bowtie 2不要求整个读取从一端到另一端对齐。相反,为了达到最大可能的对齐分数,可以从末端省略一些字符(“软裁剪”)

2、构建索引

官方索引

wget ftp://ftp.ccb.jhu.edu/pub/data/bowtie2_indexes/mm10.zip
unzip mm10.zip
rm mm10.zip make_mm10.sh

其他物种的索引:https://benlangmead.github.io/aws-indexes/bowtie

自建索引

这里以构建 *M. musculus*, UCSC mm10 为例

wget http://hgdownload.cse.ucsc.edu/goldenPath/mm10/bigZips/chromFa.tar.gz 
tar -zxvf chromFa.tar.gz 
cat *.fa > mm10.fa
bowtie2-build mm10.fa mm10

3、一个完整例子

  • 下载参考基因组
wget http://hgdownload.cse.ucsc.edu/goldenPath/mm10/bigZips/chromFa.tar.gz 
tar -zxvf chromFa.tar.gz 
cat *.fa > mm10.fa
  • 构建bowtie2索引文件
bowtie2-build mm10.fa mm10
  • 运行bowtie2 获取 SAM 文件
bowtie2 -p 6 -3 5 --local -x mm10 -1 example_1.fastq -2 example_2.fastq -S example.sam

这行命令表示使用–local的比对模式,使用 mm10 的索引;这里是双末端测序,所以将待比对文件 example_1.fq example_2.fa 分别输入,以 example.sam 的文件输出

如果为单末端测序的话,上述命令换为:

bowtie2 -p 6 -3 5 --local -x mm10 -U /opt/sdc/SRR/example.fastq -S example.sam

  • SAM 文件转为 BAM 文件
samtools view -bS example.sam > example.bam
  • BAM 文件排序
samtools sort example.bam -o example.sorted.bam

4. 其他命令

  • --no-unal:可以控制输出结果中是否包含未比对的查询序列。如果指定–no-unal,Bowtie2将在输出结果中删除那些没有被比对的查询序列。如果未指定该选项,Bowtie2将输出两个文件,一个是经比对的序列文件,另一个是未被比对的查询序列文件。对于一些序列分析的应用场景来说,删除未被比对的查询序列可以帮助减少输出结果的大小,并且可以更好地聚焦于比对的序列分析和研究。当然,在其他情况下,保留未被比对的查询序列是很有帮助和必要的。
  • end-to-end:端对端比对模式,即将整个查询序列与参考序列进行比对。在该模式下,Bowtie2将尽可能多的比对整个查询序列到参考序列,并且通常会产生更准确的比对结果。如果未指定该选项,则Bowtie2将采用局部比对模式。在局部比对模式下,Bowtie2会从查询序列的任意位置开始对参考序列进行比对。如果需要考虑到配对读取之间的信息,则可以使用–end-to-end模式,因为使用局部比对模式可能会导致配对读取的错配和差异较大。然而,–end-to-end模式的比对速度可能会较慢,因此应根据具体情况进行选择。
  • --fast:指定输入文件中的数据是否已经过质量和过滤。如果输入的序列数据已经被适当地过滤和质量控制,并且不需要再次进行过滤和质量控制,则可以使用该选项。在这种情况下,Bowtie2将跳过预处理步骤,直接开始比对。这样可以使程序的运行速度更快。注意,如果输入文件中的数据没有经过适当的过滤和质量控制,则使用–fast选项可能会导致比对结果失真。对于一些高质量的数据,可以使用–fast选项以减少计算时间。但是,在工作流程中,建议始终对输入数据进行质量过滤和控制。
  • --un-conc:用于将未能匹配为一对的末端读取输出到一个文件或目录。这些未能匹配的末端读取对应于SAM记录中设置了FLAGS 0x4位和0x40或0x80位(取决于是第一个配对末端还是第二个配对末端)。写入文件时,会在文件名中添加.1和.2字符串以区分配对末端的第一个和第二个末端。如果指定的参数包含%号,则该符号将被1或2替换以生成每个伴侣的文件名。如果指定的参数中没有%号,则会将.1或.2添加到文件名的最后一个句点之前,以生成每个伴侣的文件名。该选项提供了一种方便的方法来过滤出不能配对的末端读取,从而帮助用户更精细地研究和分析序列数据。

5. 报错解决

5.1 错误信息:bowtie2-align exited with value 1

解决:

  • 检查fa文件是否解压缩
  • 检查构建出的索引是否有0字节文件
  • 检查fa文件的md5,文件是否完整
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐