Conditional process execution (dynamic)
Problem
One of two processes should be executed depending on the result of an upstream channel.
Solution
Because the condition is a channel result, if/else
cannot be used. Instead, use the branch
operator to create a "true" channel and a "false" channel. The channel whose condition is true will receive a value, which will trigger its respective process.
Code
process foo {
input:
val signal
output:
path 'x.txt'
script:
'''
echo foo > x.txt
'''
}
process bar {
input:
val signal
output:
path 'x.txt'
script:
'''
echo bar > x.txt
'''
}
workflow {
ch_if = Channel.of( 1..100 )
| randomSample(1)
| branch { n ->
TRUE: n > 50
FALSE: n <= 50
}
ch_if.TRUE | foo
ch_if.FALSE | bar
}
Run it
Use the the following command to execute the example:
nextflow run nextflow-io/patterns/conditional-process3.nf
The workflow will execute foo
or bar
based on a random number. Execute it multiple times to observe the random behavior.