流程!流程!流程!
写流程最重要的,当然是流程管理工具。在这里我的选择是snakemake,一个语法简单,结构清晰,并且方便其他人修改参数的python工具。其实基于python的流程框架有很多,应用广泛,有更适合处理数据的nextflow,但是需要fifo。snakemake基于DSL,语法上主要由rule构成,功能上几乎就是python版本的make。
snakemake 第一部分 我们来安装snakemake,讲解snakemake最基本的单元:rule,以及如何测试我们的rule
snakemake的安装:
snakemake我不习惯单独给它在conda下创建环境,因为我的环境都是按照不同测序的需要去配置的。所以我们可以先激活ChIP-seq环境,并在激活的环境下安装snakemake
source activate chip
conda install snakemake
也可以自行下载snakemake,手动安装,地址为
https://bitbucket.org/snakemake/snakemake-tutorial/get/v3.11.0.tar.bz2
第一个rule:
想要在某个目录下执行snakemake,需要先创建一个Snakefile,在Snakefile文件内对流程进行编写。
vim Snakefile
snakemake整个的流程,由一个个单独的rule组成,也是它容易阅读的主要原因。
rule主体上有三个必须的部分,分别是输入(input),输出(output)和命令(shell)
一个简单的例子,正常我们需要将下载得到的.sra 文件转为 .fastq文件,才能进行后续的质量控制和比对,以GSEXXXXX文件为例,如果直接将fastq文件储存在相同的目录下,命令是:
fastq-dump GSEXXXXX
现在放到我们的Snakefile里:
rule sra_fastq:
input:
'sra/GSEXXXXX.sra'
output:
'sratofastq/GSEXXXXX.fastq'
shell:
'''
fastq-dump {input}
'''
snakemake的分级方式遵循python的缩进形式,也就是四个空格。
rule 后接rule的名字,例子里面只有一种input和output文件类型,但实际情况可能有更多的种类,不同的文件类型之间用逗号+换行隔开。例子中输入的只有也只有一个单独的文件,如果我们要同时处理多个.sra文件用{sample}代替,snakemake会自动识别文件类型并逐个进行处理。保存文件的修改,我们来测试一下!
snakemake的测试:
为了方便开发者进行测试,snakemake内置了伪执行命令,可以通过反馈的信息随时进行修改。
snakemake -n
snakemake -np
snakemake -nr
-n: 不真正执行
-p:输出每一步需要执行的shell
-r:输出每一步的执行原因
这里我们使用
snakemake -np sra/GSEXXXXX.fastq
请注意,-np后面的文件是你的output文件,而不是input!
如果你的文件位置输入错误,或者是弄错了文件名,会报错 MissingRuleException当然也有可能是找不到rule的参数或者是软件的安装位置,需要仔细的检查。如果命令本身哪里有错,伪执行是发现不了的,它主要是帮助你检查各个配置文件的位置是否和你输入的一致。