1

条件付きパイプライン 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 に変換します)。トリガーについて何も知らなくても Bar または Foo から読み取ることができる別のプロセス、たとえば C が必要です。しかし、Foo と Bar の両方で同じ出力チャネル名を使用すると、nextflow は文句を言います。

4

1 に答える 1

2

プロセス内で条件付きスクリプトを使用し、チャネルを 1 つだけ使用できます。

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}
       """
}
于 2020-07-02T23:24:01.017 に答える