2.4. «Hello world»
Començarem per un script senzill (helloworld.nf) on imprimim una frase, per exemple «Hello world».
nextflow.enable.dsl=2 params.str = 'Hello world!' process printStr { output: stdout """ echo '${params.str}' """ } workflow { printStr | view ( ) }
- En primer lloc, a l’script
nf
li indicarem que utilitzemDSL2
. - Crearem un paràmetre que anomenarem «Hello world!». El nom del paràmetre està precedit per un punt i l’expressió
params
. En aquesta secció, com que es tracta d’un únic paràmetre, no cal crear un canal, ja que Nextflow assigna directament un canal value. Hi ha diferents tipus de canals, com veurem més endavant, i el canal value és el més simple. - El següent segment defineix un procés al qual anomenarem printStr. La nomenclatura dels processos és process seguit del nom que li assignem. Els processos estan formats per tres parts: input, output i script. En aquest cas, li indiquem que l’output sigui l’estàndard, i en ser un valor simple tampoc cal que definim un canal específicament. Dins del procés definirem què volem fer. Imprimim el paràmetre str.
- Finalment, assignem l’última secció al flux del workflow.
Un cop creat l’script l’executarem:
$ nextflow run helloworld.nf
El resultat es mostra a la figura 2.
Com es pot observar, s’ha executat un procés printStr
i se’n visualitza el resultat. Si voleu modificar un paràmetre, en aquest cas str
, des de la línia d’ordres executarem:
$ nextflow run helloworld.nf --str 'Bye Bye World'
I obtindrem el nou resultat.
Ara li afegirem un segon procés: posar totes les lletres en majúscula. Per això afegirem el procés allToUpper.
nextflow.enable.dsl=2 params.str = 'Hello world!' process printStr { output: path 'test.txt' """ echo '${params.str}' > test.txt """ } process allToUpper { input: path x output: stdout """ cat $x | tr '[a-z]' '[A-Z]' """ } workflow { printStr | allToUpper | view ( ) }
I el resultat el visualitzem a la figura 3.
Com podeu comprovar a la secció workflow, primer executem printStr
, posteriorment allToUpper
i finalment el visualitzem mitjançant view( ). view
és un operador que veurem més endavant.
Seguidament substituïm l’ordre allToUpper
:
cat $x | tr '[a-z]' '[A-Z]'
per:
rev $x
i tornem a executar l’script. En aquest cas, volem imprimir «Hello world!» al revés. Com que el primer pas ja l’havíem llançat anteriorment, podem resumir l’execució mitjançant l’opció resume:
$ nextflow run helloworld.nf -resume
i ens generarà l’output de la figura 4.
Com podeu veure, el primer pas de l’script no ha estat calculat de nou, sinó que s’ha utilitzat el procés ja generat anteriorment (cached). D’aquesta manera, si en algun pas del pipeline hi ha hagut algun error que ha aturat el procés, es pot resumir prèvia esmena del problema.