snakemake是乙個用來編寫任務流程的工具,用python編寫的,因此其執行的流程指令碼也比較通俗易懂,易於理解。
1、安裝snakemake
安裝snakemake的方法有多種,snakemake官方推薦的是conda,安裝方法如下:
conda install -c bioconda snakemake
2、乙個簡單的snakemake指令碼
雖然snakemake廣泛的應用於生物資訊方面的流程編寫,但是snakemake的應用並不侷限於編寫生物資訊學的流程,這裡以乙個簡單的合併檔案的例子開始介紹snakemake的簡單使用。
#首先我們建立兩個檔案
$ echo "here is hello." > hello.txt
$ echo "here is world." > world.txt
#接下來開始編寫我們的snakefile
rule concat: # 這裡的rule可視為snakemake定義的關鍵字,concat使我們自定義的這一步任務的名稱
input: # input同樣是snakemake的關鍵字,定義了在這個任務中的輸入檔案
expand(".txt", file=["hello", "world"]) #expand是乙個snakemake定義的替換命令
output: # output也是snakemake的關鍵字,定義輸出結果的儲存檔案
"merged.txt"
shell: # 這裡表示我們下面的命令將在命令列中執行
"cat > "
#最後就可以在snakefile的路徑執行snakemake命令即可
$ snakemake
$ cat merge.txt
here is hello.
here is world.
在上面的snakefile指令碼中,rule
、input
、output
、shell
、expand
均為snakemake中的關鍵字或者命令。同時snakefile中的每乙個rule
其實都可以看作是乙個簡單的shell指令碼,通過snakefile將多個rule
組織在一起並按照我們定義的順序來執行。另外,在output
中的結果檔案可以是未存在目錄中的檔案,這時會自動建立不存在的目錄。
1、rule
rule
是snakefile中最主要的部分。如上面的例子所說,每乙個rule定義了一系列pipe中的一步,每乙個rule都可以當作乙個shell指令碼來處理,一般主要包括input
、output
、shell
3個部分。同時還有許多上面沒有列出來的用法:
rule all
。不同於其他的rule,在rule all
裡面一般不會去定義要執行的命令,他一般用來定義最後的輸出結果檔案。除了rule all
中定義的檔案外最後輸出結果不會儲存任何中間檔案。例如將上面的指令碼改成如下檔案則沒有輸出結果:
rule all:
input:
#"merged.txt" 取消注釋後,則能正常輸出檔案
rule concat:
input:
expand(".txt", file=["hello", "world"])
output:
"merge.txt"
shell:
"cat > "
wildcards
。用來獲取萬用字元匹配到的部分,例如對於萬用字元"/file..txt"
匹配到檔案101/file.a.txt
,則
就是101,
就是a。
threads
。通過在rule裡面指定threads
引數來指定分配給程式的執行緒數,egthreads: 8
。
resources
。可用來指定程式執行的記憶體,eg.resources: mem_mb=800
。
priority
。可用來指定程式執行的優先順序,預設為0,eg.priority: 20
。
log
。用來指定生成的日誌檔案,eg.log: "logs/concat.log"
。
params
。指定程式執行的引數,eg.params: cat="-n"
,呼叫方法為。
run
。在run
的縮排區域裡面可以輸入並執行python**。
scripts
。用來執行指定指令碼,eg.scripts: "rm_dup.py"
temp
。通過temp
方法可以在所有rule
執行完後刪除指定的中間檔案,eg.output: temp("f1.bam")
。
protected
。用來指定某些中間檔案是需要保留的,eg.output: protected("f1.bam")
。
ancient
。重複執行執行某個snakefile時,snakemake會通過比較輸入檔案的時間戳是否更改(比原來的新)來決定是否重新執行程式生成檔案,使用ancient方法可以強制使得結果檔案一旦生成就不會再次重新生成覆蓋,即便輸入檔案時間戳已經更新,eg.input: ancient("f1.fastq")
。
rule dependencies。可通過快捷方式指定前乙個rule的輸出檔案為此rule的輸入檔案:
rule a:
input: "path/to/input"
output: "path/to/output"
shell: ...
rule b:
input: rules.a.output #直接通過rules.a.output 指定rule a的輸出
output: "path/to/output/of/b"
shell: ...
report
。使用snakemake定義的report
函式可以方便的將結果嵌入到乙個html檔案中進行檢視。
2. configuration
每計算一次資料都要重寫一次snakefile有時可能會顯得有些繁瑣,我們可以將那些改動寫入配置檔案,使用相同流程計算時,將輸入檔案的檔名寫入配置檔案然後通過snakefile讀入即可。
配置檔案有兩種書寫格式——json和yaml。在snakefile中讀入配置檔案使用如下方式:
configfile: "path/to/config.json"
configfile: "path/to/config.yaml"
# 也可直接在執行snakemake命令時指定配置
$ snakemake --config yourparam=1.5
在shell命令中直接呼叫config檔案中的內容的話,不需要引號,如config[a]
而不是config["a"]
。
集群計算配置
一般講所有的引數配置寫入snakefile後直接在snakefile所在路徑執行snakemake
命令即可開始執行流程任務。一些常用的引數:
--snakefile, -s 指定snakefile,否則是當前目錄下的snakefile
--dryrun, -n 不真正執行,一般用來檢視snakefile是否有錯
--printshellcmds, -p 輸出要執行的shell命令
--reason, -r 輸出每條rule執行的原因,預設false
--cores, --jobs, -j 指定執行的核數,若不指定,則使用最大的核數
--force, -f 重新執行第一條rule或指定的rule
--forceall, -f 重新執行所有的rule,不管是否已經有輸出結果
--forcerun, -r 重新執行snakefile,當更新了rule時候使用此命令
#一些視覺化命令
$ snakemake --dag | dot -tpdf > dag.pdf
#集群投遞
snakemake --cluster "qsub -v -cwd -q 節點佇列" -j 10
# --cluster /-c cmd: 集群執行指令
# qusb -v -cwd -q, 表示輸出當前環境變數(-v),在當前目錄下執行(-cwd), 投遞到指定的佇列(-q), 如果不指定則使用任何可用佇列
# --local-cores n: 在每個集群中最多並行n核
# --cluster-config/-u file: 集群配置檔案
參考:snakemake官方文件 Vim 使用筆記
set hlsearch set nohlsearch 搜尋後清除上次的加亮 nohl nohlsearch 拷貝 很有用的一句話,規定了格式選項,讓它換行不自動空格 set formatoptions tcrqn set fo r set noautoindent 再 shift insert 正...
xemacs使用筆記
xemacs使用筆記 xemacs emacs的下一代,由lucid原創 from debian參考手冊.由於不知道什麼時候刪掉了emacs的乙個重要檔案.每次都沒法安裝好.突然發現了xemacs,於是決定使用看看.本人還是菜鳥,僅供交流 我使用的ubuntu系統,所以就直接apt get inst...
TreeView使用筆記
treeview由節點構成,建樹通過對treeview.items屬性進行操作。items是乙個ttreenodes物件,這是乙個ttreenode集。一 針對ttreenodes,也就是 treeview.items,有這些屬性 1 count,節點個數。2 item index 通過index得...