我在[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
答案 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
,转换记录(self
是source
的上下文),以仅将适当的字段传递给工具。
有关工作流步骤中的valueFrom
的更多信息:https://www.commonwl.org/v1.0/Workflow.html#WorkflowStepInput
然后在您实际的工作流程中使用此包装器,并通过一系列记录分散在paired_end_fastqs
上。