模塊化之level 1---簡單封裝
Snakemake包裝器存儲庫是可重復使用包裝器的集合,可用于快速使用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下載相應的包裝器袋倔。因此戏蔑,0.2.0可以替換為您要使用的version標記或commit id假栓。由于包裝器實現(xiàn)中的更改不會自動傳播到您的工作流程中,因此可確笔〕牛可重復性。替代地俯在,例如竟秫,對于開發(fā)而言,包裝程序指令還可以指向完整的URL朝巫,包括本地URL file://
鸿摇。
每個包裝器都定義必需的軟件包和版本。結合--use-conda
Snakemake 的標志劈猿,這些將自動部署拙吉。
模塊化之level2---大型分析流程的整合
對于應集成到通用工作流程中的較大的可重復使用的部件,建議編寫小的Snakefile揪荣,然后通過include語句將其包含在主Snakefile中筷黔。在這種設置中,所有規(guī)則都共享一個公共配置文件仗颈。
include: "path/to/other/snakefile"
默認的目標規(guī)則(通常稱為all-rule)不會受到include的影響佛舱。也就是說,無論您有多少個包含在第一個規(guī)則之上的內(nèi)容挨决,它始終將是Snakefile中的第一個規(guī)則请祖。包含是相對于出現(xiàn)它們的Snakefile目錄的。例如脖祈,如果以上Snakefile駐留在directory中my/dir肆捕,則Snakemake將在處搜索include my/dir/path/to/other/snakefile,而與工作目錄無關盖高。
模塊化之level 3---構建子工作流程
除了包括其他工作流程的規(guī)則外慎陵,Snakemake還允許依賴于其他工作流程的輸出作為子工作流程。在執(zhí)行當前工作流程之前喻奥,將獨立執(zhí)行子工作流程冻璃。因此转绷,Snakemake可以確保在必要時創(chuà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
關鍵字顿痪。如果workdir
未指定镊辕,則假定與當前相同。(可選的)定義configfile
允許根據(jù)需要參數(shù)化子工作流蚁袭。從我們依賴的子工作流輸出的文件將標有otherworkflow
功能(請參見規(guī)則a的輸入)征懈。此功能自動確定文件的絕對路徑(在此處../path/to/otherworkflow/test.txt
)。
在執(zhí)行時揩悄,snakemake首先嘗試通過執(zhí)行子工作流來創(chuàng)建(或更新卖哎,如果需要)test.txt
(以及所有其他可能提到的依賴項)。然后執(zhí)行當前的工作流程删性。這也可以遞歸發(fā)生亏娜,因為子工作流也可能有其自己的子工作流。