防止自己下次忘了,作为笔记使用,整理自网络。
参考自Snakemake:简单好用的生信流程搭建工具 | | 百迈客生物 (biomarker.com.cn)
参考自conda安装与使用 - 知乎 (zhihu.com)
1. Conda 的安装及使用
1.1 Conda 的下载
从国内的清华源下载 Conda 的安装文件
wget -c https://mirrors.bfsu.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh
1.2 Conda 的安装
bash Miniconda3-latest-Linux-x86_64.sh
第一次安装一路yes确认即可,安装后,~/.bashrc 中已经有了conda的路径,不需要添加环境变量
如果添加环境变量的话,则运行
vim ~/.bashrc
#在文件的最后一行添加
export PATH = $PATH:/where/the/conda/bin #找到conda安装路径下bin所在路径
此时运行conda create将会报错
Anaconda创造虚拟环境时"An HTTP error occurred when trying to retrieve this URL."
这时则需要自己为conda添加channel,具体方法如下
#添加镜像
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/
添加完镜像之后,查看频道信息
conda config --set show_channel_urls yes #显示已经安装的频道
conda config --get channels #查看安装的频道
vim ~/.condarc #编辑conda的配置文件
#然后删除最后一行,-defaults
至此,conda 的安装已经完成, 运行conda则会出现下面的提示信息
usage: conda [-h] [-V] command ...
conda is a tool for managing and deploying applications, environments and packages.
Options:
positional arguments:
command
clean Remove unused packages and caches.
compare Compare packages between conda environments.
config Modify configuration values in .condarc. This is modeled after the git config command. Writes to the
user .condarc file (/home/qiang/.condarc) by default.
create Create a new conda environment from a list of specified packages.
help Displays a list of available conda commands and their help strings.
info Display information about current conda install.
init Initialize conda for shell interaction. [Experimental]
install Installs a list of packages into a specified conda environment.
list List linked packages in a conda environment.
package Low-level conda package utility. (EXPERIMENTAL)
remove Remove a list of packages from a specified conda environment.
uninstall Alias for conda remove.
run Run an executable in a conda environment.
search Search for packages and display associated information. The input is a MatchSpec, a query language
for conda packages. See examples below.
update Updates conda packages to the latest compatible version.
upgrade Alias for conda update.
optional arguments:
-h, --help Show this help message and exit.
-V, --version Show the conda version number and exit.
conda commands available from other packages:
content-trust
env
2. snakemake 的安装
2.1 snakemake 安装
conda create -n snakemake_env python snakemake
#创建一个名字为snakemake_env的虚拟环境,安装snakemake所需要的python3及snakemake
激活及关闭环境的命令
#进入snakemake_env 环境
conda actiater snakemaker_env
#退出 snakemake_env 环境
conda deactivate
#查看安装的环境列表
conda info --envs
如果你的conda安装很慢或者获取不了最新版本的软件,可以使用下面的命令安装:
conda install -c conda-forge mamba
mamba create -c conda-forge -c bioconda -n snakemake_env python snakemake
conda activate snakemake_env
snakemake --help
2.2 利用测试数据进行测试
2.2.1 数据准备
安装完成后,安装目录下,会产生了一个snakemake-tutorial文件夹,打开文件夹,看里面是否有完整的示例文件
如果文件不完全,则删除里面的所有信息,然后重新下载解压缩
#下载示例信息
wget https://bitbucket.org/snakemake/snakemake-tutorial/get/v5.2.3.tar.bz2 --no-check-certificate
#解压缩并拷贝到snakemake-tutorial文件下
tar -xf v5.2.3.tar.bz2
cd snakemake-snakemake-tutorial-966f4bd988bb/
cp -r * ../
#删除下载的文件及解压缩后的文件
cd ../
rm -r snakemake-snakemake-tutorial-966f4bd988bb/
rm v5.2.3.tar.bz2
2.2.2 创建工作流文件: snakefile
#创建Snakefile文件
touch Snakefile.py
## dry run (不真正执行,只显示执行内容及顺序)
snakemake -n
当然工作流文件 Snakefile 文件名并不是固定的,位置也不是固定的。当你的工作流文件就在当前目录下,且名称正好是 Snakefile 时,就可以像上面的示例一样,不用指定具体的工作流文件,snakemake 会自动调取当前路径的名为 Snakefile 的文件去执行。如果你要执行其他路径的 Snakefile 或者其他的文件名的工作流文件,可以使用 -s 参数,例如:
#执行test.py文件,建议将工作流文件命名为 py 文件
snakemake -s -n test.py
rule bwa: #定义第一条规则,命名为bwa
input: # input:指定输入
"data/genome.fa",
"data/samples/A.fastq"
output: #output:指定输出
"mapped/A.bam"
shell: #指定执行方式,这里有三种方式:shell, run, script
"bwa mem {input} | samtools view -Sb -> {output}"
使用通配符升级规则
在我们实际运用中,我们可能会有很多的数据来进行比对,不可能把所有的文件名都写下来,因此我们需要使用通配符替代我们的文件名
rule bwa: #定义第一条规则,命名为bwa
input: # input:指定输入
"data/genome.fa",
"data/samples/{sample}.fastq"
output: #output:指定输出
"mapped/{sample}.bam"
shell: #指定执行方式,这里有三种方式:shell, run, script
"bwa mem {input} | samtools view -Sb -> {output}"
然后dry run一下,这里需要加上规则的输出才能让含有通配符的程序正常运行
snakefile -n -s Snakefile.py mapped/{A,B,C}.bam # mapped/{A,B,C}.bam 指的时规则的输出
运行结果如下
添加sort规则
#添加sort 规则
rule sort:
input:
"mapped/{sample}.bam"
output:
"mapped/{sample}.sorted.bam"
shell:
"samtools sort -o {output} {input}"
添加索引规则·
rule samtools_index:
input:
"mapped/{sample}.sorted.bam"
output:
"mapped/{samle}.sorted.bam.bai"
shell:
"samtools index {input}"
添加calling 规则
1. 首先在工作流文件开头定义一个变量:
samples = ["A", "B", "C"]
2. 然后使用 snakemake 的内置函数 expand:
bam=expand("mapped/{sample}.sorted.bam", sample=samples)
添加calling 规则
rule calling:
input:
fa="data/genome.fa",
bam=expand("mapped/{sample}.sorted.bam", sample=samples),
bai=expand("mapped/{sample}.sorted.bam.bai",sample=samples)
output:
"calling/all.vcf"
shell:
"samtools mpileup -g -f {input.fa} {input.bam}| "
"bcftools call -mv ->{output}"
调用自己写的脚本
当然,有时候在某个步骤想实现的功能并不能用简单的几句命令来实现,而且你自己也已经有了一个现成的脚本了,那么你就可以直接调用该脚本实现相应功能
rule calling:
input:
fa="data/genome.fa",
bam=expand("mapped/{sample}.sorted.bam", sample=samples),
bai=expand("mapped/{sample}.sorted.bam.bai",sample=samples)
output:
"calling/all.vcf"
shell:
"script/stat.py" # 调用自己已经写好的脚本
最重要的一条规则:ALL
书写完上面的代码直接运行的话会直接报错,需要在规则文件的最签名添加一行
rule all:
input:
"calling/all.vcf" #这代表的是最后一个rule的输出文件,这样最能将所有的规则运行一遍了
生成可视化流程图
snakemake --dag -s Snakefile.py |dot -Tpdf >test.pdf
#初次使用可能出现如下报错
There is no layout engine support for "dot"
Perhaps "dot -c" needs to be run (with installer's privileges) to register the plugins?
#则需要运行
sudo dot -c
#输入密码即可
完整的rule文件如下
samples=["A","B","C"]
rule all:
input:
"calling/all.vcf"
#bam = expand("mapped/{sample}.sorted.bam", sample=samples)
#rule bwa: #定义第一条规则,命名为bwa
# input: # input:指定输入
# "data/genome.fa",
# "data/samples/A.fastq"
# output: #output:指定输出
# "mapped/A.bam"
# shell: #指定执行方式,这里有三种方式:shell, run, script
# "bwa mem {input} | samtools view -Sb -> {output}"
rule bwa: #定义第一条规则,命名为bwa
input: # input:指定输入
"data/genome.fa",
"data/samples/{sample}.fastq"
output: #output:指定输出
"mapped/{sample}.bam"
shell: #指定执行方式,这里有三种方式:shell, run, script
"bwa mem {input} | samtools view -Sb -> {output}"
#添加sort 规则
rule sort:
input:
"mapped/{sample}.bam"
output:
"mapped/{sample}.sorted.bam"
shell:
"samtools sort -o {output} {input}"
rule samtools_index:
input:
"mapped/{sample}.sorted.bam"
output:
"mapped/{sample}.sorted.bam.bai"
shell:
"samtools index {input}"
rule calling:
input:
fa="data/genome.fa",
bam=expand("mapped/{sample}.sorted.bam", sample=samples),
bai=expand("mapped/{sample}.sorted.bam.bai",sample=samples)
output:
"calling/all.vcf"
shell:
"samtools mpileup -g -f {input.fa} {input.bam}| "
"bcftools call -mv ->{output}"
运行完整的程序
snakemake -p -c all -s Snakefile.py
可能出现报错,没有安装相应的软件,可以通过conda instal 安装
conda install bwa samtools bcftools