snakemake–最好用的流程管理工具之一,你值得拥有
还在对着实验室上古大佬留下脚本发愁吗?还在头疼大shell套小shell的屎山吗?还在为找不到问题步骤的shell而烦恼吗?快跟着小果把snakemake学起来吧。
1-Snakemake的安装
首先当然是创建一个snakemake的文件夹啦,文件管理还是很重要滴。
$ mkdir snakemake
$ cd snakemake
然后下载解压官方的示例文档
$ tar –wildcards -xf snakemake-tutorial-data.tar.gz
看到那个environment.yaml了吗,那就是教员佛祖真主赐予我等菜鸡救赎,
Snakemake连运行环境都帮我们配置好了,github下载的大神pipeline直接运行mamba(不要慌,mamba是conda的强力替代品)
$ mamba env create –name snakemake –file environment.yaml
$ conda activate snakemake
官方示例文件结构如下图所示
接下来就到了激动人心的流程搭建了
rule bwa_map: #定义第一条规则,命名为bwa_map
input: #input :输入文件
“data/genome.fa”,
“data/samples/A.fastq”
output: #output:输出文件
“mapped_reads/A.bam”
shell: #shell:运行的shell脚本,也可用run:运行python脚本
“bwa mem {input} | samtools view -Sb – > {output}”
当然,实际项目怎么可能只有一个样本,我们就不能直接写样本名了,snakemake支持使用通配符来批量运行命令,修改一下上面的代码,当然,sample可以做个yaml文件,或者在shell里写个for,这里容小果偷个懒
rule bwa_map: #定义第一条规则,命名为bwa_map
input: #input :输入文件
“data/genome.fa”,
“data/samples/{sample}.fastq”
output: #output:输出文件
“mapped_reads/{sample}.bam”
shell: #shell:运行的shell脚本,也可用run:运行python脚本
“bwa mem {input} | samtools view -Sb – > {output}”
流程流程,当然不能只有一个规则啦。接下来再写个sort规则,在头文件把sample定义了,小样本测试可以这样偷懒,大样本还是要yaml文件哦
sample = [“A”, “B”, “C”]
rule bwa_map: #定义第一条规则,命名为bwa_map
input: #input :输入文件
“data/genome.fa”,
“data/samples/{sample}.fastq”
output: #output:输出文件
“mapped_reads/{sample}.bam”
shell: #shell:运行的shell脚本,也可用run:运行python脚本
“bwa mem {input} | samtools view -Sb – > {output}”
rule samtools_sort:
input:
“mapped_reads/{sample}.bam”
output:
“sorted_reads/{sample}.bam”
shell:
“samtools sort -T sorted_reads/{wildcards.sample} ”
“-O bam {input} > {output}”
rule samtools_index:
input:
“sorted_reads/{sample}.bam”
output:
“sorted_reads/{sample}.bam.bai”
shell:
“samtools index {input}”
现在,见证奇迹的时刻
$ snakemake –dag sorted_reads/{A,B}.bam.bai | dot -Tsvg > dag.svg
这才是snakemake的精髓有木有,直接生成可视化的流程图,妈妈再也不怕小果看流程shell一脸懵了,天下就没有我小果看不懂的流程。