Условный конвейер в Nextflow

Я пытаюсь создать условный конвейер 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, ничего не зная о триггере. Но nextflow жалуется, если я использую одно и то же имя выходного канала в Foo и Bar.

0 ответов

Вы можете использовать условные сценарии внутри своего процесса и использовать только один канал.

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}
       """
}
Другие вопросы по тегам