CWL散布的不同Yaml输入

时间:2018-12-06 22:29:19

标签: yaml

我在[1] 3 2 中有一个命令行工具,可以接受以下输入:

struct ViewControllerFactory {

private let userService: UserServiceProtocol

init(userService: UserServiceProtocol) {
    self.userService = userService
}

// This VC needs the user service
func makeVC4() -> VC4 {
    let vc4 = VC4(userService: userService)
    return vc4
}

// This VC does not
func makeVC5() -> VC5 {
    let vc5 = VC5()
}

// This VC also needs the user service
func makeVC8() -> VC8 {
    let vc8 = VC8(userService: userService)
    return vc8
}
}  

现在,我想将注意力集中在此命令行工具上,而我想到的唯一方法是使用cwl和类似以下内容的输入:

fastq:
    class: File
    path: /path/to/fastq_R1.fq.gz
fastq2:
    class: File
    path: /path/to/fastq_R2.fq.gz
sample_name: foo

我还有其他方法可以设计工作流和/或输入文件,以便将每个输入组划分在一起吗?像

scatterMethod: dotproduct

1 个答案:

答案 0 :(得分:0)

您可以使用嵌套的工作流包装器来完成此任务,该包装器将记录映射到每个单独的字段,然后使用该工作流散布在一系列记录上。工作流程如下所示:

---
class: Workflow
cwlVersion: v1.0
id: workflow
inputs:
- id: paired_end_fastqs
  type:
    type: record
    name: paired_end_fastqs
    fields:
    - name: fastq
      type: File
    - name: fastq2
      type: File
    - name: sample_name
      type: string
outputs: []
steps:
- id: tool
  in:
  - id: fastq
    source: paired_end_fastqs
    valueFrom: "$(self.fastq)"
  - id: fastq2
    source: paired_end_fastqs
    valueFrom: "$(self.fastq2)"
  - id: sample_name
    source: paired_end_fastqs
    valueFrom: "$(self.sample_name)"
  out: []
  run: "./tool.cwl"
requirements:
- class: StepInputExpressionRequirement

指定类型为record的工作流程输入,其中包含该工具接受的每个输入的字段,这些字段要在分散时保持在一起。将工作流输入连接到每个工具输入source。在步骤输入上使用valueFrom,转换记录(selfsource的上下文),以仅将适当的字段传递给工具。

有关工作流步骤中的valueFrom的更多信息:https://www.commonwl.org/v1.0/Workflow.html#WorkflowStepInput

然后在您实际的工作流程中使用此包装器,并通过一系列记录分散在paired_end_fastqs上。