一、背景介绍
snakemake是一种用于自动化流程的开源工具,是一款基于python3的软件。在生物信息学、高通量测序数据分析、大规模数据处理等领域非常流行。
snakemake的官网:Snakemake | Snakemake 8.16.0 documentationhttps://snakemake.readthedocs.io/en/stable/
二、sankemake的安装
conda activate base
conda install -c conda-forge mamba
conda deactivate
mamba create -n snakemake -c conda-forge -c bioconda snakemake
conda activate snakemake
snakemake --help
conda deactivate
#删除环境
conda remove --all -n snakemake#这里采用一种新的安装软件mamba,说是可以更快的加载和下载conda安装软件的速度,你也可以直接用conda安装
三、snakemake的书写规则
依据不同rule的输入和输出将其连接起来,形成一个完整的pipeline。
当检测到input,就执行相应的rule;检测到output,就跳过相应的rule。因此这个pipeline的逻辑是这样的,不是你要写一个rule的逻辑关系,而是用输入和输出控制。
snakemake在执行时,会默认执行第一条规则,因此我们会先写rule all。
之后依据rule all找逻辑,再执行。不是按照从上到下依次执行,因此rule的书写先后不影响执行,但是一般我们会依次书写方便阅读。(若第一个不是rule all,则默认执行第一个rule,然后找逻辑,最后退出)
若一个rule的输入是多个其他rule的结果,因此,这个rule一定会在所有输入都有条件下才会执行。
四、snakemake两种典型格式
rule fastp:input:cleandata_raw_R1="path/to/{sample}.R1.fq.gz"cleandata_raw_R2="path/to/{sample}.R2.fq.gz"output:b="{sample}.bam"params:n_d= 4shell:"bwt men -t {params[0]} {input[0]} {input[1]} > {output[0]}"#或者是这样写,如下:
rule fastp:input:"path/to/{sample}.R1.fq""path/to/{sample}.R2.fq"output:"{sample}.bam"params:"4" shell:"bwt men -t {params[0]} {input[0]} {input[1]} > {output[0]}"
rule sort:input:"path/to/{dataset}.txt"output:"{dataset}.sorted.txt"log:"{dataset}.sort.log"run:with open(output.b, "w") as out:for l in sorted(open(input.a)):print(l,file=out)#或者如下,不过还是建议赋给一个变量名。rule sort:input:file1="path/to/{dataset}.txt"output:file2="{dataset}.sorted.txt"log:"{dataset}.sort.log"run:with open(output.b, "w") as out:for l in sorted(open(input.a)):print(l,file=out)
rule格式:
- 起始行(规则命名)rule+名称
- 使用TAB键缩进/四个空格
- 双引号""的使用
- 输入和输出的定义:直接写/赋给一个变量名
- 输入和输出的引用:起始下标是0(和python语法一致,从零开始)。使用花括号{}。