WDL工作流操作

本文旨在介绍如何创建运行WDL工作流。

如何创建工作流?

填写名称和描述

  1. 点击GeneDock平台上“工作流” –> “创建工作流”;

  2. 在跳出弹窗中,填写“工作流名称”、选择“工作流类型”和“描述”信息;

    GeneDock支持两种工作流类型,一种是普通类型,指GeneDock自主研发的工作流描述语言(即GWL);另外一种是WDL,即 Workflow Description Language。这里我们选择WDL

  3. 点击“保存”按钮。

导入WDL描述文件

点击”保存“按钮后,进入工作流编辑页面。

编辑窗口支持以“导入”的方式将WDL代码导入到编辑框内,或者直接拷贝代码到编辑框。

如该工作流有依赖文件,例如dmeo.wdl.zip文件,可点击“选择依赖”导入依赖文件。

用户可通过“导出”按钮导出WDL代码。

用户编辑完工作流后,可保存工作流代码,在保存过程中系统会检查WDL代码的语法。如有异常请按照提示修改代码或者通过搜索引擎关键字修复。


注意:在写runtime内容的时候需要填写符合GeneDock系统要求的格式:

runtime{
        docker: "public/fastqc:latest" 
        memory: "1024m"
        disk: "10240m"
        cpu: 1
}

docker字段的值为GeneDock的镜像地址,需要提前上传到GeneDock私有仓库。请参考文档如何制作镜像。该字段的填写格式为 <account>/<镜像名称>:<镜像标签>

memory字段为String类型,填写格式为”数字m”,m代表MB、g代表GB。

disk字段同memory字段一致

cpu字段为Int型,目前GeneDock系统支持的cpu个数范围是1~64

保存工作流

  1. 点击右上角“保存”按钮;
  2. 用户可以对“描述”再次更改,如不改变本工作流的版本,选择覆盖本次更新,否则系统会新增工作流版本。
  3. 点击右下角“确定”按钮。

如何运行工作流?

  1. 在“我的工作流”页面,找到对应工作流,点击“运行”按钮;
  2. 设置输入文件,设置参数项配置,设置输出目录等;
  3. 用户可修改任务名称

运行工作流会提交一个任务,你可以通过“任务/报告”查看任务的运行状态、参数、日志和报告。详见任务操作

一些小贴士:

  1. WDL工作流只支持将所有的文件输出到一个目录下
  2. 非文件的输出内容会存储到输出目录的”output.json”
  3. 建议可以在本地使用womtool或者miniwdl提前检查好WDL文件

WDL工作流示例

此为工作流“编辑”页面配置示例

#version 1.0
task Fastq2Ubam {  
    File fastq1  
    File fastq2  
    String sample_name  
    command <<<  
        set -o pipefail  
        set -e
        cd /var/data/
        #set env  
        echo "fastq1: ${fastq1}"  
        export FASTQ1=${fastq1}  
        export FASTQ2=${fastq2}  
        export SAMPLE_NAME=${sample_name}  
        export OUTPUT_BAM=${sample_name}_unaligned.bam
        GATK=/gatk/gatk.jar  
        mkdir out_dir
        java -Xmx3G -jar $GATK FastqToSam \
            --FASTQ=$FASTQ1 \
            --FASTQ2=$FASTQ2 \
            --OUTPUT=$OUTPUT_BAM \
            --SAMPLE_NAME=$SAMPLE_NAME
        date
        export UBAM_PREFIX=ubam_prefix
        java -Xmx3G -jar $GATK SplitSamByNumberOfReads \
            --INPUT=$OUTPUT_BAM \
            --OUTPUT=out_dir \
            --SPLIT_TO_N_FILES=3 \
            --OUT_PREFIX=$UBAM_PREFIX  
        ls -l out_dir
        ls -l ./
    >>>  
    runtime {  
        docker: "multitest/bcs-gatk:4.0.10.1"
        memory: "4096m"
        disk: "10240m"
        cpu: 2
    }  
    output {  
        Array[File] bam_file = glob("out_dir/*.bam")
        String name = sample_name            
    }  
}  
# WORKFLOW DEFINITION  
workflow wf_Fastq2Ubam {  
    File fastq1  = "public:/demo-data/WES-Germline_NA12878_smallsize/NA12878-NGv3-LAB1360-A_1000000_1.fastq.gz"
    File fastq2  = "public:/demo-data/WES-Germline_NA12878_smallsize/NA12878-NGv3-LAB1360-A_1000000_2.fastq.gz"
    String sample_name = "Test_sample"
    call Fastq2Ubam {  
        input:  
        fastq1=fastq1,  
        fastq2=fastq2,  
        sample_name=sample_name,  
    }  
# Outputs that will be retained when execution is complete  
    output {  
        Array[File] bam_file = Fastq2Ubam.bam_file
        String out_sample = Fastq2Ubam.name
    }  
}