Условный конвейер в 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}
"""
}