【WDL】2. 基础结构

WDL语言基本概念

两级结构:workflow, task
image.png

runtime:镜像,memory等

output可以没有,如重命名等操作。

A、B无顺序要求

WDL脚本基本结构

task

1. 输入

文件、数值、字符串等信息

task fastq_to_bam{
	File fastq
	File ref
	command{
	bwa mem ${ref} ${fastq} > my_temp.sam
	samtools view -B my_temp.sam > my_temp.bam
	rm my_temp.sam
	}
}

2. 命令行command

类似于linux shell,支持多行。如上

更多复杂的命令,条件循环等,支持管道(但不建议,若某步出错,正常退出)。

3. 输出output

规定输出结果,并为后续操作提供可以引用的信息;

需要规定输出的类型;

支持WDL自定义函数的引用。

执行顺序:按上一步output——>下一步input

若上一步task1没有输出,如何保证task2等顺序?

需要在task1中定义一个output,再在后面task定义为input。

4. 运行参数 runtime

记录运行中使用的资源信息,包括docker、CPU、GPU、memory等信息

当输入文件相对复杂时,如何限定资源?

5. meta信息

记录辅助信息,如作者、联系方式等

workflow

提交作业的基本单位。

其结构是对task的组织(call task)

虽然是按顺序结构书写,但调度器对WDL解析时,会按照并行方式解析。

import "src/call_cnv.wdl" as cnv_tools

workflow demo{
	File myfile1
	File myfile2 ...
	call task1{input:...}
	call task2{input:...}
	if(...){...}
	scatter(...){...}
	output{
		File output1 = output_dir1
		File output2 = output_dir2
	}
}

WDL结构与Shell不同,其书写前后关系并不代表执行的前后关系。执行顺序是由task之间的依赖关系来确定的。

WDL控制语句

if 控制语句

与一般语言区别不大,但语法更严格,其判断部分必须为Bool类型,不能为字符串等类型,如if(T)。

scatter 并发语句

与一般语言的for/while不同,可同时执行多条相同形式的命令,从而减少计算时间,增加硬件设备的利用率。

小结

  • WDL执行顺序和一般语言有明显区别;

  • 基本语法(task、workflow的基本结构);

  • 代码除了给解析器看,也要给人看。

https://www.bilibili.com/video/BV1mr4y1S7YL/?spm_id_from=333.788.recommend_more_video.-1

posted @ 2022-05-11 23:57  生物信息与育种  阅读(287)  评论(0编辑  收藏  举报