WDL 流程语言编写及进阶(标准结构/线性输入输出/默认参数设置/判断语句)

目录

简介

1、WDL 的标准结构

2、进阶版:线性输入

3、进阶版:默认参数输入如何设置

4、进阶版:判断功能


简介

WDL 定义了一个可执行的流程,它由call调用的一系列task组成,task 是一个模块化的一系列命令,可以复用,由call 语句调用在workflow block里面。task本身定义在外围,它可以import,建议这么书写,增加可保护性。task调用顺序及书写顺序不决定流程执行task的顺序,但是建议顺序书写。task层的变量可以引用workflow层的变量,也可以直接传参。

WDL结构中,变量分为两层,task层和workflow层,最基本的变量有两个,一种是File,对应文件,一种是String对应字符。

官网:https://support.terra.bio/hc/en-us/articles/360037128512-Conditionals-if-else-

Task aliasing 

https://support.terra.bio/hc/en-us/articles/360037128592-Task-aliasing

 

1、WDL 的标准结构

基本包含如下几个部分:workflow、call、task、command、output

示例如下:

workflow myworkflow{
        call myTask
}

task myTask{
   command {
           echo "hello world"
   }
   output {
           String out=read_string(stdout())
   }
}

2、进阶版:线性输入

如果要做上一个task的结果用于下一个task的input,则下一个input需要写成上一个task的output的名字,例如输入1)中的ouput:myTask.out (.out取决于output定义的名字)

示例如下:

workflow blastaln {
   File Ref
   String Refid
   String Sample
   File InputF
   File script

   call blast{
     input:
     refid=Refid,
     sampleName=Sample,
     Input=InputF
   }

   call filter{
     input:
     Input=blast.rawout,
     Script=script,
     sample=Sample
   }
}


task blast {
  String refid
  String sampleName
  File Input

  command {
  /usr/local/bin/blastn  -db /pwd/02.Test/01.WDL/03.gatk/${refid} -query ${Input} -out /pwd/02.Test/01.WDL/03.gatk/${sampleName}.out.test.xls -evalue 0.05 -outfmt 7
  }
}
  output {
  File rawout="${sampleName}.out.xls"
  }

 task filter {
  File Input
  String sample
  File Script

  commad  {
  python ${script} -i ${Onput} -o ${sample}.out.xls
  }

  output {
  File result="${sample}.out.xls"
  }
 }

3、进阶版:默认参数输入如何设置

如果一个流程里面有一些脚本和文件都算默认的,平时不需要在json文件中指明,但是需要更改的时候也能改,应该怎么做呢:

在task部分中,写这种类型的文件的全路径,在workflow部分和call部分的时候则不写这些文件,那么在json文件中就会出现dafault参数了。

示例:

workflow test_rmdup {
        File bam
        File bai
        String sample

        call RMDUP as rmduping {
                input:
                bam=bam,bai=bai,sample=sample,
        }
}

task RMDUP {
        File bam
        File bai
        String sample
        String cluster="bcs.es.g.2xlarge"
        String disk_size="350"
        File sentieon="/pwd/bin/sentieon"
        command {
        
                ${sentieon} driver -t 8 -i ${bam} --algo LocusCollector --fun score_info score.txt
                ${sentieon} driver -t 8 -i ${bam} --algo Dedup --rmdup --score_info score.txt --metrics dedup_metrics.txt ${sample}.deduped.bam
        }

        output {
                File rmdup_bam="${sample}.deduped.bam"
                File rmdup_bai="${sample}.deduped.bam.bai"
        }

4、进阶版:判断功能

如果一个流程中,需要进行判断,符合条件执行A,不符合条件执行B,则应该怎么做呢?

定义一个布尔值,然后在call 前面加入布尔值的判断语句,可实现if判读执行

示例如下:

workflow STARScript {
   File GeneFusion_RNA_filter_Tumor_DB_Script
   File GeneFusion_RNA_filter_TN_DB_Script
   File Resultbed_Tumor
   File Resultbed_Normal
   String Sample
   Boolean IFnormal

   if (!IFnormal) {

        call geneFusion_RNA_filter_DB {
        input:
        Script1=GeneFusion_RNA_filter_Tumor_DB_Script,
        Input1=Resultbed_Tumor,
        sample=Sample
        }
    }

  if (IFnormal) {
       call geneFusion_RNA_filter_Normal_DB {
       input:
       Script2=GeneFusion_RNA_filter_TN_DB_Script,
       Input1=Resultbed_Tumor,
       Input2=Resultbed_Normal,
       sample=Sample,
       }
    }
  }

task geneFusion_RNA_filter_DB {
    File Script1
    File Input1
    String sample
   command {
   python ${Script1} -t ${Input1} -o ${sample}_candidate_STAR_Fusion_filter_result.xls
   }

   output {
   File out="${sample}_candidate_STAR_Fusion_filter_result.xls"
   }
  }

task geneFusion_RNA_filter_Normal_DB {
   File Script2
   File Input1
   File Input2
   String sample

  command {
  python ${Script2} -t ${Input1} -n ${Input2} -o ${sample}_candidate_STAR_Fusion_filter_result.xls
  }

  output {
  File out="${sample}_candidate_STAR_Fusion_filter_result.xls"
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值