2.5. Canals a Nextflow
Com s’ha comentat anteriorment, els canals dirigeixen el flux d’informació a través dels diferents processos. Per crear explícitament un canal s’ha d’utilitzar un mètode de Channel Factory proporcionat per Nextflow.
A Nextflow hi ha dos tipus de canals:
- Queue channels: són canals asincrònics, unidireccionals i FIFO (first-in-first-out).
Alguns exemples són:
- of: ch = Channel.of(1, 3, 5, 7) - fromPath: file_ch = Channel.fromPath('test/*.txt') - fromFilePairs: fastq = Channel.fromFilePairs('/my/data/SRR*_{1,2}.fastq')
- Value channels (singleton channel): són molt similars als queue channels, però només admeten un valor.
value: pi = Channel.value('3.1416')
Per entendre una mica millor el funcionament dels canals crearem un script anomenat orden.nf amb un canal value
i un altre of
i imprimirem el resultat.
nextflow.enable.dsl=2 pi = Channel.value(3.1416) queue_ch = Channel.of( 1, 3, 5, 7 ) process ordenE { input: val x val y output: stdout """ echo $x $y """ } workflow{ ordenE(pi,queue_ch) | view( ) }
Com podem observar, a l’apartat workflow estem especificant els inputs del procés ordenE
. En el resultat d’aquest script (figura 5), l’ordre d’aparició dels valors del canal of
no és el mateix que li hem indicat. Si repetim l’execució, segurament ens sortirà un resultat diferent. Es produeixen quatre processos de forma no correlativa.
Nextflow també és capaç de generar mètriques i reports mitjançant opcions introduïdes via terminal.
Uns exemples serien:
- with-report: crea un informe d’execució.
- with-trace: generarà un arxiu on s’indiquin paràmetres de l’execució, com memòria i cpus utilitzades, inici d’execució…
- with-timeline: permet identificar els colls d’ampolla indicant el temps que consumeix cada procés.
$ nextflow run orden.nf -with-timeline