2. Nextflow

2.6. Operadors

A la secció anterior hem vist com moure canals per dirigir les dades entre els processos. Per poder modificar el contingut o el comportament d’un canal, Nexflow ha creat el que es denominen operadors. En els scripts anteriors hem vist l’operador view, però podem trobar operadors de filtratge, combinació o d’operacions matemàtiques entre molts altres. En aquesta secció en veurem alguns exemples.

Els operadors es poden introduir mitjançant un pipe (|), com hem vist anteriorment, o precedits per un punt. Així:

workflow{

ordenE(pi,queue_ch) | view( )

}

és anàleg a:

workflow{

ordenE(pi,queue_ch).view( )

}

A partir de l’script anterior eliminarem el canal valor pi i ens quedarem amb un exemple més senzill amb el canal of queue_ch. Com veureu a continuació hi afegim la notació .view, i dins d’aquest operador hi introduïm un prefix, chr, i un valor, $it, entre { }. Aquests parèntesis defineixen un bloc de codi que va al costat i utilitza la nomenclatura de goovy (it, d’ítem) per definir els paràmetres.

nextflow.enable.dsl=2

queue_ch = Channel.of( 1, 3, 5, 7 ).view({"chr$it"})


process ordenE {

    input:

      val x


    output:

      stdout


"""

    echo $x

"""

}

workflow{

ordenE(queue_ch)

}

En aquest cas l’output es visualitza a la figura 6.

Figura 6. Resultat de l’operador view amb prefix.
Font: elaboració pròpia.

Podem introduir un filtre al canal per mostrar únicament els valors superiors a 4:

queue_ch = Channel.of( 1, 3, 5, 7 ).filter { it > 4 }.view({"chr$it"})

També podem combinar canals utilitzant l’operador mix:

ch1 = channel.of( 1..22 )

ch2 = channel.of( 'X','Y' )

ch3 = channel.of( 'MT' )


queue_ch  = ch1.mix(ch2,ch3).view({"chr$it"})

i fer operacions com comptar el nombre d’elements:

queue_ch  = ch1.mix(ch2,ch3).count().view()

Les possibilitats dels operadors proporcionen una versatilitat molt gran de poder manipular les dades que volem analitzar.