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