【问题标题】:Conditional Pipeline in NextflowNextflow 中的条件管道
【发布时间】:2020-07-03 07:24:01
【问题描述】:

我试图创建一个条件管道 NextFlow。例如,

进程 A 向通道输出一个值。如果值为 1,则运行 X,否则运行 Y。

这是我想要做的:

initialData = 2
receiver1 = "EMPTY"
receiver2 = "EMPTY"
receiver3 = ""


process A {
    input:
    val initialData

    output:
    val initialData into trigger
    '''
    echo 10
    '''
}

process foo {
    input:
    val trigger

    output:
    val "I ran from FOO" into receiver2


    when:
    trigger == 2

    '''
    echo I ran from FOO
    '''
}


process bar {
    input:
    val trigger

    output:
    val "I ran from BAR" into receiver1


    when:
    trigger == 1

    '''
    echo I ran from BAR
    '''
}

假设 foo 和 bar 是等效的,但实现不同(例如,一个将电影从 AVI 转换为 h.264,另一个从 MOV 转换为 h.264)。我想要另一个进程,比如 C,它可以从 Bar 或 Foo 读取,而无需对触发器一无所知。但是,如果我在 Foo 和 Bar 中使用相同的输出通道名称,nextflow 会抱怨。

【问题讨论】:

标签: pipeline nextflow


【解决方案1】:

你可以在你的进程中使用conditional scripts,并且只使用一个通道。

process action {
   input:
   val t from trigger
   file in from input_channel

   output:
   file out into unique_receiver

   script:
   if (t == 1)
       """
       foo ${in} > ${out}
       """
   else if (t == 2)
       """
       bar ${in} > ${out}
       """
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-13
    • 1970-01-01
    • 2012-05-11
    • 2015-01-26
    • 2020-04-27
    相关资源
    最近更新 更多