模塊化之level 1---簡單封裝
Snakemake包裝器存儲庫是可重復(fù)使用包裝器的集合,可用于快速使用Snakemake規(guī)則和工作流中的流行工具
input:
"mapped/{sample}.bam"
output:
"mapped/{sample}.sorted.bam"
params:
"-m 4G"
threads: 8
wrapper:
"0.2.0/bio/samtools/sort"
在這里,Snakemake將自動從https://bitbucket.org/snakemake/snakemake-wrappers/src/0.2.0/bio/samtools/sort/wrapper.py下載相應(yīng)的包裝器。因此,0.2.0可以替換為您要使用的version標(biāo)記或commit id。由于包裝器實現(xiàn)中的更改不會自動傳播到您的工作流程中,因此可確保可重復(fù)性。替代地,例如,對于開發(fā)而言,包裝程序指令還可以指向完整的URL,包括本地URL file://
。
每個包裝器都定義必需的軟件包和版本。結(jié)合--use-conda
Snakemake 的標(biāo)志,這些將自動部署。
模塊化之level2---大型分析流程的整合
對于應(yīng)集成到通用工作流程中的較大的可重復(fù)使用的部件,建議編寫小的Snakefile,然后通過include語句將其包含在主Snakefile中。在這種設(shè)置中,所有規(guī)則都共享一個公共配置文件。
include: "path/to/other/snakefile"
默認(rèn)的目標(biāo)規(guī)則(通常稱為all-rule)不會受到include的影響。也就是說,無論您有多少個包含在第一個規(guī)則之上的內(nèi)容,它始終將是Snakefile中的第一個規(guī)則。包含是相對于出現(xiàn)它們的Snakefile目錄的。例如,如果以上Snakefile駐留在directory中my/dir,則Snakemake將在處搜索include my/dir/path/to/other/snakefile,而與工作目錄無關(guān)。
模塊化之level 3---構(gòu)建子工作流程
除了包括其他工作流程的規(guī)則外,Snakemake還允許依賴于其他工作流程的輸出作為子工作流程。在執(zhí)行當(dāng)前工作流程之前,將獨立執(zhí)行子工作流程。因此,Snakemake可以確保在必要時創(chuàng)建或更新當(dāng)前工作流程所依賴的所有文件。這允許在原本單獨的數(shù)據(jù)分析之間創(chuàng)建鏈接。
subworkflow otherworkflow:
workdir:
"../path/to/otherworkflow"
snakefile:
"../path/to/otherworkflow/Snakefile"
configfile:
"path/to/custom_configfile.yaml"
rule a:
input:
otherworkflow("test.txt")
output: ...
shell: ...
在這里,子工作流被命名為“ otherworkflow”,它位于工作目錄中../path/to/otherworkflow
。snakefile位于同一目錄中,并稱為Snakefile
。如果snakefile
未為子工作流定義,則假定它位于workdir位置并稱為Snakefile
,因此,在上面我們也可以省略snakefile
關(guān)鍵字。如果workdir
未指定,則假定與當(dāng)前相同。(可選的)定義configfile
允許根據(jù)需要參數(shù)化子工作流。從我們依賴的子工作流輸出的文件將標(biāo)有otherworkflow
功能(請參見規(guī)則a的輸入)。此功能自動確定文件的絕對路徑(在此處../path/to/otherworkflow/test.txt
)。
在執(zhí)行時,snakemake首先嘗試通過執(zhí)行子工作流來創(chuàng)建(或更新,如果需要)test.txt
(以及所有其他可能提到的依賴項)。然后執(zhí)行當(dāng)前的工作流程。這也可以遞歸發(fā)生,因為子工作流也可能有其自己的子工作流。