【9.3.5.3】Developing Multi-Step Workflows

Questions:

  • How can we expand to a multi-step workflow?
  • Iterative workflow development
  • Workflows as dependency graphs
  • How to use sketches for workflow design?

Objectives:

  • explain that a workflow is a dependency graph
  • use cwlviewer online
  • generate Graphviz diagram using cwltool
  • exercise with the printout of a simple workflow; draw arrows on code; hand draw a graph on another sheet of paper
  • recognise that workflow development can be iterative i.e. that it doesn’t have to happen all at once
  • understand the flow of data between tools

一、多步骤工作流 Multi-Step Workflow

在前一集中,展示了一个单步工作流程,对果蝇基因组进行简单的RNA读取。在这一集中,工作流程通过等效的反向RNA读取进行了扩展,并添加了RNA测序分析的下两个步骤,即修剪读取和对齐修剪读取。我们将使用cutadapt和STAR工具来完成这些任务。

为了制作一个可以执行所有这些分析的多步骤工作流,我们在步骤字段中添加了更多条目。请注意,当复制quality_control步骤时,这两个步骤被命名为quality_concontrol_forward和 quality_control_reverse ,以区分单独的正向和反向RNA读取。同样,rna_reads_fruitfly输入变为rna_reads_fruitfly_forward,并添加了rna_reads_foruitflY_reve输入。

rna_seq_workflow_2.cwl

cwlVersion: v1.2
class: Workflow

inputs:
  rna_reads_fruitfly_forward:
    type: File
    format: http://edamontology.org/format_1930  # FASTQ
  rna_reads_fruitfly_reverse:
    type: File
    format: http://edamontology.org/format_1930  # FASTQ
  ref_fruitfly_genome: Directory
  fruitfly_gene_model: File

steps:
  quality_control_forward:
    run: bio-cwl-tools/fastqc/fastqc_2.cwl
    in:
      reads_file: rna_reads_fruitfly_forward
    out: [html_file]

  quality_control_reverse:
    run: bio-cwl-tools/fastqc/fastqc_2.cwl
    in:
      reads_file: rna_reads_fruitfly_reverse
    out: [html_file]

  trim_low_quality_bases:
    run: bio-cwl-tools/cutadapt/cutadapt-paired.cwl
    in:
      reads_1: rna_reads_fruitfly_forward
      reads_2: rna_reads_fruitfly_reverse
      minimum_length: { default: 20 }
      quality_cutoff: { default: 20 }
    out: [ trimmed_reads_1, trimmed_reads_2, report ]

  mapping_reads:
    requirements:
      ResourceRequirement:
        ramMin: 5120
    run: bio-cwl-tools/STAR/STAR-Align.cwl
    in:
      RunThreadN: {default: 4}
      GenomeDir: ref_fruitfly_genome
      ForwardReads: trim_low_quality_bases/trimmed_reads_1
      ReverseReads: trim_low_quality_bases/trimmed_reads_2
      OutSAMtype: {default: BAM}
      SortedByCoordinate: {default: true}
      OutSAMunmapped: {default: Within}
      Overhang: { default: 36 }  # the length of the reads - 1
      Gtf: fruitfly_gene_model
    out: [alignment]

  index_alignment:
    run: bio-cwl-tools/samtools/samtools_index.cwl
    in:
      bam_sorted: mapping_reads/alignment
    out: [bam_sorted_indexed]

outputs:
  quality_report_forward:
    type: File
    outputSource: quality_control_forward/html_file
  quality_report_reverse:
    type: File
    outputSource: quality_control_reverse/html_file
  bam_sorted_indexed:
    type: File
    outputSource: index_alignment/bam_sorted_indexed

工作流程文件显示了RNA-seq分析的前5个步骤:quality_control_reve、quality-control_forward、trim_low_quality_bases、mapping_reads和index_aligment。index_aligment步骤使用mapping_reads步骤的对齐输出。您可以通过在index_aligment步骤的in字段中引用mapping_reads步骤的输出来实现这一点。这类似于引用输出部分中不同步骤的输出。

mapping_reads步骤除了其他步骤的输入之外,还需要一些额外的信息,这是通过提供默认值来完成的。如果需要,可以阅读bio-cwl工具/STAR/STAR-Align.cwl文件,了解这些额外的输入是如何转换为STAR程序的命令行选项的。此信息在字段中提供。

为了更好地运行该工具,它需要比默认情况下更多的RAM。因此,在mapping_reads步骤定义中有一个需求条目,其中包含一个ResourceRequirement,用于分配至少5120 MiB(5 GiB)的RAM。

新添加的mapping_reads步骤还需要一个其他步骤没有提供的输入,因此添加了一个额外的工作流级别输入:一个包含映射所需参考基因组的目录。

这个ref_fruitfly_genome被添加到工作流的inputs字段和YAML输入文件workflow_input_2.yml中。

workflow_input_2.yml :

rna_reads_fruitfly_forward:
  class: File
  location: rnaseq/GSM461177_1_subsampled.fastqsanger
  format: http://edamontology.org/format_1930  # FASTQ
rna_reads_fruitfly_reverse:
  class: File
  location: rnaseq/GSM461177_2_subsampled.fastqsanger
  format: http://edamontology.org/format_1930  # FASTQ
ref_fruitfly_genome:
  class: Directory
  location: rnaseq/dm6-STAR-index
fruitfly_gene_model:
  class: File
  location: rnaseq/Drosophila_melanogaster.BDGP6.87.gtf

在下面的工作流程图中绘制连接箭头。此外,提供不同步骤的输出/输入。例如,可以使用“绘制”或打印出图形。

二、可视化工作流

CWL工作流是一个有向无环图(DAG)。这意味着:

  1. 工作流有一定的方向,从工作流输入到步骤输入,从步骤输出到其他步骤输入,以及从步骤输出和工作流输出 工作流定义没有循环。
  2. CWL工作流是一个依赖关系图。工作流中某个步骤的每个输入都取决于工作流级别的输入或另一个步骤的特定输出。

为了使工作流程可视化,可以使用图形。这可以在编写CWL脚本以可视化不同步骤如何相互连接之前完成。在编写完CWL脚本之后,也可以制作一个图形。此图可以使用在线工具或cwltool中的内置函数生成。当生成一个图表时,它可以用来可视化所采取的步骤,并可以更容易地向其他研究人员解释工作流程。

2.1 从CWL脚本到图形

在本例中,已经创建了工作流,因此可以使用cwlviewer在线或使用cwltool生成图形。首先,让我们来看看cwlviewer。要使用此工具,工作流必须放在GitHub、GitLab或Git存储库中。要查看工作流的图形,请输入URL,然后单击“分析工作流”。cwlviewer以图形的形式显示工作流,从输入开始。然后显示了不同的步骤,每个步骤都有它们的输入和输出。使用伴随着下一个步骤的输入的箭头将这些步骤彼此链接。图形以工作流输出结束。

RNA-seq工作流程图如下所示:

代码:

cwltool --print-dot rna_seq_workflow_2.cwl | dot -Tsvg > workflow_graph_2.svg

2.2 VSCode中的可视化

Benten是Visual Studio代码(VSCode)的扩展,它将工作流可视化为图形。当Benten安装在VSCode中时,该工具可用于可视化工作流程。在VSCode窗口的右上角,可以打开CWL查看器,请参阅下面的屏幕截图

在VSCode/Benten中,输入显示为绿色,步长显示为蓝色,输出显示为黄色。这个图看起来与使用cwlviewer或cwltool制作的图有点不同。VSCode/Benten的图表没有显示不同步骤之间的输出输入名称。

参考资料

这里是一个广告位,,感兴趣的都可以发邮件聊聊:tiehan@sina.cn
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn