先来看一则招聘信息:
关于生物信息流程,不同的分类标准可能得到不一样的分类结果,比如:
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 ID:{sample} SM:{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