先來看一則招聘信息:

關於生物信息流程,不同的分類標准可能得到不一樣的分類結果,比如:
A review of bioinformatic pipeline frameworks這篇綜述中,按照隱式公約框架、明確框架、配置框架和基於類的框架等對現代的生物信息流程框架進行分類。
生信分析流程構建的幾大流派按照腳本語言流、Common Workflow language 語言流、Makefile流、配置文件流、Jupyter notebook和R markdown流等分為不同流派。
依我看,生物信息流程無非分為舊方法和新方法兩類(廢話~~~),分別了解一下。
1. 腳本語言+配置文件
傳統的方法,也是目前最常用的流程搭建方法,尤其是在工業界。
腳本語言
- 數據處理:Python/Perl/Java
- 模塊實現:Shell
- 統計繪圖:R
配置文件
- json
- xml
- yaml
- 自定義文本文件,如config
缺點:
- 不同的流程可能使用不同的腳本語言、對使用者的計算機技能要求較高
- 腳本類的工作流執行,無專業的解析引擎,運行狀態無法監控
- 腳本健壯性要求高,如果錯誤處理沒有做好,可能造成時間和資源的浪費
2. CWL/WDL
最新流行的流程工具,但實際上在工業界並沒有普及。
CWL(Common Workflow Language)普通工作流語言和WDL(Workflow Description Language)工作流描述語言。定義每一個計算過程(腳本)的輸入和輸出,然后通過連接這些輸入和輸出,構成數據分析流程。
可以在多個平台執行,比如本地服務器、SGE 集群,雲計算平台等,可以做到一次編寫多處執行。Linux版本最有名的如snakemake, nextflow,bpipe等。圖形界面版的如Galaxy,一些商業公司的雲平台(拖拉圖標即可)。
Cromwell 是 Broad Institute 開發的工作流管理引擎,支持 WDL 和 CWL 兩種工作流描述語言。
CWL中snakemake的一個示例語法:
configfile: "config.yaml"
rule all:
input:
"report.html"
rule bwa_map:
input:
"data/genome.fa",
lambda wildcards: config["samples"][wildcards.sample]
output:
temp("mapped_reads/{sample}.bam")
params:
rg="@RG\tID:{sample}\tSM:{sample}"
log:
"logs/bwa_mem/{sample}.log"
threads: 8
shell:
"(bwa mem -R '{params.rg}' -t {threads} {input} | "
"samtools view -Sb - > {output}) 2> {log}"
rule report:
input:
"calls/all.vcf"
output:
"report.html"
run:
from snakemake.utils import report
with open(input[0]) as vcf:
n_calls = sum(1 for l in vcf if not l.startswith("#"))
report("""
An example variant calling workflow
""", output[0], T1=input[0])
可參考博文:
https://www.jianshu.com/p/8e57fd2b81b2
WDL語法結構:
- workflow
- task
- call
- command
- output
示例:
workflow myWorkflow {
call myTask
}
task myTask {
command {
echo "hello world"
}
output {
String out = read_string(stdout())
}
}
用法可參考博文:https://wenlongshen.github.io/2018/09/15/Pipelining-Solution-2/
3.docker
docker不是一個流程方法,只是個封裝的容器工具而已,所以這個分類比較牽強,只是上面兩種的延伸。我們把自己開發的流程做成Docker鏡像,以便使用和分享。
以ChIP-seq等分析時常用的peak calling工具MACS2為例。
- 下載官方的Ubuntu鏡像作為起始鏡像
docker pull ubuntu
,建立一個文件夾用於存放制作鏡像過程中所用到的文件,下載MACS2的源碼包並新建Dockerfile文件 - 執行docker build -t macs2:ubuntu.v1 .(慢)
- 構建成功后,查看並嘗試使用該鏡像
- 將該鏡像上傳到自己的docker hub
具體可參考博文:
https://wenlongshen.github.io/2018/09/08/Pipelining-Solution-1/
Ref:
https://www.jianshu.com/p/41f377e20ff7
https://developer.aliyun.com/article/716546
https://zhuanlan.zhihu.com/p/51699674