Parte 4: Hello Modules - Trascrizione Video¶
Traduzione assistita da IA - per saperne di più e suggerire miglioramenti
Note importanti
Questa pagina mostra solo la trascrizione. Per le istruzioni complete passo dopo passo, tornate al materiale del corso.
I numeri delle sezioni mostrati nella trascrizione sono forniti solo a scopo indicativo e potrebbero non includere tutti i numeri di sezione presenti nei materiali.
Benvenuti¶
Ciao e bentornati alla parte quattro di Hello Nextflow. Questa sezione è tutta sui moduli, ed è una sezione abbastanza breve del corso. Non scriveremo in realtà molto codice, si tratta più di come organizziamo il codice nella nostra pipeline.
Fino ad ora, abbiamo messo tutto in un singolo file, il che va bene, ed è in realtà come costruivamo le pipeline Nextflow ai vecchi tempi.
Ma man mano che la pipeline cresce, lo script diventa sempre più lungo e sempre più difficile da navigare, da mantenere, e significa anche che non possiamo davvero condividere nessuno del codice.
I moduli Nextflow ci permettono di estrarre i processi da quello script principale e poi importarli. Questo significa che il codice è più facile da navigare e significa anche che possiamo condividere quel codice del modulo tra diverse pipeline.
Questo piccolo diagramma sulla pagina principale della documentazione mostra bene il concetto. Invece di un unico script enorme, includeremo questi file di modulo separati, da diversi script di modulo, e tutto verrà inserito nel flusso di lavoro, ma continuerà ad essere eseguito esattamente nello stesso modo.
Quindi tuffiamoci in GitHub Codespaces e diamo un'occhiata in giro. Come prima, ho ripulito un po' il mio workspace qui. Ho rimosso le vecchie directory Nextflow e la directory di lavoro e così via. Ma non importa se avete ancora quei file in giro.
Inizierò a lavorare nel file hello modules, che è fondamentalmente dove l'abbiamo lasciato alla fine del capitolo precedente. Abbiamo i nostri tre processi qui dentro. Abbiamo un paio di parametri, il blocco workflow, dove eseguiamo quei tre processi e li uniamo insieme con i canali. Poi pubblichiamo i canali di output e abbiamo il blocco output che dice come pubblicare quei file.
1. Creare una directory per conservare i moduli¶
Ora, come ho detto, non scriveremo o modificheremo davvero molto codice. Sposteremo semplicemente il codice che abbiamo già. I file di modulo Nextflow tipicamente hanno un singolo processo al loro interno, e per convenzione normalmente li conserviamo in una directory chiamata modules. Ma potete chiamarla come volete. Però terrò una directory modules nel mio repository qui, e poi creerò un file per ogni processo. Quindi dirò nuovo file, sayHello.nf.
2. Creare un modulo per sayHello()¶
Ora prenderò il mio processo e semplicemente selezionerò questo codice, lo taglierò dal file principale hello modules e lo incollerò qui.
Ovviamente questo non fa niente da solo. Il nostro script principale ha ancora bisogno di quel processo, quindi dobbiamo rimetterlo in qualche modo. E lo facciamo con l'istruzione include.
Quindi scrivo include e alcune parentesi graffe, e poi prendo il nome del processo. E dico from, e poi gli do un percorso di file relativo. Quindi dice, inizia con ./ perché è relativo da dove è salvato questo script. Quindi è modules sayHello.nf.
Notate che l'estensione VS Code è piuttosto utile qui. Ci dice, se riesce a trovare questo file e se riesce a trovare un processo, che sto nominando. Se deliberatamente metto un errore di battitura qui, mi dà subito un errore e mi dirà che non riesce a trovare questo processo che sto cercando di importare. Quindi tenete d'occhio eventuali errori che trovate.
E questo è davvero tutto. Abbiamo ancora il nostro processo qui. Non sono necessarie modifiche qui sotto. Il processo ha lo stesso nome ed è eseguito esattamente nello stesso modo. È solo che il codice effettivo del processo è ora in un file separato.
Possiamo eseguire di nuovo il flusso di lavoro Nextflow, funzionerà esattamente nello stesso modo. E questo è fondamentalmente il resto di questo capitolo del corso, ovvero spostare questi tre processi nei loro file.
Quindi facciamolo ora. Creerò rapidamente un nuovo file di modulo per il secondo processo: convertToUpper.nf. Taglierò quel codice, lo incollerò lì. E poi includerò quello. Perfetto.
E poi creerò un nuovo file per collectGreetings.nf. Taglio quello.
Un sacco di tagliare, tagliare e copiare e incollare.
E ora il nostro script principale del flusso di lavoro sembra improvvisamente molto, molto più breve, molto più accessibile e molto più facile da leggere.
E potete vedere come il progetto ora inizia a costruirsi con i nostri diversi file. Possiamo immergerci nei dettagli nei punti che vogliamo. Navigare più facilmente per trovare passi specifici nella pipeline, e ottenere rapidamente una panoramica di cosa fa la pipeline.
Navigare i moduli con VS Code¶
Ora, ovviamente, il lato negativo di fare questo è che se avete una pipeline grande, avrete molti file di modulo e potrebbero essere organizzati in più sotto-directory o ogni genere di cose. Ora, ancora, un piccolo suggerimento qui. L'estensione VS Code è piuttosto brava a navigare la vostra base di codice per voi e anche a dirvi del codice lì.
Potete vedere che VS Code capisce cos'è questo processo e mi dà una piccola panoramica di esso quando ci passo sopra, così posso vedere senza dover andare a cercare il codice sorgente, quali sono gli input e gli output, che è tipicamente la cosa più importante quando lo sto usando in un flusso di lavoro.
E anche se tengo premuto command, sono su un Mac, e clicco il nome del processo, apre il file direttamente subito. Lo porta dentro. Quindi posso semplicemente saltare lì senza nemmeno pensare a quali sono i percorsi dei file effettivi. E questo funziona ovunque, posso farlo anche, dove i processi vengono chiamati. Quindi questo rende davvero veloce.
4.4. Eseguire il flusso di lavoro¶
Okay, controlliamo solo che la pipeline si esegua ancora come ci aspettiamo. Quindi apriamo il terminale. Facciamo "nextflow run hello modules", e vediamo se si esegue senza problemi.
Si spera che il punto di tutto questo sia che la pipeline è fondamentalmente invariata, quindi non dovreste, davvero vedere alcun cambiamento da quando l'abbiamo eseguita prima. L'output qui sembra esattamente lo stesso, e potete vedere la nostra directory results con tutti gli stessi file, quindi è fantastico. Nessun cambiamento è buono.
Una nota su nf-core/modules¶
Proprio prima di concludere, voglio toccare rapidamente il potere della collaborazione quando si tratta di moduli. Questi file sono seduti nel mio repository, quindi non è ovvio immediatamente come potremmo collaborare su di essi. E ci sono molti modi diversi in cui potete farlo, ma probabilmente l'esempio più grande e più conosciuto di questo è nf-core.
Se vado sul sito web nf-core, vado su resources, e moduli. Potete vedere che nf-core ha un'enorme libreria di moduli, quasi appena sotto 1700 moduli quando lo visualizzo. E così posso digitare il nome di uno qualsiasi dei miei strumenti preferiti, andare a trovare se qualcun altro ha già scritto un modulo per esso, e vedere questo processo del modulo pre-scritto qui con tutti gli input, gli output, i container software, tutte queste informazioni, e potete vedere sul lato qui, quante diverse pipeline nf-core stanno tutte usando questo singolo processo condiviso.
Questo è un esempio un po' estremo, ma potete vedere che questo sta davvero riutilizzando questo codice. E se clicco attraverso al sorgente GitHub per questo, è esattamente la stessa cosa di quello che stiamo facendo. È solo un grande processo in un file.
Ora dal lato nf-core, facciamo alcuni trucchi per essere in grado di condividere quei file e portarli in diversi repository. E se volete sapere di più su questo, andate a dare un'occhiata al corso che abbiamo sull'uso e la costruzione con nf-core specificamente. Ma volevo solo darvi un'idea di quanto possa essere potente questo concetto di riutilizzo del codice.
Conclusione¶
Bene, questo è tutto per i moduli. Vi avevo detto che era una sezione breve del corso. Date un'occhiata al quiz, assicuratevi di capire e assicuratevi che tutto funzioni ancora correttamente. E vi vedrò nel prossimo video, che è tutto sui container software. Grazie mille.