Skip to content

Samtools 编译安装及使用

Samtools是一组实用程序,用于与Heng Li编写的SAM,BAM和CRAM格式的短DNA序列读取比对进行交互并进行后处理。这些文件是由短读取对齐器(如BWA)作为输出生成的。提供了简单和高级工具,支持复杂任务,例如变体调用和对齐查看以及分类,索引,数据提取和格式转换。 本教程将介绍如何在SonmiHPC集群中使用Intel OneAPI编译器来编译安装该工具,并介绍简单的使用方法。

源码下载

使用wget下载源码:

shell
wget https://github.com/samtools/samtools/releases/download/1.20/samtools-1.20.tar.bz2
wget https://github.com/samtools/samtools/releases/download/1.20/samtools-1.20.tar.bz2

国内由于网络问题无法下载或者速度过慢的话,可以自己本地用代理下载后再上传到集群中。

然后解压源码压缩包:

shell
tar xvf samtools-1.20.tar.bz2
tar xvf samtools-1.20.tar.bz2

切换到解压出来的文件夹中:

shell
cd samtools-1.20
cd samtools-1.20

编译安装

先安装依赖的库:

shell
dnf install ncurses-devel bzip2-devel xz-devel -y
dnf install ncurses-devel bzip2-devel xz-devel -y

执行以下的命令进行编译安装:

shell
./configure --prefix=/share/apps/samtools
make
make install
./configure --prefix=/share/apps/samtools
make
make install

为了集群中其他用户也可以共同使用该程序,修改安装文件夹权限:

shell
chmod -R 755 /share/apps/samtools
chmod -R 755 /share/apps/samtools

Modulefile编写

为了方便在集群中使用,将编译安装好的程序通过Module模块加载的方式提供给集群中其他用户使用,可以编写如下的Modulefile文件:

shell
mkdir -p /share/apps/modulefiles/samtools
mkdir -p /share/apps/modulefiles/samtools

在该文件夹目录下新增一个新的文件:

shell
cd /share/apps/modulefiles/samtools && vim 1.20
cd /share/apps/modulefiles/samtools && vim 1.20

新增文件内容如下:

#%Module###########################################
set modulefilename "Samtools"
set modulefilever  "1.20"

set min_tcl_ver 8.4
if { $tcl_version < $min_tcl_ver } {
    puts stderr " "
    puts stderr "ERROR: This modulefile requires tcl $min_tcl_ver or greater."
    puts stderr "Your system reports that tclsh version $tcl_version is installed."
    exit 1
}

if { [ module-info mode load ] } {
    puts stderr "Loading $modulefilename version $modulefilever"
}

if { [ module-info mode ] == "unload" || [ module-info mode ] == "remove" } {
    puts stderr "Removing $modulefilename version $modulefilever"
    puts stderr "Use  to view any remaining dependent modules."
}

prepend-path PATH /share/apps/samtools/bin
prepend-path MANPATH /share/apps/samtools/share
#%Module###########################################
set modulefilename "Samtools"
set modulefilever  "1.20"

set min_tcl_ver 8.4
if { $tcl_version < $min_tcl_ver } {
    puts stderr " "
    puts stderr "ERROR: This modulefile requires tcl $min_tcl_ver or greater."
    puts stderr "Your system reports that tclsh version $tcl_version is installed."
    exit 1
}

if { [ module-info mode load ] } {
    puts stderr "Loading $modulefilename version $modulefilever"
}

if { [ module-info mode ] == "unload" || [ module-info mode ] == "remove" } {
    puts stderr "Removing $modulefilename version $modulefilever"
    puts stderr "Use  to view any remaining dependent modules."
}

prepend-path PATH /share/apps/samtools/bin
prepend-path MANPATH /share/apps/samtools/share

保存后,设置一下权限:

shell
chmod -R 755 /share/apps/modulefiles
chmod -R 755 /share/apps/modulefiles

用户使用如下的命令就可以看到该模块:

[root@sonmi samtools]# module avail 
--------------- /share/apps/modulefiles ----------------
samtools/1.20
[root@sonmi samtools]# module avail 
--------------- /share/apps/modulefiles ----------------
samtools/1.20

需要加载该模块的时候执行如下的命令即可:

module load samtools/1.20
module load samtools/1.20

使用示例

创建一个示例文件夹,并且该文件夹中上传一个input.fastq文件。

在该目录下创建提交 submit.sh 脚本如下:

shell
#!/bin/bash
#SBATCH --job-name=samtools
#SBATCH --partition=sonmi
#SBATCH --output=%j.out
#SBATCH --error=%j.err
#SBATCH --nodelist=compute-0-0
#SBATCH --exclusive
#SBATCH --time=02:00:00

ulimit -s unlimited
ulimit -l unlimited

module load samtools/1.20
cd $SLURM_SUBMIT_DIR

samtools import input.fastq > output.bam
#!/bin/bash
#SBATCH --job-name=samtools
#SBATCH --partition=sonmi
#SBATCH --output=%j.out
#SBATCH --error=%j.err
#SBATCH --nodelist=compute-0-0
#SBATCH --exclusive
#SBATCH --time=02:00:00

ulimit -s unlimited
ulimit -l unlimited

module load samtools/1.20
cd $SLURM_SUBMIT_DIR

samtools import input.fastq > output.bam

使用如下的命令提交任务:

sbatch submit.sh
sbatch submit.sh

参考链接

  1. Samtools官方网站
  2. Benchmark

本站内容未经授权禁止转载
联系邮箱: [email protected]