前言
在生信的領域中贮竟,無論是哪一個領域的事情蚓哩,其實在大多數(shù)的時候都是遵循一個流程進行的规婆。包括其中gatk所推薦一些成為Best-practices的流程泽裳。
正如WGS或WES的Germline位點calling流程所說到的一系列的處理方法隘谣,從生信人一般來說接觸到的最原始的fastq文件一直生成到vcf位點文件的流程增拥。其中其實涉及到的軟件就只有一個GATK提供得到jar即JAVA文件。
也許只有一個樣本的數(shù)據(jù)時很好處理的寻歧,但一次實驗設計往往不會只有一個樣本掌栅。很可能會有非常大量的樣本提供讓你進行流程化的管理和分析。那我們要采用什么方法批量分析呢码泛?猾封?
大部分人可能會說用shell腳本,這也是一個方法噪珊,畢竟在早期的時候大部分生信人除了用perl以外就是用shell來處理數(shù)據(jù)晌缘。
我在這里簡單介紹一下基于python的一個用于流程管理--luigi庫的用法齐莲。
當然在開始之前,我也羅列一下我曾經(jīng)接觸過的流程化的軟件語言磷箕。
- Jenkinsfile
- Snakemake
正文
后來我使用的python的一個流程化管理的軟件就是luigi选酗。
luigi本身做好了大部分的包裝,基本上一個類就是一個任務岳枷,任務與任務之間有一定的聯(lián)系芒填,例如是否有依賴,A任務是否等待B任務的結束才執(zhí)行空繁,A任務是否用B任務的輸出作為輸入殿衰。
而一個流程化管理需要的基本上就幾點:
- 方便重用,參數(shù)由外部輸入
- 方便構建關系圖家厌,容易處理任務依賴
- 能自動檢測任務完成狀況播玖,可以重新接續(xù)中斷的任務,從中斷處重新開始任務饭于。
- 能夠檢測當前任務完成進度蜀踏。
luigi基本上可以做到這幾點,而且一個對python精通的生信人也可以更好debug和修改內(nèi)容掰吕。
使用心得
接下來的內(nèi)容可能涉及l(fā)uigi本身的使用果覆,希望在學會使用luigi后再進行閱讀。
-
靈活的使用Parameter可以解決大部分的任務依賴的問題殖熟。例如局待,你有一個pair的數(shù)據(jù),最簡單的例子就是Tumor和Normal的數(shù)據(jù)菱属。簡單的任務鏈接應該是兩個樣本的數(shù)據(jù)钳榨,在某個任務中合并起來進行分析,但是每個樣本也有各自單獨的分析纽门。
那么就是2個樣本薛耻,但是有3個相近類似的分析
因為luigi是一個發(fā)散式的流程傳遞,所以我在最后的分析處是一個“壺口”赏陵,兩種分析分為兩個任務饼齿,兩個任務分別發(fā)起1個、2個任務蝙搔,然后各自又繼續(xù)使用相同的前處理流程缕溉。
流程圖概覽
正如這樣的流程圖所說(當然這里的流程圖十分復雜,導致很難理清楚結構吃型。)证鸥,這個流程圖也是由luigi生成給我的一個任務關聯(lián)的一個展示。 尋找合適的scheduler接口,這個的意思就是luigi會把這次的pipelines的進行狀況進行一個發(fā)送敌土,它會在開啟了luigid服務的電腦上以一個網(wǎng)頁的形式提供任務管理镜硕。但是由于鏈接問題运翼,如果這個鏈接斷了返干,很可能會導致原本后臺運行的一個pipelines全局奔潰。
暫時也就這么多血淌,之后有時間繼續(xù)寫一點
在查找相關材料的過程中找到了一些介紹luigi的文章矩欠。也提供給大家進行學習
luigi學習
當然最好的材料還是luigi的源代碼,(不是官方文檔悠夯,官方文檔寫的有點少癌淮。)
大家有什么luigi的問題也可以發(fā)評論詢問一下我,但是luigi由于涉及高級python的使用方法沦补,可能在debug上非常困難乳蓄,希望大家先描述好問題。