 Bonjour, moi c'est Maxime Garciade, c'est Kerala. Je suis ici aujourd'hui pour vous présenter notre tutoriel Nexlo et NFCore. Ces tutoriels sont disponibles dans cinq langues dont je voudrais tout d'abord vous remercier à vous toutes et tous d'être là et de m'écouter. Vous avez fait ce choix et merci beaucoup. Je vous en profite pour vous présenter par avance mes plus plates excuses pour tous les anglicismes que je vais probablement utiliser tout au long de ce tutoriel. Et des sessions parce que je ne pose plus assez en français donc c'est pas ça du tout. J'en profite d'ailleurs pour vous annoncer que j'ai commencé la traduction de tous les documents relatifs à ce tutoriel. Donc si vous voulez vous joindre à la tâche, juste mettez-vous en contact avec moi et on va voir ce qu'on va pouvoir faire. Donc ces tutoriels sont bien évidemment en ligne, c'était un point d'entrée pour vous, pour toutes celles et ceux qui débutent dans le monde de Nexlo et NFCore. Une compression de base de ligne de commande est quand même requis parce que sinon ça va être un petit peu compliqué à comprendre ce qui se passe. Une compréhension de base des outils bioinformatiques classiques vous aidera à comprendre les exemples. Mais tous les concepts présentés ici sont applicables à tous les autres domaines. Les sessions dureront approximativement deux heures, ça devrait le faire, on est là sur quatre jours donc on va s'en sortir. Session numéro 1, c'est ce qu'on est en train de faire en ce moment. Comme vous pouvez vous en douter, on en est à la partie de bienvenue. On va s'en suivre avec une introduction à Nexlo. Puis on va commencer petit à petit à coder avec Nexlo et on va finir la session du jour avec une preuve de concept pour un pipeline RNA-seq. Session numéro 2 va être consacré à NFCore, on va commencer par une introduction. Ensuite, qu'est-ce que NFCore pour les utilisateurs, qu'est-ce que NFCore pour les développeurs. Et d'un point de vue NFCore, qu'est-ce que sont les modules et les sub-workflows. Session numéro 3, on va commencer par apprendre à bien gérer nos dépendances avec des environnements virtuels et des containers. On va bien décortiquer un peu plus la syntaxe de Nexlo pour comprendre les channels, process et operators. On va faire une petite introduction à Groovy et on va finir la session du jour par modularisation. Quatrième et dernière session, configuration, déploiement, bien comprendre le cache et résume, bien décortiquer l'exécution des pipelines pour comprendre à quel endroit ça peut ne pas marcher pour l'histoire de bien débuguer. Et on finira la session avec Tower. Pour accès au tutoriel, tout est en ligne, URL est ici, training.nexflow.io. Tout est gratuit et accessible tout le temps. Donc comme j'ai dit par avant, je suis en train de traduire tout ça en français. Mais bon, ça va prendre un peu du temps et je suis désolé que ce soit pas prêt pour cette session-là. Moi, pour faire cette session d'entraînement, je vais tout faire ça dans un environnement guide-pole plutôt que de faire ça sur mon propre ordinateur. Mais vous pouvez faire ça en local ou sur n'importe quelle autre machine. Vous devriez vous en sortir tout aussi bien. Si vous voulez, comme moi, faire ça dans un environnement guide-pod, vous allez juste avoir besoin d'un compte guide-up voire accéder à l'environnement guide-pod. Ces sessions sont enregistrées et seront visibles à une nature d'ailleurs. Donc n'hésitez pas à mettre pause, au moins vous pouvez boire un petit verre d'eau. Vous pouvez vous épirer un petit peu et au moins vous n'allez pas rester juste devant votre ordinateur pendant deux heures. Si vous avez des questions, nous avons des Workspace Slack. Je vous encourage de joindre le Workspace Slack NFCore. Donc l'adresse est ici nftyrsco.re/.join. Je vous conseille de vous joindre plutôt sur le channel français. MAR23-training-french. Le channel English peut être aussi utile. Donc MAR23-training-english. Des volontaires de la communauté seront là pour aider à répondre à vos questions. Et c'est parti. Et donc avant de commencer notre tutoriel, nous allons faire une rappel d'introduction. Comment on va faire de l'analyse de données reproductibles avec Nexlo et NFCore. Donc pour vraiment faire tout ça, moi un concept clé dans ma vie tous les jours, dans mon travail, dans ce que j'ai fait ces dernières années, c'est Open Science. On voit sûr que tout ce qu'on fait soit reproductible et donc pour ça il y a différentes façons. Déjà je pense que le plus important c'est d'être en open source. C'est important de pouvoir voir le code, lire le code. Même si on ne comprend pas forcément tout, parce que je suis le premier à reconnaître, je ne vais pas comprendre le code de Nexlo directement quand je lis ce qui se passe, mais c'est ouvert. Je peux regarder, je peux décortiquer, je peux changer des choses, si j'ai envie de changer des choses, je peux faire tourner ça sur ma machine. Je peux voir comment ça marche. C'est pareil pour les pipeline, je peux tourner, je peux faire marcher ça. Je peux changer des choses, je peux améliorer des choses. Je peux regarder si je trouve un bug, améliorer un bug, trouver un bug et fixer un bug. Et tout ça bien sûr est en communauté. Tout le code est sur GitHub. Donc si vous voyez quelque chose qui ne va pas, qui ne vous convient pas, si vous pensez quelque chose peut être amélioré, si vous manquez de documentation, on peut toujours créer une issue pour demander, pour dire qu'il y a un problème, dire que soit il y a un bug, soit on voudrait une feature supplémentaire, ou évidemment, on peut aussi nous-mêmes de faire les modifications et de proposer des modifications. Donc moi je suis plutôt dans le domaine de l'aide génomique et serré qu'en rgénomique, tout nos pipeline, ça va gérer quand même beaucoup de données. Donc on a une masse de données qui est assez énorme, que ce soit les données d'entrée, c'est-à-dire les données de nos échantillons, les données de référence dont on va avoir besoin tout au long de l'analyse, ou les bases de données qu'on peut avoir besoin pour anoter ou ce genre de choses. Beaucoup de langages différents peuvent être utilisés pour chacun des outils utilisés pour nos analyses, que ce soit Python, Air, MATLAB, Pearl, Jean-Pas et des meilleurs. Et les workflows ou les pipeline, je vais avoir tendance à interchanger beaucoup les deux, donc je m'excuse encore par avance, ont généralement un point d'entrée, un point de sortie et c'est vrai que ce qui se passe au milieu peut avoir une exécution relativement complexe. Donc ici c'est l'exemple d'un pipeline d'annotation du génome et c'est super compliqué. Il y a 70 tages différentes, il y a 55 scripts, 39 outils ou librairies complètement différentes et je devais être honnête, je développe les pipelines toujours mais un schéma comme ça, moi je comprends rien. Donc après je vais regarder en détail voir un peu ce qui se passe mais voilà, ça reste quelque chose de très compliqué, de très complexe et c'est normal, c'est ce qu'on veut faire. Donc Nexlo va vraiment nous permettre de faire en sorte qu'en exécutant ce genre de pipeline là on va pouvoir reproduire les données. Donc ici ce sont des figures issues de l'article Nexlo. Donc on voit ici les annotations, les nombres de gènes annotés on voit ici les résultats utilisés avec Nexlo plus Docker. Ici les résultats fait uniquement en natif sur Mac, c'est-à-dire avec les outils installés sur la machine. Ici les outils sont luts dans Docker et ici tout ce qui est là est installé en natif sur une machine, sur Amazon, dans un Linux. Et on peut voir ici qu'on a des gènes annotés différemment et c'est un petit peu le problème, c'est un petit peu ce qui va causer notre souci de reproductibilité que ce soit avec des librairies installées nativement sur un Mac on voit qu'on n'a pas les mêmes résultats que ce soit sur un Linux et on voit qu'on arrive quand même à reproduire les données de façon plus exacte si on est sur du Mac OS ou sur du Amazon Linux en utilisant Nexlo plus Docker dans les deux cas. On a exactement les mêmes données. Ici on voit le même genre de résultats. Sur une machine Amazon Linux en natif on se retrouve avec près de 5000 transcripts communs avec Mac OS X on a quand même 74 qui sont différents ici et 64 qui sont différents ici et avec Nexlo plus Docker ici et ici on se retrouve avec exactement le même résultat et ça pour moi c'est exactement ce qu'on veut atteindre c'est une reproductibilité. C'est un schéma généralement que je mets toujours au début de chacune de mes présentations parce que ça représente exactement ce qu'on veut faire. Pour moi je veux faire de la science je veux être sûr que tous les résultats que je fais à un instant t sur une machine donnée avec un échantillon public avec des données de référence public aussi j'utilise mon outil qui a juste une version et je veux être sûr que n'importe qui d'autre va pouvoir reproduire les mêmes données de son côté quelle que soit les langages, l'OS qui l'utilise les versions du tout parce que tout ça va être pris en compte nous par Nexlo et par le packaging des outils qu'on va utiliser et c'est pour ça vraiment que Nexlo a été créé donc Nexlo c'est un langage et niveau du code ça va y avoir vraiment plusieurs concepts différents donc process ça va être vraiment l'unité de base et c'est vraiment ce qui va être exécuté c'est le script qu'on va exécuter au niveau de la tâche donc c'est vraiment la plus petite unité de base Channels ça va vraiment contenir les données ce qui va nous permettre de relier des process un à un et workflow ça va être l'ensemble de tout ça un workflow peut être petit et on peut modulariser tout ça mais on va en parler plus tard donc niveau du langage, niveau de l'écriture c'est ça donc on a un process ici on a un workflow ici on crée une channel ici et donc niveau du process ici de manière très simple nous appelons on nomme notre process ici on va l'appeler FastQC parce que notre process il fait tourner FastQC en input nous prenons un fichier donc qu'on va appeler à l'intérieur de notre script input on pourrait décider de l'appeler autrement mais soyons logique un petit peu on pourrait l'appeler reads ça pourrait être pas mal parce qu'effectivement généralement dans FastQC c'est des reads on pourrait l'appeler FastQ, passer des fichiers FastQ vous avez l'idée l'output c'est vraiment qu'est ce qu'on va trouver en sortie et donc une fois qu'on a fait tourner FastQC sur nos fichiers d'entrée ce qu'on va avoir en sortie c'est des fichiers underscore FastQC.zip ou HTML et c'est ce qu'on va trouver en sortie et donc ici nous créons une channel avec nos fichiers d'entrée qui sont tous les fichiers qu'on a disponibles dans notre chemin FastQ.zip et tout ça on pipe dans notre process FastQC ce qui va nous permettre d'exécuter notre petit workflow Nextflow va nous permettre une parallelisation complètement implicite si votre channel contient plusieurs fichiers ici dans ce cas là on a une channel qui va être créée à partir de tous les fichiers BAM qu'on a dans le répertoire Data et tout ça va être passé, va être pipé dans un process BAM to FastQ vu le nom je devine que ce process va transformer ces fichiers BAM en fichiers FastQ et donc ici nous avons 3 fichiers BAM, A, B, C qui vont être exécutés en parallèle qui vont nous redonner 3 fichiers FastQ, A, B, C qu'on va avoir ici de manière tout simple c'est exécuté en parallèle donc l'ordre n'a pas d'importance quelque chose de très important à savoir mais qu'on va voir beaucoup plus en détail plus tard Donc Nextflow va permettre une parallelisation tout complètement implicite on peut réentrer sans aucun problème parce qu'on a une fonction de wisdom ou de cache et donc toutes les données qui ont été traitées par Nextflow sont gardées en cache et vont nous permettre de recommencer l'analyse juste à l'instant de s'arrêter et c'est bien sûr tout réutilisable Donc Nextflow va y avoir plusieurs facettes à tout ça Au niveau du code de manière très simple on fonctionne avec Git généralement et votre code peut être où vous voulez, il peut être sur GitHub, il peut être sur Bitbucket, il peut être sur GitLab, il peut être sur GitA, il peut être sur AWS, il peut être sur Azure ce qui est important pour nous à ce niveau-là c'est de vous permettre d'avoir un code qui est facilement partageable avec d'autres personnes c'est pour ça qu'on aime bien ce genre de plateformes même si vous pouvez avoir des repos privés pour vous ça vous permet aussi de les partager avec d'autres personnes si vous leur partagez des clés pour ça ou quoi que ce soit et ça nous permet nous aussi de nous de faire tourner tous nos papiers de nos personnels sans aucun problème buc c'est Deepsony pour tout le monde niveau des softwares on peut bien évidemment tout faire tourner en netif avec tous les outils installés sur la machine mais on va préférer que ce soit des environnements virtuels ou des containers donc environnements virtuels plutôt qu'on d'un container Docker, Singularity, Podman, AppTainer ça va vraiment dépendre de votre infrastructure et justement, parlons d'infrastructures pensons exécuteurs ordonnanceurs donc tous vos ordonnanceurs préférés moi je sais, j'ai des ordonnanceurs préférés j'en ai testé plusieurs et Slurm, j'avais bien aimé quand c'était pas mal après je suis en train de me mettre un petit peu plus Google Cloud AWS mais Nexlo va vous permettre de gérer ça et de le faire à votre place donc vous avez même plus besoin de vous en occuper c'est vraiment ce qui m'a convaincu j'ai commencé avec Nexlo pour faire un petit peu de reproductibilité comment ça marche en tant que tel donc là nous avons un process, c'est un process différent nous avons appelé ce process index parce qu'il va indexer avec Salmon un transcriptum donc moi j'aurais appelé ça Salmon index mais bon, après on a chacun nos aptudes de code c'est pas bien grave ici en input on a transcriptum qui va se retrouver ici en output on a Salmon index qui va être le dossier qu'on va créer ici et c'est très simple on rajoute en plus ici multi-threading sur le nombre de CPU disponibles pour la tâche en question ça c'est rien de bien sorti mais ce qui va nous intéresser plus c'est comment rendre ça reproductif de manière très simple on va ajouter ici on veut que ce process marche avec Konda et avec l'outil Salmon venant de la channel Bioconda avec la version 1.9.0 voilà et donc je suis sûr à ce moment-là que quand je refais tout ça à chaque fois ce process va être utilisé avec la version 1.9.0 de Salmon on peut effectivement de la même façon utiliser un container donc ici de manière implicite si on ne spécifie rien de plus Nextflow c'est que le container est sur Docker Hub Nextflow va faire beaucoup d'assomptions implicites si vous détaillez pas tout en détail donc ici si on détaille rien en détail si on détaille rien en détail ça va pas du tout ici si on détaille rien Nextflow suppose que votre container est sur Docker Hub et effectivement ce container-là est sur Docker Hub et va vous permettre de faire tourner le même script on peut de la même manière utiliser un exécuteur particulier donc Slurm ou ce que vous voulez d'autre et bien évidemment on peut combiner un container un environnement Konda avec un exécuteur on va pas pouvoir combiner un exécuteur et un container et un environnement Konda malheureusement on peut pas tout faire donc Nextflow va nous permettre d'être re-tructible au niveau des différentes iterations de nos analyses va être portable entre différents systèmes et va supporter une montée en charge sans aucun problème voilà ça c'était Nextflow et donc maintenant qu'est-ce que c'est que NFCore rapide introduction parce qu'on va y venir plus demain donc NFCore c'est un effort communautaire pour créer un set de pipeline d'analyse construit avec Nextflow donc on a pour l'instant environ 70 pipelines qui sont maintenus et développés régulièrement on ajoute des nouveaux pipelines on archive des pipelines qui sont plus forcément un jour ou on va peut-être merger de pipeline ensemble ce genre de choses là arrive on est une communauté active et on essaye vraiment d'aider les gens autant que possible on a construit un outil en Python qu'on a appelé Tools je suis pas super content des noms mais bon après c'est pas grave on est en communauté tout le monde ne fait pas ce que je veux et ce qui va nous être utile va nous permettre de lancer les pipelines si on n'est pas content de lancer juste nativement dans Nextflow d'écrire des pipelines et de faire beaucoup de tests et d'automatisation donc on a aussi du code disponible donc on a des modules qui vont être vraiment nos sous unités de base qu'on va pouvoir utiliser quand on écrit un pipeline dans le process on en a plus de 700 qui sont partageables et qui sont utilisables bien évidemment dans tous les pipelines mais aussi dans tous les pipelines Nextflow vous n'avez pas besoin de faire partie de NFCore pour utiliser nos modules on a créé ça pour la communauté pour le plus grand d'entous et pareil pour les sub-workflow qui vont être des assemblages de modules donc NFCore c'est vraiment développé en communauté avec la communauté donc s'il y a un problème à quoi que ce soit si vous voulez des features en plus GitHub est là on est là sur Slack venez nous poser des questions venez nous suggérer des nouvelles choses donc nous ce qu'on veut vraiment faire c'est développer en utilisant un squelette commun que ce soit quand on développe un pipeline un module ou un sub-workflow histoire d'avoir au moins quelque chose qui est facilement reconnaissable et qu'on puisse facilement réfléchir et regarder comment ça se passe comment ça se déroule et voir un peu la qualité du code et notre but à NFCore c'est plutôt d'essayer de collaborer tous ensemble plutôt que de se mettre chacun dans son coin et faire la même chose NFCore on est plus de 15 000 sur Slack on est plus de 500 membres à l'organisation GitHub on a trois fois plus de contributeurs sur GitHub que du membre de l'organisation parce qu'on n'a pas besoin de faire partie de notre organisation GitHub pour contribuer à nos pipelines ou à notre code on a plus de 3000 followers sur Twitter on a plus de 90 repos sur GitHub plus de 11 000 pour le request plus de 32 000 comites il y en a certains qui ont un style de code différent que d'autres mais bon, c'est des choses qui arrivent et on a plus de 5000 issues niveau répartition on est quand même très densément réparti en Europe parce que c'est effectivement là qu'on s'est créé on s'étende plus en plus en Asie et en Amérique et on commence à s'étendre dans le reste du monde notamment l'Amérique du Sud l'Afrique et l'Océanie nous avons une correspondance dans nature biotechnologie qui va vraiment détailler tout le concept de NSCore et NSCore c'est vraiment on a vraiment 3 principes permettre d'utiliser de manière simple et de déployer de manière simple des pipelines pour tout le monde et on veut vraiment que les pipelines soient stables qu'ils aient des conflits centralisés au moins ça va permettre à d'autres personnes de réutiliser les pipelines sur la même infrastructure que vous des pipelines facilement qu'on peut facilement mettre à jour et on peut aussi télécharger pour une utilisation en ligne notamment dans des serveurs sécurisés quand vous analysez des données humaines on est vraiment une communauté donc c'est pour ça qu'on encourage la participation à la documentation Slack vous pouvez nous suivre sur Twitter pour toutes nos updates toutes nos mises à jour on est aussi sur Mastodon depuis peu et on organise aussi des tutoriels donc celui que vous écoutez là actuellement on en fait 2 parents juste avant les hackathon qui vont venir dans 2 semaines donc si ça vous intéresse décidez pas revenir nous voir pour les hackathon on est bien évidemment sur Slack, sur Twitter donc n'hésitez pas à communiquer avec vous si vous avez des questions ou quoi que ce soit on est là pour ça et pour les développeurs d'avoir un squelette de départ pour faire vos packplans vos modules, vos software clos on vous oblige pas de développer chez NFCore on vraiment vous permet de développer vos packplans pour vous en tant que tel ça vous fait un squelette de démarrage qui est peut-être un petit peu gros quand on commence vraiment à coder nextload mais ça peut vraiment aider parce qu'à NFCore on est quand même assez strict et on veut que chaque process utilise des containers ou utilise une déclinera une utilise un environnement conda on veut que tout soit que le code soit de bonne qualité et marche bien donc c'est pour ça qu'on a des codes qu'on a développé de manière assez extensive non c'est pas français c'est extensive de manière assez complète et assez exhaustive des codes d'intégration continu et on a aussi beaucoup on a aussi notre outil Python qui va nous permettre d'automatiser beaucoup de tâches et je vais vous présenter très rapidement Nextload Tower avant la vraie session d'introduction que nous aurons le dernier jour donc Nextload Tower ça va être une interface graphique complètement intuitive honnêtement moi j'ai vu ça la première fois en 2019 et ça m'a littéralement bluffé déjà la possibilité de monitorer tous les jobs Nextloads c'était démentiel c'était très bien ça va permettre aussi de manager un ensemble de pipeline pour un peu comment ils sont fait permettre de tout partager de tout lancer directement d'interface graphique et ça va permettre de partager les analyses et tout le travail qu'on a fait au sein d'une équipe et alors ça c'est le truc qui m'a bluffé le plus quand j'ai commencé de voir un petit peu comment ça marchait et on peut littéralement créer une infrastructure dans le cloud avec juste un clic oui j'y croyais pas non plus et donc il y a plusieurs options une option communautaire qui est complètement open source parce que Paolo et Evan qui sont les CEO et CTO de Secura Lab viennent du monde académique et pour eux comme pour moi le monde de l'open source est quelque chose qui reste central au sein de leur valeur et au sein de nos valeurs à tous et pour moi je ne bosserai pas à Secura Lab c'était Valca il me paye pas pour dire ça c'est uniquement moi à ce niveau là une option cloud qui est complètement gratuite et qui est ouverte à tous donc vous pouvez vous ouvrir une option sur le cloud qui est vitorée de manière très simple, vos propres jobs nextflow que vous lancez ou vous voulez sans aucun problème et vous allez pouvoir si vous mettez tout ce qu'il faut même lancer vos propres jobs nextflow donc effectivement l'option gratuite est limitée il faut quand même un petit peu qu'on récupère des sous quelque part et après bien évidemment une option commerciale qui est la version entreprise qu'on va pouvoir installer ou vous voulez merci d'avoir écouté et maintenant on va passer au vis du sujet donc maintenant c'est parti pour la partie commencer avec nextflow donc comme on a vu juste avant on va aller sur le site web training.nextflow.io qui nous amène ici 60 pages donc pour l'instant tout est en français j'ai commencé la traduction mais bon on n'est pas encore là du tout donc on va commencer ici donc bienvenue sur le nextflow.community.trainings.portals ok c'est une matière de source open-source futile.jus on review one ça c'est parfait c'est dans un repos bliton ça c'est une bonne nouvelle au moins on va pouvoir changer tout ce qu'on veut si on a envie de changer quoi que ce soit on peut suivre les matériels n'importe quel moment puisqu'il est très bien mais c'est quand même pas mal de pouvoir suivre ça en même temps qu'il y a des tutoriels organisés c'est à dire avec quelqu'un qui puisse vous parler et on fait ça régulièrement généralement 2 fois par an juste avant les hackathon donc on a notre hackathon dans 2 semaines fin mars et donc maintenant juste en ce moment le training ou bien évidemment si vous nous regardez une date ultérieure donc on va commencer tout simple par les basic next-low training workshop bienvenue bienvenue au next-low training workshop donc le tutoriel comme on l'avait dit donc à la fin de ce tuto on devrait être savoir écrire des pipeline next-low connaître les concepts basic de next-low channels process and operators c'est bien avoir une connaissance des containerized workflow donc comment containeriser un workflow ou si vous voulez pas containeriser utiliser un environnement virtuel pour ça mais définitivement c'est quelque chose qu'on va regarder, qu'on va apprendre et que je conseille à tout le monde de faire comprendre les différentes ordonnanceurs ou plateformes d'exécution supportées par next-low ça va être relativement facile et être introduit à la communauté next-low et son écosystème ouais ça s'en paraît bien aussi overview donc qu'est-ce qu'on va devoir faire par tout ça créer un environnement de développement pour faire marcher next-low donc ça on va voir ça juste après explorer les concepts de next-low en utilisant un créant un workflow basique notamment un workflow d'analyse rénexique donc ça c'est vraiment ce qu'on va faire aujourd'hui après utiliser des containers docker pour encapsuler toutes les dépendances d'un workflow ça c'est quelque chose qu'on va regarder aussi mais demain je crois bien regarder plus en détail la syntax next-low en incluant les channels on va commencer à voir aujourd'hui mais on va voir ça plus en détail dans les sessions suivantes aussi et après on va regarder un peu plus tout ce qui peut être plus avancé c'est à dire regarder comment on peut faire marcher tout ça sur un cluster comment déployer tous les pipelines qu'on vient de créer on va juste utiliser un pipeline déjà créé par quelqu'un d'autre et pour finir explorer la communauté vraiment regarder ce qui peut se passer quand on veut utiliser sur un cluster déployer sur un cluster ou dans le cloud et explorer vraiment ce qu'on peut faire avec l'exploitable et donc nous allons commencer par mettre en place notre environnement de développement donc pour un environnement de développement moi je vais conseiller plutôt à ceux qui peuvent faire ça de faire ça tout en local ou moins vous faites ça sur votre propre machine vous pouvez vous gérer ça comme vous voulez surtout comme éditeur via Scott parce que c'est vraiment ce que tout le monde utilise en ce moment moi série à quelques années j'utilisais Atom, avancage utilisé Sublime Text, avancage utilisé Notepad plus plus enfin ça m'arrive d'utiliser une nano ou via et de temps en temps mais bon après voilà vraiment utiliser ce aveco vous êtes efficace et hésitez pas à tenter de nouvelles choses c'est ça qu'on apprend des trucs et j'aime bien et donc en ce moment moi c'est via Scott que j'aime bien et après conseille aussi vraiment à tout le monde d'avoir guide histoire de pouvoir faire du Virgining sur votre machine ça c'est quand même quelque chose de base Docker ça peut être pas mal si vous voulez utiliser des containers sur votre ordinateur personnel professionnel après ça va pas forcément être permis donc si vous pouvez installer Singularity ou AppTainer ça peut être une bonne solution sinon vraiment faites un peu comme vous pouvez moi la solution que je conseille pour justement tous ces tutoriels c'est de faire ça en utilisant guide pod donc c'est ce qu'on va faire là sinon toutes les infos détaillées pour tout ce qu'on va vouloir pour si vous voulez faire en local c'est écrit ici donc installation locale vraiment tout ce qui va être requis pour installer comment on peut installer d'exploit de manière seule des liens pour installer Docker comment récupérer les trains d'idomaterial les documents du tuto en utilisant guide et vraiment vérifier que l'installation va donc pour guide pod c'est ce qu'on va faire on veut il nous faut un compte sur github un navigateur internet et effectivement une collection internet donc pour ça on va commencer de manière très simple le quick start de guide pod on va ici cliquer sur cette URL pour la commencer ce qui va nous ouvrir vraiment préparer notre workspace guide pod donc ici moi j'ai déjà rentré mes identifiants github donc vous n'avez pas à le faire vous et là guide pod va créer lui-même toute une configuration enfin tout un container virtuel et tout ça pour moi dans le cloud donc du coup ça va communiquer de manière très simple avec ma machine et j'ai pas m'occuper de tout ça j'ai pas m'occuper d'avoir un éditeur de texte tout se fait dans notre tout se fait ici dans notre navigateur internet donc si vous voulez vraiment vous pouvez aussi utiliser guide pod et votre éditeur de texte en local moi vraiment pour simplifier les choses je vais tout vous montrer dans le navigateur internet donc ici je n'accepte pas et ici je veux ouvrir dans mon navigateur donc là j'ouvre tout dans mon navigateur juste le temps que ça charge un petit peu je vous explique est très simple donc ça ressemble exactement ce que vous pourriez avoir si vous ouvrez une si vous ouvrez votre propre éditeur de texte vscot ça refait exactement ça donc ici je ferme la page de bienvenue vscot c'est pas ça qui m'intéresse ici c'est ce qu'on a mis en place vraiment j'ai bouillé un peu ma caméra ici c'est pratique c'est vraiment juste les pages internet qui va nous montrer les documents qu'on veut suivre donc là pour notre cas suivre le training ça va être super pratique d'avoir ça ici donc ici ce que je vais faire je vais revenir au lien où on était un durellement setup on était dans la partie guide pod donc ici l'output j'en ai pas vraiment besoin ici j'ai mon terminal donc ici ici nous avons vraiment tout c'est tout le le repos github du training donc on a toutes les infos on a des données de test on a des scripts donc on va regarder tout ça plus en détail ici vraiment on va vérifier qu'on a bien nextload installé ça marche bien nextload c'est un outil en ligne de command si je tape juste nextload il va pas forcément aimer beaucoup il va me dire nextload s'utilise avec des options particulières donc moi je voudrais juste vérifier nextload quelle est ma version que j'utilise dans nextload donc nextload c'est tirer version pour savoir c'est quoi la commande et là que je vois que la commande la version utilisée c'est la version 22.10.6 si je suis pas forcément content de cette version là ce qu'on peut faire aussi c'est faire un nextload self update et là nextload va se mettre à jour lui-même et là on voit que maintenant la version 22.10.7 si vous êtes sur un environnement partagé avec d'autres personnes exactement comme un cluster de calcul tout ceci peut être géré par des variables d'environnement et ça peut être relativement simple de changer de version nextload pour revenir à une version antérieure ou pour update pour une version plus récente donc ça c'est pratique c'est des ressources de guide pod donc guide pod on a 500 crédits par mois grosso modo ça va nous donner 50 heures d'environnement donc on va pouvoir bosser 50 heures dessus dans un mois sur notre environnement guide pod ce qui généralement laisse largement le temps de faire tous les tutoriels donc ici on a une option aussi d'avoir un environnement de travail qui est très large qui va donner 16 giga de ram et 500 giga de storage 500 giga de stockage nous on va prendre vraiment le workspace l'environnement de base qui est juste 4 cores 8 giga de ram et 30 giga de stockage si vous êtes plus actif pendant 30 minutes guide pod va se mettre en pause tout simplement après si malencontreusement vous refermez votre navigateur et tout il vous suffit juste de revenir ici sur guide pod workspace et vous voyez tous les workspaces que vous avez pu ouvrir ou pas et voilà c'est tout simple c'est pratique si vous voulez sauver des fichiers ici tac-tac-tac click the file click download donc on a cliqué droit et on peut faire télécharger pour récupérer tout en local et comme on a dit précédemment tout c'est toute la documentation pour ce tutoriel et sur internet donc selecting an extroversion nous on a mis à jour l'option aussi c'est d'utiliser une variable d'environnement j'en ai parlé avant si on veut utiliser une version particulière voyons voir ça je mets export nxf underscore j'ai ouvert égal 22.04.5 et là voyons voir ma version de nxl et bah voilà ma version de nxl a changé c'est fantastique du coup on avait quoi comme version au tout début je vais refaire un nxl cellfoid pour savoir quelle version on avait tout à l'heure 22.10.7 bah là on peut vraiment utiliser la version qu'on veut je vais utiliser comme ils font ici et vraiment utiliser cette version 22.04.5 au moins je vous conseille de faire pareil au moins on est sûr qu'on a tous la même version et que tout marche pareil pour tout le monde c'est un peu ce qu'on veut, on veut faire des trucs reproductibles donc je niveau tout à moi et utilisons la version 22.04.5 voilà donc introduction alors pour tant que je vais lire les choses je vais ok ça c'est juste pour fermer le terminal je vais juste rétrécir ma fenêtre voilà c'est pratique on peut vraiment faire ce qu'on veut donc ici introduction concept de base donc nxl est un un manager de workflow un langage d'omène spécifique qui fait en sorte que soit plus facile d'écrire des pipelines des pipelines d'analyse qui sont assez gourmands en données c'est pas une très bonne traduction vraiment il faut que je bosse ça désolé pour l'introduction continue nxl a vraiment été designé dans l'optique qu'une plateforme linux c'était vraiment le langage de base en sciences et linux nous permet vraiment d'avoir des outils en commande en ligne de commande qui peuvent être enchaînés à la suite des uns, à la suite des autres pour faire des manipulations de données nxl vraiment garde cette approche en tête et étant cette approche en ajoutant la possibilité de définir des interactions entre différents programmes de manière relativement complexe et en ajoutant une possibilité de parligation très élevée tout ça basé sur le modèle du Dataflow Programming donc les grandes oui je cherche le mot désolé les grandes caractéristiques de nxl qui est au coeur de nxl c'est la portabilité et la reproducibilité numéro 1 numéro 2 c'est parler lisable facile à déployer et ça supporte une montée de charge sans aucun souci et après nxl facilite l'intégration des outils existants de différents systèmes qu'on peut avoir besoin donc processes and channels là on va vraiment rentrer dans le coeur de nxl donc en pratique nxl un pipeline nxl ça va être créé en mettant à la suite des bouts on est mettant à la suite les uns des autres donc en raboutant tous les heures en chainant ensemble oui je désolé pour le français encore une fois je vais vraiment essayer de faire des efforts pour m'améliorer donc nous reprenons nxl quand vous écrire un pipeline en nxl ce qu'on va faire c'est mettre bout à bout différents process et chacun de ces process peut être écrit dans n'importe quel langage qui va pouvoir être exécuté par une plateforme Linux donc ces process sont totalement indépendants et isolés les uns des autres ils n'ont pas besoin de partager un état commun et la seule façon dont ils communiquent c'est avec des queues complètement asynchrones First In First Out donc le premier qui sort de ces queues et on va appeler ça des channels et vraiment la logique de nxl on a des process qui vont être les scripts qu'on va exécuter et ces process sont reliés par des channels qui sont vraiment des queues et qui vont pouvoir les relier ensemble donc chaque process pour chaque process on va pouvoir définir en entrée plusieurs channels qui vont être nos channels d'input on peut en avoir une, on n'en va pas avoir plus on peut même en avoir aucune et on peut avoir aussi des channels d'input une ou plusieurs ou même aucune aussi ça peut vraiment dépendre ce dont vous avez besoin et les channels c'est vraiment ce qui va nous permettre de lier nos process ensemble si on a un process qu'a aucun channel en entrée effectivement on va pouvoir démarrer ce process mais ce process va être complètement indépendant de tous mes autres process il n'y a pas besoin d'avoir d'attendre un process en amont on va commencer et dans l'autre sens si on a un process qu'a aucun channel en sortie il n'y a rien qui attend que ce process se termine là pour qu'on continue derrière et donc ici voilà par exemple on a un process qui va faire une tâche X on a ici un channel avec des données alors si je prends X donc une tâche quelconque et on a un channel qui a des données donc données X, données Y, données Z notre process va avoir une tâche quelconque qui va transformer mon input X en output X mon input Y en output Y et mon input Z en output Z et voilà c'est tout simple donc notre channel a ayant différents éléments ces différents éléments vont implicitement être compris par Nexlo comme étant quelque chose qui va être pouvoir paralysé et ce qui rentre en premier je finis souvent en premier à ce niveau là donc dans un process on va avoir plusieurs parties du process la partie je pense la plus importante pour le process va être la partie script qui va montrer vraiment quelle est la commande ou quel est le script pour exécuter on va avoir d'autres parties aussi qui vont pouvoir dire comment on va choisir d'exécuter ce script notamment toute une partie exécuteur qui va pouvoir définir comment ceci est détaillé Nexlo moi ce que j'aime beaucoup dans Nexlo c'est qu'il fait beaucoup de il y a beaucoup de choses qui sont implicites dans Nexlo quand on ne spécifie rien à ce niveau-là, niveau des exécuteurs pour Nexlo, Nexlo va tout exécuter en local et donc c'est vrai que pour développer un pipeline utilise tout tournant local et c'est vraiment très simple ça nous permet vraiment de faire tourner quelque chose en local sur notre ordinateur là ici je suis connecté sur une machine sur le cloud je vais tout tourner en local sur le cloud je pourrais faire tourner depuis mon ordinateur dans le cloud mais dans ce cas-là, j'utiliserai un exécuteur différent là on va tout faire tourner en local que vous soyez sur le cloud ou n'importe où pour vous, ça va revenir au même de là où on fait partir Nexlo on reste en local donc c'est vraiment ça notre pipeline Nexlo on va écrire notre process dans n'importe quel langage on va organiser les tâches sur une mesure on va pouvoir détailler des dépendances avec des containers des environnements virtuels vraiment ce qu'on veut à ce niveau-là et tout ça va être contrôlé par du versioning donc par guide et ça c'est vraiment l'écriture du pipeline et après l'exécution du pipeline on fait tout ça sur vraiment les plateformes qu'on veut en local mais après vous pouvez faire ça sur votre cluster en slurm dans le cloud après je dis slurm mais vous pouvez avoir d'autres clusters qui utilisent d'autres choses donc langage Nexlo c'est vraiment un langage dsl donc domaines spécifiques language ou data spécifiques language c'est une bonne question dsl domaines spécifiques language c'est bien ça ok donc ce qui va vraiment nous permettre de simplifier l'écriture de pipeline d'analyses, de données complexes en vraiment étendant un programme de langage préexistant et plus général donc cette approche a permis d'être Nexlo très flexible ce qui nous permet de faire de prendre en charge de manière simple les cas les plus récurrents et d'avoir une flexibilité et le pouvoir d'un langage de formation préexistant et donc en termes pratiques Nexlo c'est une extension de Groovy qui est en extension qui est en parallèle aussi une extension de Java donc Groovy ça peut être pensé d'un Python pour Java parce que ça permet d'être un peu plus simplifié que du simple Java et ça permet de rendre le code un peu plus appréciable donc notre premier script donc notre premier script ça on va faire comme on fait à chaque fois dans tout le temps c'est Hello donc on va exécuter Hello.nf on va exécuter un script Nexlo c'est très simple Nexlo Run et je tape le nom du script Hello.nf si je tape tout ça Launching Hello.nf et ici Nexlo m'exécuter mon script et m'affiger dans mon terminal Hello.guam on a exécuté notre premier script mais on va regarder un petit peu plus en détail ce qui se passe à l'intérieur donc on va regarder le script Hello.nf ici on a vraiment attendez c'était ici en fait ça je peux fermer maintenant j'ai tout mon navigateur qui est ici vous pouvez le garder ouvert si vous voulez moi je fais ça parce que j'aime bien avoir le le moindre procureur possible ici notre code Nexlo donc notre code Nexlo on a tout d'abord un chef ban qui va nous dire bah voilà c'est ici que ça c'est le langage qu'on utilise c'est là que tu peux le prouver ce qui est très commun dès que vous commencez à écrire un script voilà ici nous avons décidé défini un paramètre d'entrée qui s'appelle Greetings une valeur par défaut qui est Hello World ici nous créons une channel basée sur notre paramètre Greetings ce qui channel que l'on va après utiliser dans nos process donc ici nous avons deux process un premier process Split Letters qui va prendre en input une value X et qui en output va nous former un fichier avec un underscore et après un peu n'importe quoi derrière ici nous avons notre script en tant que tel qui va nous imprimer la valeur que l'on a ici en input c'est pour ça qu'ici on a un dollar c'est vraiment la variable qu'on a au point de vue de notre process Nexlo on pipe cette simple commande print de la valeur dans un split où on split avec je veux 6 lettres et on va mettre tout ça dans un fichier chunk underscore qui est récupéré ici par un output ici nous avons notre deuxième process qui prend en entrée un fichier Y et qui en sortie prend la sortie standard ici ce qu'on fait c'est on 4 donc on catène notre fichier Y on utilise on utilise TR pour transformer tout ce qui est en minuscule en majuscule et ici c'est le workflow en tant que tel où on va lancer notre premier process sur notre channel d'input greeting underscore ch qu'on avait créé ici on va créer une seconde channel qui va récupérer l'output d'ici on va transformer cette channel utilisant flaton je vais montrer vraiment en détail après tout ça c'est juste vraiment une opération de transformation de ça de récupérer un channel résulte et après ici sur notre channel résulte on va faire view ce qui va nous permettre de voir ici ce qui est ici donc revoyons vraiment en détail tout ça donc si je change notre paramètre donc nextflow toutes les options pour nextflow vont utiliser un simple underscore pour toutes les options que je vais utiliser pour mon pipeline non un simple tirer tirer du 6 en bon français je dis tirer du 6 toutes les autres options pour le pipeline c'est de tirer ici notre option c'est greeting et je peux mettre des guillemets simples c'est pareil à ce niveau là nextflow un peu d'intérêt sur ce que vous voulez écrire et ici j'ai envie d'écrire bonjour bonjour le monde voilà nous écrivons bonjour le monde alors on va regarder un peu plus ici et ici bonjour le monde ça a bien marché sauf que bien évidemment ici nous avions coupé au bout de 6 6 lettres sur hello world ça marche bien parce qu'on a vraiment les 5 premiers caractères c'est hello, un espace et les 5 derniers caractères c'est world bonjour le monde ça marche pas ce qu'on peut faire on peut tenter de faire bonjour le monde avec un split de 7 voilà ça a bien marché, on a bonjour le monde sauf que ici ce qu'on peut voir, pas ça tombe bien c'est quelque chose que je vais montrer aussi on a le monde bonjour l'ordre n'est pas du tout respecté parce qu'en fait ici on a splité notre chaîne de caractères d'entrée qui était bonjour le monde à partir du 7ème caractère donc à partir de bonjour et on a eu notre seconde process convert to upper ici qui a été exécuté 2 fois comme on peut le voir là une première fois sur bonjour une seconde fois sur monde ah oui sauf que j'avais tout écrit ça ne servait à rien on va le refaire alors là j'ai re bonjour le monde on va le relancer que l'ordre n'est pas n'est pas n'est pas garantie dans nextflow parce que en fait tous les process sont exécutés en parallèle et le premier qui finit ça va vraiment dépendre de ce qui se passe dans la machine la plupart du temps c'est vraiment le premier qui commence mais comme on l'a vu juste avant et maintenant c'est l'effet des mots classiques voilà maintenant ça revient comme on l'a vu précédemment l'ordre va être peut être variable donc dans notre cas là c'est pas très grave dans votre cas vous généralement on prend ça en compte quand on crée un pipeline ou l'ordre d'exécution des process n'a pas d'intérêt enfin n'a pas d'importance pour nous mais tout va vraiment pouvoir se faire en parallèle et après on va pouvoir récupérer toutes les données qu'on veut on va voir dans un peu plus tout en détail ici alors ici qu'est-ce qu'on disait le code commence avec un share bank c'est exactement ce qu'on disait qui déclare nextflow comme l'interprète du code donc c'est ce qu'on a dit ici on déclare le paramètre greeting qu'on initialise avec la value par défaut et le world c'est ce que nous avons dit ici ici on initialise un channel un channel greeting SH c'est ce qu'on a dit ici qui contient la value du param greeting c'est exactement ce qu'on a expliqué les channels sont les inputs pour les process d'un nextflow c'est ce qu'on a dit ici notre premier process qui s'appelle split letters ici une déclaration pour le process split letters donc en input on peut avoir plusieurs options il y a plusieurs qualificateurs qualificatifs pour les inputs ça peut être essentiellement des valeurs ou des fichiers mais il y a plusieurs choses qui sont possibles et pour ça si vous cliquez ici vous allez voir la doc ici on a toutes les documentations sur les inputs et tout ce qui est possible de faire donc les qualificateurs on a val pour une value on a passe pour un fichier env pour une variable d'environnement stdin pour le standard input tupple si on a un ensemble d'éléments au lieu d'avoir un seul élément on peut en avoir deux d'officiers et dans ce cas notre qualificatif ça va être un tupple ou itch qui va pouvoir dire là on a une collection d'éléments et je veux que le process se mette en route pour chaque chose ce qui peut être très bien si vous voulez faire un genre de boucle donc moi vraiment la documentation d'explo c'est quelque chose que je regarde régulièrement bon moins de nos jours mais c'est quelque chose qui est toujours que je vois régulièrement parce que c'est toujours utile de voir des choses et aussi dès qu'on demande quelque chose je vais regarder dans la doc trouver vraiment où c'est écrit et généralement j'ai tendance à relancer ça pour tout le monde voilà output c'est vraiment la déclaration d'output pour notre process le passe c'est vraiment on dit qu'est ce qu'on s'attend à trouver comme fichier d'output donc c'est exactement ce que j'ai détaillé ici on a trois triple triple guillemets qui vont nous dire ici c'est la partie script et j'avais pas dit que ça marchait voilà et là vraiment on nous détaille ici donc là ça nous détaille exactement le process c'est ce que je vous ai dit avant et voilà donc ici en plus de détails donc j'avais bien dit ça que la notre valeur x d'input avait un dollar ça je l'avais bien dit on le coupait c'est le caractère de 6 yellow espace et world.exclamation ah oui et j'avais dit qu'on sauvait tout ça dans des files chunk underscore mais j'avais pas détaillé les noms les noms par défaut vont être a a et ab et plus on a de chunk plus ça va être a a ab assez et etc notre second process la même chose les input la même chose le fichier pareil la output la même chose standard output c'est ce qu'on veut standard output le script la même chose aussi ici le dollar y correspond à notre fichier comme ici le dollar x correspond à notre valeur plus de détails ici voilà on lit le fichier avec 4 on pipe tout ça dans une conversion minuscule verbe et tout ça est sorti en fichier standard ce qu'on a expliqué ici la définition vraiment du workflow donc où on on exécute le le process split letter sur notre channel greeting et on garde les résultats dans le channel letter channel ici on exécute le process convert to upper to the letter channels sh qui a été aplati en utilisant l'opérateur flatten alors ça je vais vous montrer exactement comment ça marche à cause de ça sinon ça va être plus compliqué voilà donc ici si je n'avais pas utilisé flatten ce que j'aime bien ici dans cette possibilité c'est qu'on peut vraiment faire tout ce qu'on veut ici je recommence mon propre script bonjour monde avec mon paramètre et ici voilà on voit ici que je n'ai pas j'ai pas fait de flatten donc ici ici j'ai plus qu'un seul élément ce process a été utilisé qu'une fois alors on va détailler ça de manière plus détaillée ici si je fais mon letter dot stage dot view voilà ici j'ai toujours mon letter dot stage ici ici donc c'est ce qui va venir directement de là ici je vais printer directement les valeurs qui sont à l'intérieur et ici je vais d'abord la platir puis je print une nouvelle valeur je ré-assigne le channel aplati à mon channel et je vais relancer donc nous faisons la même chose dans l'autre sens ce qui va nous permettre ici de récupérer donc on voit en première instance notre channel initial letter contené de deux éléments une fois qu'on la platit c'est à dire ici notre channel contient toujours deux éléments mais cette fois-ci en deux instances ce qui va nous permettre j'utilise de faire de mettre en place tout notre process en parallèle et après soyons fous si on se faisait un split de deux ici on relance la même chose j'ai mon premier channel qui contient alors un premier un deuxième un troisième un quatrième un cinquième un sixième et un septième un élément juste dans dans ma channel dans une seule instance et ici je retrouve les sept mêmes éléments toujours dans ma channel mais en sept instances différentes et donc voilà on a toujours ici bonjour bonjour le monde en désordre voilà donc ça c'est vraiment notre premier script donc après on refait tout ça refait tout ça et remettons le flatten après ou on étend ici voilà exactement on a utilisé l'opérateur flatten pour transformer notre channel qui contient deux éléments toujours en une channel qui contient un seul élément mais la suite du coup notre channel contient à deux instances chacune d'un seul élément au lieu d'avoir une seule instance de deux éléments voilà en pratique c'est ce qu'on a fait donc quand on exécute notre pipeline qu'est ce qu'on voit ici sur la sortie standard on voit tout d'abord on voit tout d'abord que ça a utilisé next low ça nous montre la version qui a été utilisée ça nous dit attention vous avez lancé ce script là ici on a un petit un petit nom qui est donné de manière aléatoire au workflow pas le nom du workflow mais ça va être le nom de ce run là en particulier dit et celle tout c'est la deuxième version du langage next low et la révision c'est-à-dire quelle est la version du code qu'on a utilisé donc ici si je vais remodifier mon script remettant ici un six et on va changer ça est-ce que quelque chose a changé ben oui on voit bien ici qu'on a plus du tout la même version donc ça c'est quelque chose de très pratique qu'on va pouvoir vraiment utiliser souvent et je pense que pour nous c'est quelque chose qu'on va bien aimer alors voilà continuons à avoir vraiment à décortiquer tout ça ici donc on a vu vraiment que le premier process était exécuté une fois le second est exécuté plusieurs fois parce que notre premier process va nous donner plusieurs outputs et tous ces outputs là on va utiliser l'opérateur flatten pour retransformer tout ça en différentes instances dans ma channel qu'on va pouvoir exécuter en parallèle ici on peut voir pour chacun des process il y a des petites chaînes de caractère ici des caractères hexadecimaux qui vont vraiment identifier de manière unique chacun d'une exécution donc là dans ce cas là j'ai qu'un seul process donc je sais exactement que celui là correspond à ici dans le cas où j'en dessette j'ai un peu du mal à savoir lequel c'est donc la solution pour ça on peut utiliser le paramètre next-to-nc-log on peut mettre a false qui va nous permettre de détailler tout c'est ce qu'on va faire ici voilà là j'ai mon premier ici et mes autres mon second process qui ici n'est plus juste regroupé en un seul mais ici il y a vraiment tout tout détaillé en détail comme ça et ici on va bien voir quels sont les différents identifiants ici et ces identifiants là correspondent en fait ici on a un répertoire work qui s'est créé et ici dans ce répertoire work on a tout d'abord une première série de dossiers qui vont contenir juste de l'aide qui sont les deux premières lettres que nous avons ici donc ici si je vais regarder 97 ici je vois 68 6d8 voilà ça correspond à ça 68d8 et tout le reste ce qui se répond vraiment à tout ce qui s'est passé dans mon process en particulier donc mon process ici je retrouve exactement le code qui a été exécuté donc printf bonjour monde splitb6 et tout ça sort dans un chunk underscore ça correspond ici à vraiment ce process là sauf qu'on explose à remplacer la variable ici x par la valeur qu'on avait en entrée voilà c'est tout simple ici on a plein de fichiers enfin d'autres fichiers différents qui sont vraiment utiles à next law command begin ça va vraiment servir en next law pour la ture que ça va bien commencer command r ça va être tous les codes d'erreur qui sont possibles ou l'imagine même ou tout vraiment les sorties d'erreurs des outils utilisés command log c'est tous les sorties standards tout ce qu'on va logger comme info sur les outils command out ça va être vraiment toutes les sorties standards pour l'instant je vous ai dit il n'y avait rien parce qu'il n'y a pas eu de sorties standards mais je vais montrer ça sur un autre process et command run ça c'est toute la partie next law donc ça c'est vraiment quelque chose que je vais regarder quand j'ai besoin de faire du débugage donc je vais montrer ça plus de manière précise un prochain jour mais moi la partie généralement qui m'intéresse ici ça va être la fonction nxflunch qui va me dire voilà ce qu'il s'est exécuté donc on a utilisé bash pour exécuter ce qui était dans command.sh qui correspond vraiment exactement ça qui nous a permis de créer tous ces fichiers là chung a a qui contient bonjour chung ab qui contient r espace monde et chung a c qui contient e.exclamation ici donc ça c'était notre premier si je vais regarder le dans 19 1d9 donc ça correspond bien à ça si je regarde en command out on a quelque chose qui s'est passé en sorties standards ce qui correspond exactement à ce que nous avait dans notre pipeline où on s'attendait à avoir une sortie standard donc la sortie standard est récupérée alors attendez voilà oui donc le process d'exécuter en parallèle donc il n'y a aucune garantie que élo va être exécuté avant le process chung world donc on peut avoir dans n'importe quel ordre ce qui est exactement ce que je vous ai détaillé donc ici on va pouvoir voir un peu ce qui va se passer si on utilise région on va enlever le NC log false je vais juste recommencer relancer la même chose donc nous avons la même chose on va garder ça bonjour le monde ici on se rend compte que depuis tout à l'heure on est en train de relancer les mêmes commandes à un moment donné on recalcule tout à chaque fois ça ne sert à rien donc ce qu'on peut faire c'est utiliser l'option d'un exploit qui est l'option résume qui va nous permettre de recommencer ce qui a été changé donc on garde tout en cache donc c'est ce qu'on fait ici on voit que notre script la version n'a pas changé c'est toujours la même version mais on voit que maintenant toutes les données ne sont pas réexécutées donc c'est les mêmes ici c'est les mêmes process qu'on a été utiliser ah oui donc là sauf que je n'ai pas montré refaisons avec NC log false j'ai mal tapé ma commande j'ai mis un f au lieu d'un g mettons avec NC log false ici que se passe-t-il on voit bien que notre premier script c'est toujours le 2D ici le premier identifiant notre premier script c'était toujours le 2D5F ça n'a pas changé c'est toujours le même que nous avions ici ici on retrouve le 7E qu'on avait ici qui a toujours été mis en cache ça n'a pas changé non plus et ici on voit qu'on avait aussi un identifiant la 5412 qu'on retrouve ici je suis sûr qu'en recherchant on pourrait trouver aussi que le troisième script avec un identifiant 57 voilà toutes les infos sont là si vraiment vous voulez avoir plus d'infos sur ça tout ce qu'on a exécuté il y a des fichiers nexlo.nexlo.log qui vont vraiment garder tout ça en détail donc là c'est ce qu'on vient juste exécuter c'est ce qu'on a utilisé c'est ce qu'on a exécuté la partie d'avant c'est ce qu'on a exécuté la fois d'avant etc etc etc donc là c'est tout simple ce qu'on peut faire aussi c'est qu'on peut supprimer tout ça si je supprime tout ça attention c'est irréversible j'ai tout supprimé si je supprime tout ça et que je veux tenter de faire un résul qu'est ce qui va se passer ça va pas être possible parce qu'on vient supprimer toutes les données et donc là nexlo.log il n'a rien dit il a pas réussi il a tout simplement pas réussi à exécuter reprenons ici ok voilà alors ici si je veux le recommencer en faisant un résume maintenant qu'on a un work folder qui est relativement clean il va réquisir tout la même chose il voit quelque chose, il nous réutilise qui est caché on va modifier le pipeline en tant que tel donc on a toujours notre ici et ici au lieu de faire du convert to hopper je veux qu'est ce qu'on veut faire là je veux remplacer tout ça par ici je vais complier ceci je vais le remplacer ici et ici je modifie mon script numéro 2 métal script numéro 1 donc en le relançant on va garder nos scripts numéro 1 en cache et notre script numéro 2 étant complètement différent va recommencer et ici on voit qu'il est effectivement à garder en mémoire et on utilise arrive pour inverser bonjour le monde si je le réutilise en utilisant régions c'est un nouveau cache un cache élu en mémoire voilà ce que j'ai montré ici paramètres de pipeline c'est ce que je vous ai déjà montré directement ici voilà tous les paramètres de pipeline comme j'ai précisé avant c'est avec de tirer tous les paramètres de next law c'est un seul tirer c'est vraiment les seuls différents à ce niveau là on va pouvoir oui voilà en diagramme ça ressemble exactement à ça c'est vraiment un plus détaillé sur qu'est-ce qu'il s'est passé donc on avait notre paramètre notre paramètres greeting dont on a mis la valeur et le world qui est notre input qui va être notre premier le premier le premier élément de la première instance de notre premier channel tout simplement ici ça passe dans notre premier script dans le premier script on va voir deux outoutes les autres outoutes chunk A, chunk A, B donc quand on flatten ce qu'il va nous permettre d'avoir toujours une channel un élément aimé de d'instances à la suite des autres si on perd de paralyser tout ça et en sortie on a deux instances ici elo et world ce qui va nous permettre en sortie de voir elo world voilà donc maintenant nous allons passer à créer un pipeline simple de RNA-seq et je vous conseille d'en profiter pour faire une petite pause je vais faire ça et voilà donc on reprend donc ici j'ai fait une petite pause donc on va pouvoir la session guide pod c'est mis en pause ici tout simplement je redlic sur open workspace et ça va redémarrer tranquillement donc ici on va commencer la dernière partie de cette journée c'est-à-dire commencer à vraiment créer notre propre pipeline donc ça va être un pipeline RNA-seq basique c'est pas du tout un pipeline best practice je vous conseille pas d'utiliser ça pour vous même mais c'est vraiment plus une preuve de concept on fait comme ça l'heure non je vais faire ça dans le ponzer et on est parti alors oh la la qu'est-ce qui se passe ici je ferme voilà on avait ici notre on va revenir là où on était de tout à l'heure setup on était sur la production et on allait attaquer le simple RNA-seq pipeline donc notre workflow RNA-seq donc là ce qu'on va faire c'est très simple on va indexer notre transcriptom on va faire du quality control on va faire une quantification et on va faire un rapport multi-cutie donc voilà ça va être on va utiliser ici on va utiliser 7 scripts c'est les 7 scripts qui sont ici pour justement réaliser tout ça donc définir les paramètres du pipeline ça va être le script ça va être le script donc ici je vais recommencer on va reprendre juste en tout début environ introduction je vais juste récupérer c'était dans l'environnement setup je vais récupérer ceci voilà une explo version voilà on revient sur la production on revient sur le pipeline voilà ici nous sommes bien sur la bonne version de nextflow et nous allons commencer à regarder le script 1 alors script 1 ici tout ce qu'on fait c'est très simple on va juste commencer par définir quelles sont tous les paramètres qu'on veut dans notre pipeline donc on utilise pour cela une variable intérieure a nextflow qui est la variable projectdir qui veut juste tout simplement définir le répertoire du projet dans le calendier donc projectdir ça va être ici, ce répertoire là et ici donc param reads va définir tous les fichiers fastq qui correspond à ce globe linux ici le fichier transcriptom find ça va correspond à justement ce fichier le paramulti qui aussi ça va être on va se servir de ça comme notre fichier de sortie donc je peux regarder ici dans data gigal transcriptom ça va correspondre à ici et ici gut underscore 1 or 2 1 ou 2.fastq ça va correspondre à ces fichiers là donc ici vraiment ce qu'on va faire une paire de fastq donc si je veux faire comme on a fait tout à l'heure nextflow run script 1.nf script 1.nf bah désolé je parle trop anglais tous les jours voilà ici nous voyons bien que notre paramètre d'entrée reads correspond vraiment à ces fichiers là on peut si on veut ajouter j'ai envie de voir aussi plus d'infos moi j'aime bien println j'aime bien avoir toutes les infos possibles transcriptom voilà et tant qu'à faire on va vraiment tout affiger vous en pensez quoi moi j'aime bien et on est bien ici on refait tourner ça parce qu'on a ici on a tous nos fichiers soit nos fichiers d'entrée, soit nos fichiers de sortie soit ici après effectivement ici c'est que des noms donc si je mets n'importe quoi je vais me retrouver avec n'importe quoi ça correspond pour l'instant on vérifie pas si ces fichiers existent c'est je pense qu'on va faire ça plus tard donc ici je vais fermer le script et le .nf qu'on a regardé tout à l'heure et on va continuer ici oui, ce qu'on va pouvoir voir ici de manière très simple si je veux utiliser un nouveau paramètre weeds et je lui veux qu'il me trouve dans data ggal et je veux tous les fichiers que j'ai envie donc je vais utiliser une étoile pour ça underscore et là je vais utiliser ce globe pour les fichiers qui contiennent 1 1 ou 1 2 .fq ici si j'utilise ça on va voir ce que nous allons avoir en sortie et bien voilà Nexloo a bien compris qu'on a ça donc on va s'occuper après de transformer ça en channel mais vous inquiétez pas, on va voir ça donc ici qu'est ce qu'on veut faire modifier le script 1 de .nf en ajoutant un quatrième paramètre il s'appelle outdir ça va être facile parums.outdir et j'imagine qu'on va vouloir remettre ça dans projectdir et de base moi j'aime bien mettre mes résultats dans un physique qui s'appelle results ok and set it to the default path that will be used as the pipeline output directory donc voilà on a créé un nouveau paramètre qu'on a appelé outdir c'est bien ça et on lui a mis un chien par défaut qui va être utilisé comme output donc on lui a mis un fichier vers défaut c'est exactement ce qu'on a fait tant qu'à faire moi j'aime bien aussi toujours tout afficher vérification que ça marche bien le script se lance et ici on a bien nos 4 paramètres voilà moi j'aime bien toujours afficher les paramètres au moins tout le monde sait ce qui s'est passé quand j'ai lancé mon analyse et c'est plus simple à reproduire voilà alors à quoi ça ressemble ici ça ressemble à peu près ah oui result c'est une bonne idée parce que nous on est parti de l'idée qu'on voulait que ça soit dans le fichier ou à l'endroit où on était créé mais en fait c'était beaucoup plus intelligent de juste rien faire et de garder result au moins je peux lancer mon script mon pipeline d'où je veux et nextclo va tenter de recréer le fichier sorti à l'endroit où on est donc dans ce cas là on va avoir une autre variable implicit qui va être utilisée pour définir quel est l'endroit dont on lance mais ici ça va être vraiment le fichier où on lance notre script ça va être très simple ça va pouvoir se faire sans problème vraiment de faire ce genre de choses là sauf si on utilise le cloud parce que quand on utilise le cloud ne pas donner de chemin absolu ne va pas toujours marcher à ce niveau là je conseille plutôt vraiment de spécifier un chemin complet dans le cloud avec un bucket sui nous reprenons on a bien fait ce qu'il fallait faire ici modifier donc modifier le script pour imprimer tous les pipeline paramètres en utilisant une seule commande log info et un multiline string mais qu'est ce que c'est que cette sorcellerie regardons un exemple un exemple ok je vais regarder l'exemple je vois que l'exemple me plait je copie l'exemple log info j'ai mon param transcriptum j'ai mérite disons mérite il m'en plus que mon multi qc que je vais mettre ici alors voilà ici on peut se rendre contre d'une chose on voit que les variables next to on peut soit les nommer de manière simple avec juste un dièse soit toujours les nommer de manière simple avec juste un dièse mais également les encapsuler dans des acolades ça vient de nous donner exactement la même chose ici je vais appeler ça mon pipeline c'est joli comme ça j'aime bien faire des petits décors tout le temps quand je fais des choses relançons notre script 1 ici je relance mon script 1 donc on va afficher tout ce qu'on a fait ici et voilà ici on voit vraiment que pour multi qc qu'on ait mis ou pas les acolades ça ne change rien c'est vraiment plus une idée de pour moi c'est plus un côté esthétique ou pas de rajouter les acolades dans ce cas là très simple dans des cas plus compliqués où on va avoir à faire on va devoir faire des opérations sur des paramètres ou sur des variables next to dans ce cas là je conseille effectivement de mettre des acolades tout le temps parce que ça peut être compliqué à lire mais sinon la plupart du temps juste un simple dièse suffit ça c'est fait regardons notre exemple donc on a vu un exemple à quoi ressemble ça ressemble exactement à ça donc ici on a appris à comment définir des paramètres dans notre script on a défini des paramètres avec une valeur par défaut c'est fait c'est bien passer des paramètres en ligne de commande oui on l'a fait avec avec les deux tirés aucun problème quelle était la différence entre dollar var et dollar acolade var on a vu ça aussi comment utiliser des multiline strings ça a été comme ça les double les triple double im et avec toutes nos informations c'était tout simple et comment utiliser log info pour imprimer les informations on a utilisé log info c'était pas ça allé on va rentrer un peu plus en vie du sujet les choses intéressantes commencent maintenant ce qu'on veut faire c'est vraiment créer un index on va indexer notre fichier transcriptom donc pour ça on va créer un process qu'on va appeler index je vais copier ça on peut soit le copier tout seul soit regarder directement script2 je vais regarder script2 je vais regarder script2 je vais copier ce que j'avais déjà créé moi dans script2 donc c'est exactement la même chose en même temps si c'est exactement la même chose ce qu'on va faire je vais juste vraiment garder ce qu'ils avaient je vais juste rajouter moi nulle like aussi qu'on avait rajouté nous on avait rajouté en physie de sortie et c'est tout on a gardé le script1 qu'on a juste changé et on a tout en script2 c'est la même chose, j'ai juste copié collé j'ai gardé le nom qu'ils avaient gardé eux pour le pipeline ouais je suis désolé j'ai suivi on a exactement la même chose qu'on avait avant et ce que j'ai fait en plus où je vais vraiment changer par rapport à l'exemple c'est j'ai rajouté cette ligne là c'est tout ce que nous avons fait donc ici nous avons un nouveau process qui va indexer le transcriptome ici on indexe avec un fichier transcriptome qu'on utilise ici donc c'est une variable interne on peut utiliser ou pas ça c'est vous qui voyez généralement moi j'aime bien mettre des acolytes quand j'ai quand j'ai un point dans la variable au moins pour moi c'est clair que c'est juste une seule chose sinon j'ai toujours peur que ça soit interprété comme quelque chose comme ça et j'ai pas envie que ça se passe c'est vraiment tout ce que je changerai donc ici qu'est ce qui se passe si on veut exécuter ça donc normalement comme on a vu dans notre premier exemple la partie d'avant ici nous avons notre workflow qui va créer un nouveau channel index qui va contenir le contenu de ce process là donc le process index utilisant le fichier Param transcript file qui va venir ici qui va créer ça qui va rentrer dans ce répertoire notre sortie donc voilà on a fait ça ici le Param transcript file est utilisé en input du process index on est d'accord le process index utilise l'outil Salmon il crée un Salmon index on est d'accord qui est notre transcript index qui peut être passé en output en output à la channel index et h c'est exactement ce qu'on fait là ici on récupère la sortie et ça va être là on est d'accord alors maintenant on va tenter de faire marcher ce script là qu'est ce qui se passe si on fait marcher ce script ça va pas marcher en fait tout simplement et pourquoi ça marche pas alors ici je vais regarder l'erreur et l'erreur est très simple l'erreur c'est Salmon n'a pas été trouvé la commande not found pour Salmon et c'est totalement normal que la commande n'ait pas été trouvé parce que si je regarde le script il n'y a aucune information pour vraiment pouvoir permettre à Nexlo Nexlo ne sait pas si ses outils sont en container ou pas donc vu que Nexlo a aucune idée de là il va chercher en local donc on a plusieurs solutions ici à ce niveau-là soit on pourrait installer l'outil en local mais c'est pas notre but aujourd'hui parce que notre but c'est vraiment de faire un pipeline qu'on puisse donner après à d'autres personnes qui vont pouvoir faire la même chose que nous on veut vraiment créer un pipeline reproductif donc ce qu'on va faire c'est on va utiliser Docker Docker est déjà installé sur cette machine si je tape juste Docker voilà je vois bien que Docker est installé Docker version, qu'est-ce qui me dit Docker est installé donc il n'y a pas de problème la façon dont Nexlo va marcher Nexlo va regarder le fichier nexlo.config et dans le fichier nexlo.config on voit que j'ai déjà un container de défini pour tous mes process le container défini c'est ce container là donc Nexlo assume que si vous ne spécifiez pas vraiment d'adresse pour ça votre container provient de Docker Hub et donc effectivement si on va chercher ce container là dans Docker Hub il existe il n'y a aucun problème à ce niveau-là donc là ce qu'on va pouvoir faire c'est relancer la même ligne de commande en spécifiant withDocker et si on fait ça on voit qu'un process a été exécuté si je vais regarder dans Work Folder dans mon répertoire de travail dans B0 toujours comme d'habitude ici je regarde que ce dossier là donc on va regarder tout simplement en ligne de commande donc je regarde dans Work je regarde ce fichier là j'ai utilisé TAP pour auto compléter et avoir toutes les infos ici on voit qu'effectivement on a notre fichier d'entrée donc NextLow fonctionne de manière très simple tous les fichiers d'entrée vont être simlinqués dans nos répertoire dans lequel on travaille donc ici dans ce répertoire là tous les fichiers d'entrée vont être simlinqués tous les fichiers sortis vont être créés ici à l'intérieur et après on va pouvoir les publier où on veut on va voir ça plus tard vous inquiétez pas ici je vois bien que je voudrais juste voir plus en détail qu'est-ce qu'il y a dans ce fichier Work dans ce dossier Salmon donc regardons Salmon index tous les fichiers créés par Salmon vraiment d'indexation qui nous donne toutes les infos l'index basé sur ça donc on a toutes les infos qu'on a eus on peut regarder plus en détail les différents fichiers qui ont été créés donc si je regarde le fichier command.r ça va nous montrer vraiment toutes les informations toutes les fichiers sortis d'erreurs donnés par Salmon là on voit qu'effectivement il y a une nouvelle version qui a été installée là dans notre cas là ça n'est pas ça qui nous intéresse après vraiment on a toutes les infos donnés par Salmon et on voit qu'à la fin le fichier log va donner la même chose exactement dans ce cas là c'est pas très important la sortie standard qui nous donne vraiment juste les informations sans avoir les informations d'erreurs command.sh command.sh comme on a vu précédemment nous donne vraiment la ligne de commande qui a été exécutée et moi ce qui m'intéresse de regarder là aujourd'hui c'est le fichier command.run et comme je vous ai montré précédemment si on va regarder la fonction nxf launch on va voir qu'au lieu d'avoir juste exécuté tout directement dans Bache comme on avait fait précédemment ici c'est tout ça va être toujours exécuté par Bache mais dans un container docker donc avec toutes les options dont on a besoin ici je sais pas de détailler ça mais je vais le détailler maintenant ici dans mon script nexo.config on a donné des options supplémentaires à docker voilà ici et si je regarde mon fichier hop j'étais là j'étais là on voit que les options que j'ai données à docker vont être ici donc ça c'est juste des options pour être sûr que j'ai bien les bons noms enfin que les fichiers que j'ai créés ont bien les bons noms et les bons groupes ça va pas nous importer pour nous mais ça peut être très important suivant ce dont on a besoin de faire dans différents clusters moi je sais que par exemple ça m'est arrivé dans des clusters d'avoir besoin de monter des chemins d'accès à des fichiers avant d'utiliser mes scripts et c'est exactement avec ce genre de commandes qu'on va pouvoir gérer donc nexo va vous permettre de pouvoir gérer ça de manière relativement simple tout ça avec vos fichiers de configuration ce qui vous permet vraiment de vous concentrer sur votre script et votre script va vous contenir uniquement que le côté script analysé tout et tout ce que la configuration on va pouvoir le mettre dans un fichier séparé ce qui va nous permettre de vraiment pas nous occuper de ça et de pouvoir faire un peu ce qu'on veut alors ok donc on a vu ça on a vu qu'avec docker ça marchait et ce qu'on peut faire au lieu que d'avoir à retaper à chaque fois with docker on peut directement de notre fichier config file le nexo config lui mettre docker.enable equal to qui va nous permettre de faire juste une explore grand script et tout et ce qui va nous faire exactement la même chose exercice enable the docker execution oui on a ça on vient de le faire exactement print the output of the index channel by using the view operator donc on va imprimer la sortie de index.ch alors ça c'est mon fichier config on n'en a plus besoin ici on va vouloir lui imprimer index.ch index.ch donc ici on fait très simple index.ch.view view c'est un opérateur nexo on a plusieurs façons d'utiliser soit on peut utiliser comme ça tout simplement soit on peut utiliser en utilisant une clojure on va lui dire un peu ce qu'on veut et donc là je lui dis par exemple index.files utilisons région tankfr voilà ici on voit la première information c'est celui là là la deuxième information c'est celui là ici moi j'aime bien utiliser plutôt ça parce que moi ça me permet d'avoir tous les infos que je veux si vous n'avez pas besoin vous pouvez utiliser tout ça de manière simple ici on a dit hit hit c'est une variable implicit qui va justement définir le contenu de mon channel ou de ma channel donc voilà on a fait ça alors ici j'ai appelé ça indexfiles mais c'est plus un index folder c'est plus un dossier on repos dans ça qu'est ce qu'ils ont fait ici index.view oui ça marche on a fait marche aussi alors if you have more cpu si on a plus de cpu on peut rajouter plus de cpu on peut en utilisant plus de ressources pour ce process donc là je vais regarder cpu ici je peux voir on peut rajouter une directive sur le process on lui dit ben donne moi plus de cpu plus de cpu plus de processeur donc c'est ce qu'on va faire ici ici rajoutons cpu on vole et on met 2 2 ça devrait ça devrait être possible que c'est une machine de 2 cpu c'était 4 cpu niveau des processeurs voilà ça s'est exécuté il n'y a eu aucun problème si je vais en demander plus regardons ce qui se passe si j'en demande plus j'en demande 4 ça marche encore donc je pense que c'était bien une machine avec 4 cpu j'ai vraiment demandé 8 ce qui se passe si on en demande 8 j'aime bien casser les trucs ça marche toujours on va regarder si ce qui se passe si oui on lui demande bien 8 cpu mais pas marcher tout ça je pensais pas j'allais bien que ça allait pas marcher un moment donné ici quel est le problème j'ai une grosse machine mais je me rends compte désolé c'est pour ça que ça allait pas marcher enfin ça allait marcher moi je m'attendais à ce que ça plante ça marchait donc ça n'a pas planté ça n'a pas fait ce que je voulais faire voilà on voit quand on lui demande trop de trop de processeurs à un moment donné il dit non mais c'est pas possible ça peut pas marcher donc je lui ai demandé 18 il y en avait que ça c'est possible il marche pas et il me dit précisément pourquoi il marche pas voilà je pense que juste ici vraiment pour pour un test on demandait 2 ça nous suffit largement commençons donc je réutilise la fonction résume on va voir ce qui se passe il l'a gardé en mémoire parce qu'on l'a utilisé précédemment avec 2 cpu si je lui dis en demande 8 donc j'en ai déjà demandé 8 je lui ai demandé 3 3 j'ai pas encore demandé si je me demande 3 qu'est ce qu'il va se passer parce que là c'est quelque chose qu'on ne lui a pas demandé avant alors je ne me souviens plus exactement si le nextflow prend on compte ça ou pas mais oui le nextflow a pris en compte ah oui mais c'était pas caché avant non plus si je le relance voilà voilà c'est bon ça marche bien comme on voulait il n'y a pas de problème ok on a fait ça on a bien vu que la commande s'est marchée use the command 3 work to see the next logonise process work directory check if you need to download 3 ça on a vu ça ressemble à ça on peut le regarder et on veut regarder work dvd voilà ça ressemble à ça on a la même chose voilà allez donc ici qu'est ce qu'on a fait on a défini un process avec une commande personnalisée on a vu comment déclarer nos inputs oui ça a été ça a été simple on a vu comment déclarer une azote on a déclaré notre code ici aussi on a vu comment imprimer le contenu d'une d'un channel on a vu ça ici et on a vu comment modifier le nombre de CPU et comment accéder au nombre de CPU disponibles on a vu ça comme ça ici alors ici ça c'était les CPU qu'on a demandé ici c'était les CPU qui étaient disponibles pour la tâche, enfin les CPU qu'on a demandé effectivement on a bien vu qu'à ce moment-là qu'on en demandait trop ça ne marchait pas donc ce qu'on va pouvoir faire c'est dans d'autres cas de vraiment dans notre fichier de configuration on va pouvoir faire en sorte qu'on n'aille jamais au-delà de la valeur bon ici récupérer les fichiers de Fasq par pair donc on va voir ça comment ça marche alors récupérons le script 3 donc ici c'est notre script 2 moi je l'aimais bien mais allez on repart sur un script 3 donc j'aime bien qu'on recommence moi effacer un peu tous les vieux trucs bon j'efface tout ok hop là hop là hop et on passe sur le script 3 script 3 alors on va faire encore la ligne précédente que j'aimais bien moi qui me donnais multi ah oui donc là ce que j'ai fait en fait j'ai fait contrôler pour sélectionner le même mot ça permet de faire de l'édition multi j'aime bien faire ce genre de choses c'est assez rigolo donc là ce qu'on va faire ici on va utiliser on va regarder quel est ce créateur de channel qui est le créateur from file pairs qui vrai simplement comme son nom l'indique va nous créer un channel à partir d'une paire d'une paire de fichiers et donc là on va faire comme tout à l'heure on va utiliser view donc on peut faire un peu comme on veut moi j'aime bien remettre toutes mes infos c'est fasq c'est une paire de fasq donc on va appeler ça fasq et ici on lui remet voilà ici nextflow run c'est mon script 3 on lui remet partie donc qu'est ce qui se passe ici voilà on a bien nextflow qui a créé qui a créé mon channel ici en partant des infos qu'on lui avait donné ici et ça marche bien ce qu'on va pouvoir faire en plus reprenant l'exemple qu'on avait fait de tout à l'heure on va lui dire je veux que tu regardes là-dedans que tu regardes ça tout bien sûr entre double guillis et guillemets si on fait ça qu'est ce qui va se passer à votre avis là on va sélectionner tous les fichiers de fasq qui sont dans dans le répertoire gégal et là on voit dans ce répertoire là on a 3 paires de fasq on a une paire gut, une paire lever, une paire lingue et on les a bien retrouvés ici c'est fantastique c'était tout mes fichiers là là on a d'autres infos ici d'autres infos ici d'autres infos ici non là c'est vraiment tout ce qui m'intéressait ça c'est parfait voilà donc ça va imprimer ceci on est d'accord on m'a récupéré d'autres en utilisant notre paramètre il n'y a aucun problème ok donc si on utilise ah oui si on veut utiliser des globes que ce soit étoiles, points d'éclamations tout ce qu'on veut on doit mettre notre paramètre notre notre paramètre entre guillemets soit simple soit double là ils disent single mais moi j'ai mis des doubles et clairement on a vu que ça marchait aussi donc non non simple ou double il n'y a aucun problème ça marche vous inquiétez pas pour ça par contre, qu'est-ce qui se passe si on ne met rien là ça va pas marcher parce que Bache va tenter d'interpréter les infos et on va voir comment ça va pas marcher voilà Bache a tenté d'interpréter ça et nextload n'a pu récupérer Bache a interpréter ça comme étant juste ceci ce qui fait que nextload ne récupère qu'un seul fissier donc ceci ne marche pas donc n'oubliez vraiment pas vos guillemets si vous utilisez file pairs alors exercice use the operator set à la place de égal pour définir allez, on va faire ça donc ici ce qu'on peut faire de manière très simple c'est au lieu d'écrire ça donc read pairs channel equal et égal à channel on va pouvoir le faire dans l'autre sens ici, si on relance voilà donc vraiment vous pouvez utiliser point set ou égal c'est comme ça vousz égal comment ils ont fait ah oui, on peut faire ça aussi c'est joli comme ça channel file pairs point set ça peut être joli on peut même, j'imagine, pouvoir faire ça si on fait ça, qu'est ce qui se passe j'aime bien regarder ce qui se passe qu'on fait des modifications parce que des fois ça ne marche pas et là ça ne marche pas ce qui me paraît logique parce que j'ai déjà dit que c'était égal à ça par contre je pense que si on fait ça il y a des moyens que ça marche voilà allez, gardons-nous ça parce que c'est joli ok ah oui, utilisez la fonction check if exist pour vérifier si les fichiers existent ça c'est quand même bien donc from file pairs comment ça marche check, il existe alors je ne me souviens plus du tout comment ça marche c'est à ce niveau là que quand on ne se souvient plus ce qu'on va faire, on va regarder la documentation ah non mais je vais dans la documentation alors qu'elle est là voilà on faisait l'exercice alors non mais la documentation était ici mais on avait un lien ici pour aller la lire alors on a ici la documentation pour ici cette channel factory from piper donc c'est une méthode qui nous explique vraiment tout comment ça marche et là on a l'option check if exist donc par défaut c'est faux mais nous on veut l'utiliser en plus donc on va pouvoir la rajouter from file pair bien gul check if exist pour donc là qu'est ce qui se passe bah les fichiers existent et donc ça marche c'est parfait c'est exactement ce qu'ils ont fait on a la même chose bon bah voilà on a utilisé from piper pour gérer une paire de fichiers ça marche en problème utiliser check if exist on a utilisé aussi pour vérifier si les fichiers d'entrée existaient ça marche bien et après on a utilisé l'opérateur set pour définir un nouveau nom de channel on peut faire ça mais ça marche aussi après c'est vraiment vous comme vous préférez voilà on va passer au script 4 qui est vraiment de faire une fonction de quantification donc regardons le script 4 on a toujours vraiment la même chose on récupère notre process d'index qu'on avait avant on a notre process de quantification qui est un nouveau process voilà ici on a toujours notre channel qu'on avait avant index on index quantification on rend ici on a d'abord notre index après on a nos nos reads et bah on va tenter ça en script 4 voilà script 4 a bien marché ce qu'on peut faire vraiment plus pour voir qu'est ce qui passe passé si on relance le script 4 mais en utilisant plus de fichiers en plus de fichiers d'entrée on va utiliser la fonction résume et on va réquisir le paramètre un C log false pour bien voir les différentes options possibles pour bien voir ce qui se passe donc ici c'est juste pour pouvoir montrer que connexlo va paralyser implicitement donc ici on a toujours notre premier process qui était le process d'index ici de création de l'index qui a été gardé en mémoire notre second process c'est à dire un des 3 process qu'on a eu de quantification a été gardé en mémoire parce qu'on l'avait déjà fait avant j'imagine que c'est celui qui était toujours sur les pertes de fascio gut et là on a 2 nouveaux process qui ont été soumis parce que là ici on a utilisé en entrée plus de fichiers des nouveaux fichiers qu'on a regardé de tout à l'heure et ces nouveaux fichiers là vont déclencher des nouvelles sorties ici ils ont déclenché des nouveaux process et on n'a rien eu à changer dans notre script ce qui je trouve est assez fabuleux moi je pense que c'est quand j'ai vu ça la première fois où je me suis dit ouais ça c'est bien ça c'est exactement ce que je veux alors regardons le script plus en détail ici la sortie de index on la récupère ici dans ce channel là et ce channel là on le donne au process quantification qui va se retrouver ici ici on utilise tupple parce qu'on va donner un ensemble de plusieurs éléments provenant de notre channel donc notre premier c'est notre identifiant et notre second c'est vraiment nos fichiers donc on a notre identifiant on va avoir utilisé après pour créer un dossier et après on a nos reads aucun pas de problème notre salmon index qu'on a retrouvé ici notre test CPU comme on avait avant on peut regarder plus en détail ce qui se passe dans notre folder donc réutilisons tri parce que c'était joli quand même tout à l'heure c'est ce qui s'est passé ici on a créé ici donc on a créé un dossier gut parce qu'effectivement c'est ce que j'avais en entrée et c'est ce que j'ai demandé à mon script voilà c'est ce que j'ai demandé au script ici de créer ça et ce fichier gut contient tout vraiment tout ce qui est sorti par salmon on retrouve nos fichiers d'entrée ici c'est notre père de fastq et ici on retrouve notre index salmon ici et donc on peut voir vraiment que tout ce qui s'est passé c'est que les fichiers sont simlinqués de l'un à l'autre et sans aucun problème dès que je veux gérer ça de manière totalement transparente donc ça marche bien ok on a fait ça ah bah c'est exactement ce qu'on a fait on a vu que le process était exécuté plusieurs fois on a vu ça aussi exercice ah oui ça peut être pas mal alors on va ajouter un tag alors si je regarde mon script je vois que pour mon script de quantification ben quand je regarde là je vois 1, 2, 3 j'ai aucune idée de ce qui s'est passé j'ai dû regarder vraiment en détail dans mon fichier dans mon répertoire de travail pour savoir ce qui se passait donc moi ce que j'aime bien faire à ce niveau là c'est qu'on va rajouter un petit tag alors c'est quoi la syntaxe exactement pour les tags c'est tout simple ok donc tag dollar et le tag que je veux moi je vais prendre comme tag simple as you et voilà et donc ici maintenant si je relance mon script on va le relancer en utilisant résumes qu'est ce qui se passe voilà là on voit vraiment ce qui s'est passé à l'intérieur donc je sais que ce process de quantification c'est sur gut celui-là c'est sur liver celui-là c'est sur lung donc aucun problème ça marche bien et c'est quand même beaucoup plus simple donc le résultat ouais on peut mettre vraiment plus de dossiers plus de détails je pense que c'est pas utile de dire que c'est salmone parce qu'on sait ce que la quantification ouais on pourrait faire ça mais je pense que c'est pas utile ça ça va être utile ajouter une directive publique je dire pour dire où c'est qu'on veut stocker l'officier parce que là pour l'instant on n'a rien récupéré de tout ça ça va être intéressant donc toujours ce qu'on peut faire c'est regarder comment ça marche ici je vois publique je dire et tout simplement comment ça se passe donc ici je vais taper mon publique je dire publique je dire voilà alors on avait créé un fichier out dire un paramètre out dire donc je vais utiliser ce param out dire pour mon publique je dire donc dollar param out dire et c'est de la quantification par salmone et vu qu'on fait ça quand même par fichier je ferai je ferai ça comme ça alors là j'ai mis 2 dollars ça va pas marcher voilà ici j'ai fait comme ça recommençons exactement la même chose voilà on a dit un explode créer un fichier out dire result et ici on a détaillé que je voulais dans result un dossier salmone donc je vois qu'un nouveau dossier result a été créé dedans on a bien un dossier salmone et dedans on a un dossier gut pour toutes nos données gut un dossier liver un dossier lung pour toutes nos données lung voilà ici qu'est ce qu'ils ont fait ils ont fait juste par un out dire on pouvait faire ça donc après la directive publique je dire va pouvoir nous permettre si on regarde bien les différents modes de choisir comment on va pouvoir publier les résultats on peut soit utiliser simlink pour créer un lien symbolique absolu rellink pour créer un lien symbolique relatif link pour créer un hardlink copy pour copier copy nous follow on va copier les fichiers sans suivre les liens symboliques et move on va déplacer les fichiers donc toutes les infos sont détaillés comment utiliser, pourquoi moi généralement je fais soit du link soit du copy plus du link parce que c'est ce qui est un hardlink ça va me permettre de pas copier le fichier mais quand j'aurai supprimé mon premier fichier je garde mon deuxième fichier parce que c'est juste un lien entre les deux donc il n'y a pas de problème si je fais un lien symbolique je supprime mon fichier d'origine j'ai plus de fichiers j'ai plus de fichiers copy et de le trouter ça vous détaille comment faire ça d'autres options sont utilisables ici il n'y a pas de problème on peut même changer le nom tout ce qu'on veut à ce niveau là il n'y a aucun soucis ici ce qu'on a appris c'est comment connecter deux process avec des channels c'est ce qu'on a fait ici on avait un process ici on a un process ici et ces deux process sont connectés par le channel index et donc oui ce channel là vient d'ici donc il n'y a aucun problème on voit très bien que ce premier process ne va pouvoir marcher que si je fais ce premier fichier ce premier fichier est dans mes paramètres de base donc il va pouvoir marcher dès le début ce process là ne va pouvoir marcher qu'en ayant ce channel là ce channel là qui est ce channel de sortie de ce process là donc c'est vraiment comme on a vu précédemment les channels qui vont vraiment faire le lien entre les process voilà utiliser Wizium pour pouvoir éviter de refaire les étapes qui avaient déjà été gardées en mémoire on a fait ça aussi utiliser tag pour avoir des données plus lisibles plus détaillées c'est ce qu'on a fait là et utiliser public dire pour tout garder c'est ce qu'on a fait ici voilà maintenant on va juste faire une étape multi QC donc regardons le script 5 alors face QC ce que je vais faire on va tout effacer j'aime bien vraiment tout effacer que je recommence donc je vais effacer tous mes résultats tout mon exploit oui j'efface regardons le script 5 script 5 c'est la même chose donc on a toujours index on a maintenant un process supplémentaire qui est le process face QC donc ici on a index on a notre channel de quantification on a notre quantification on lui a donné un channel pour récupérer la sortie pour l'instant on ne s'en sert pas mais on va en servir après il n'y a pas de problème et là de manière similaire on a créé un channel face QC pour récupérer l'output de face QC donc ici on remarque que quantification et face QC ces 2 process là vont récupérer le même channel nextflow va comprendre qu'il faut envoyer le même channel et faire des copies en interne et donc aucun problème nextflow va gérer ça tout seul donc je relance tout ça moi je relance mon script 5 je relance tout ça qu'est ce qu'il va se passer ici voilà donc j'ai vraiment gardé ici au moins tout se passe sur mes 3 différentes paires de face Q donc là on voit que ce qui se passe on a face QC sur le liver face QC sur le gut face QC sur le lung et après la quantification par salmon sur le liver, sur le gut et sur le lung et voilà donc que se passe ici nextflow c'est vraiment copier le channel read-perse en 2 channels identiques parce qu'ils sont demandés 2 fois comme input de 2 process donc ça y a pas de problème maintenant l'étape finale ça va être de récupérer toutes les infos et tout mettre dans multidiffy donc on va faire ça alors fermons le script 5 ouvrons le script 6 donc script 6 qu'est ce qu'on a en plus on a toujours notre premier process index seconde princesse de process de quantification quatrième process de qualité control sur les face Q et dernier process multi QC qui va nous vraiment nous permettre de faire un rapport final donc ici qu'est ce qui se passe multi QC qui est fait sur ici les fichiers de quantification sur les sur les output de quantification on mix vraiment le channel des quantifications avec les channels des face QC pour avoir au final qu'un seul channel et on va utiliser ici cet opérateur collect qui va nous permettre de rassembler tous ces channels là en un seul channel donc je vais découpler tout ça pour montrer un peu ce qui se passe ici je vais appeler multi QC input channel je rajoute ici alors je vais juste montrer ce qui se passe avec un view avant le collect et avec un view après le collect donc si je lance le script 6 uniquement sur les données par défaut c'est à dire juste une seule paire de face Q en entrée ici ce qui va se passer ça va être très simple je vais avoir qu'un seul channel ici de face QC un seul channel ici pour quantification du coup ça va se faire sans aucun problème ici on voit ce qui se passe on a notre dossier gut on a nos logs ici et tout ça est passé notre premier ici on a mixé les deux ce qui nous fait vraiment 2 éléments dans notre channel la temporaire qu'on collectionne ici après on utilise dot collect pour récupérer tout ça et on crée une liste dot collect est un opérateur qui va permettre de récupérer tous les différents éléments les différents instances d'un channel pour créer une liste et donc là un seul élément dans chacune des instances de ma channel ici on trouve avec 2 éléments si je relance ce script là sur toutes mes données j'irai qu'ils aient réjoué pour éviter d'avoir refaire les étapes qu'on a déjà été faites là ce qui va se passer c'est qu'on va avoir beaucoup plus de données avant qui vont être après collectés en un seul channel donc on va voir ça ici tout est en train de se repasser là donc là c'est vraiment toutes les données qu'on a séparées et ici ma channel qui va tout récupérer avec l'opérateur dot collect c'est ce qu'on voit ici et voilà tout ça va passer dans mulliqc donc c'est pour ça que mulliqc on lui donne vraiment on ne s'en met pas on ne va pas réfléchir et voilà ça se passe de manière très simple donc si on regarde après mulliqc on lui a fait on lui a dit un publishdir qui était outdir donc ce qu'on a spécifié en détail donc ici je regarde les résultats et je vois j'ai bien un mulliqc report bon là le mulliqc report je le regarde je regarde le fichier html en tant que tel je regarde pas ça dans un web browser donc c'est pour ça que ça marche pas terrible c'est pas bien grave donc regardons si ils en disent ici ok ok on veut une seule tasse de mulliqc aussi c'est pour ça qu'on utilise mix pour combiner les deux channels et qu'on utilise collect après pour avoir un seul élément c'est exactement ça ici on a vu comment utiliser mix pour combiner deux channels en une seule et comment utiliser collect pour récupérer tous les éléments différents de mes channels dans différentes instances en une seule et on a vu effectivement oui on a chainé on a enchaîné plusieurs opérateurs les uns ensuite des autres on l'avait déjà fait avant en fait alors on va utiliser d'autres choses supplémentaires rajouter des événements une fois que le pipeline est fini donc ça c'est le script 7 donc qu'est ce qui se passe si on lance le script 7 regardons d'avant ce qui se passe script 7 script 7 voilà et voilà script 7 on a un petit message à la fin qui nous dit c'est fini ouvrez ça dans votre navigateur comment écrit le script 7 ici ce qu'on a fait de manière très simple on a rajouté cette information rajouter en utilisant toujours log info comme on avait fait avant ici on utilise un if terner donc si le workflow est un workflow incompli ça veut dire que si mon workflow est fini donc si le workflow est a bien marché dans ce cas là voilà la sortie qu'on va vouloir afficher et si ça n'a pas marché voilà ce qu'on va vouloir afficher ici dans notre cas ça marche on a effectivement le premier message qui a fiché de la même manière on peut utiliser un email donc là je ne vais pas vous montrer ça ici parce que Gitpod n'a pas de serveurs mail configurés généralement sur vos clusters de calcul vous devriez avoir des serveurs mail configurés pour ça notamment des serveurs smtp je vous conseille de regarder la documentation pour tout ça donc Descript Custom oui on peut rajouter Descript Custom comme on veut ici c'est vraiment un exemple qui nous dit qu'est ce qu'on peut faire à ce niveau là alors on va créer ici ce fichier là copy alors j'ai créé un dossier bin voilà j'ai créé un dossier que je vais appeler fastqc.sh ok je vais mettre tout ça dedans voilà donc c'est un script bash qui va prendre en argument 1 donc c'est un script bash tout simplement moi j'écris pas un script bash comme ça pour moi les arguments sont positionnels mais on doit leur donner des des paramètres pour savoir dans quel sens c'est donc là on recue voilà c'est un script bash on l'a écrit voilà ici on va juste aussi lui donner les bonnes permissions schmoud plusx sur bin fastqc.sh pour laquelle j'ai mis ce script bash dans bin c'est que nextflow va directement considérer que tout ce qui est dans bin est dans le chemin d'accès quand on est dans notre répertoire de tâches et donc là je vais récupérer tout ça ici je regarde mon script 7 et au lieu de faire fastqc on va lancer fastqc.sh à la place vraiment ceci c'est pour vous montrer qu'on peut lancer vous pouvez encapsuler votre propre script maison ici à l'intérieur sans aucun problème et donc là si je regarde mon répertoire de travail je vais regarder e qu'est ce qui s'est passé dans e e le command.sh on a utilisé mon script fastqc.sh voilà c'est exactement ce qu'on voulait voir donc ça c'est fait ça marche donc on a vu comment utiliser des scripts fait maison je vous laisse gérer ça tout seul ah oui et vraiment avoir tous vos scripts dans le fichier bin parce que next law va récupérer tout ça de manière automatique donc au moins vous n'avez pas besoin vous occupez à donner des chemins absolus pour tout ça alors next law va pouvoir nous donner plus d'informations en utilisant d'autres paramètres notamment les paramètres with report, with trace with timeline with dag on va pouvoir faire ça alors de manière très simple en fait le script qu'on vient d'écrire c'est ce script-là et voilà la flowchart en détails ce qu'on a fait c'est vraiment ce qu'on a fait ou partant du script on a indexé partant de fichier fastqc on a d'un côté fait tourner fastqc de l'autre côté fait tourner de la quantification par salmon avec avec notre channel d'index de ce côté-là on a récupéré toutes nos infos ici et quand on passe tout dans multiqc donc voilà donc ce qu'on va faire c'est que on va réutiliser ce script-là donc au lieu maintenant d'utiliser un script nous avons créé nous on va utiliser ce script-là donc nextflow comme je l'ai dit avant fait beaucoup de suppositions pour dos et comme je l'ai montré précédemment pour docker si on ne spécifie pas de chemin d'accès au container nextflow suppose que tout est sur docker hub là c'est pareil si on ne spécifie pas nextflow un chemin d'accès vers le script nextflow va supposer que le script est sur github et même encore plus loin que ça que c'est un répertoire dans github et que c'est un répertoire dans github qui est dans l'organisation nextflow donc ça reviendrait au même que d'écrire ceci je vais vous montrer ça voilà donc quand je lance ici nextflow va récupérer toutes les infos pour moi il lance donc là il n'a pas aimé des choses on va le reprendre après mais c'est pas grave je voulais vous montrer c'était qu'on mette nextflow ça ne change rien parce que nextflow le sait voilà donc là qu'est ce qu'il aime pas quelque chose qu'on a écrit ici c'est dans le fichier alors nextflow quand on lui donne il va télécharger directement toutes les infos là-dedans donc nextflow va m'avoir créer un nouveau ah oui mais alors il m'a de créer un nouveau j'ai ça alors qu'est ce qui se passe ici l'erreur c'est dans le module rnsc.nf module rnsc.nf ah oui il y en a des machins qui ne marchent pas ici alors ok bon on va reprendre ça autrement donc en fait ce pipeline là qui a été créé c'est vraiment juste le pipeline qu'on a qu'on a remis ah oui je me souviens un moment non désolé je viens de réaliser j'ai vu précédemment sur Slack mes collègues disaient que ce script là avait un petit souci donc c'est pour ça qu'il ne marche pas il faut juste le mettre à jour donc je suis sûr que d'ici quelques jours il y aura une pool ou quoi ce qui sera fait et qu'il mettra ça en place on va nous recommencer à utiliser notre training donc si je repars sur nextflow.io si je monte training moi c'était le script 7 qu'on voulait faire marcher donc ok donc ici au lieu d'utiliser rnsc on va utiliser slash nf- voilà en utilisant ceci nextflow va directement chercher dans l'organisation nextflow-io le repos training et dans le repos training dans le dossier ns-training il va chercher le script 7 donc c'est le fichier qui a été créé de base donc ça va être le fichier qu'on n'a pas modifié nous bien évidemment mais pas trouvé ça parce que j'ai même tapé moi peut-être qu'il lui manquait si je lui met peut-être trop de slash il n'aime pas voilà c'était ça il y avait un slash en plus du coup nextflow a dû penser que training c'était le nom du repos et donc là voilà on a fait exactement ce qu'on voulait faire tout à l'heure avec le script de rnsc mais on l'a fait avec le script de training et c'est la même chose on peut utiliser vraiment nextflow pour utiliser un script là qui est ce script ici donc c'est pas du tout le script que j'ai écrit moi c'est le script qui était disponible ici c'est vraiment pour pouvoir montrer qu'on peut faire ça sans aucun problème et donc on va réutiliser tout ça avec ces infos là donc ici voyons voir à quoi ça sert de faire un rapport toutes ces infos là report, trace timeline et tout le reste donc ici dans mon résultat on les a tous mis ici donc ici je vais avoir un dossier html alors je vais télécharger ça moi je vais montrer à quoi faire ça j'ai un fichier texte trace qui va me donner toutes les infos d'utilisation de cpu qu'est ce qui s'est passé c'était quoi les noms vraiment toutes les infos sur tous les processeurs donc ça c'est vraiment très bien si vous voulez débugger ou pas j'ai un rapport html qu'on va télécharger aussi voilà ce que je vais faire je vais télécharger aussi le rapport on va télécharger le DAG donc le DAG c'est exactement ce qu'on a vu avant c'est notre diagramme c'est ce qui s'est passé c'est exactement ce que je vous ai détaillé précédemment le rapport le rapport de multicussy c'est un rapport multicussy on a nos infos d'abord de fascus les infos de salmone qu'est ce qui s'est passé des infos statiques des infos générales ici tous les infos sur fascusy donc voilà moi j'aime bien faire des beaux des potagrammes dans multicussy c'est ce qu'on a là donc aucun problème ici si je regarde le rapport html ça c'est vraiment ce qui est produit par nextlo donc on voit quelle est une des commandes que j'ai créé ici on peut voir que j'ai utilisé quand j'ai lancé mon script j'ai utilisé moins r master j'ai demandé à nextlo de me dire tu vas utiliser ce script là mais vu que c'est un script sur github moi pour être sûr qu'il soit reproductible c'est toujours de savoir ce que je vais demander je lui ai dit je veux que tu m'utilises la branche master j'aurais pu demander une release en particulier un comique particulier un tag en particulier on peut vraiment demander ce que l'on veut et là toutes les infos supplémentaires dont on a besoin quel était le container utilisé quel était le profil utilisé si on avait un profil et là on va avoir des infos supplémentaires sur l'utilisation du CPU quel était la durée de tous les différents process qu'est ce qui s'est passé en entrée sortie au niveau du disque dur et des infos supplémentaires sur toutes les tâches où on a vraiment toutes les infos possibles sur toutes les tâches quelles étaient les scripts là vous pouvez vraiment regarder tout ce que vous voulez sans aucun problème et le dernier fichier c'était celui-là le fichier timeline où on voit vraiment tout ce qui s'est passé on voit qu'on a ce qui s'est passé dans quel sens ça s'est passé et combien de temps tout a duré donc voilà là effectivement au niveau de temps de durée c'est très court donc c'est pas très intéressant mais sur des scripts pipeline ça sera beaucoup plus intéressant de voir ça donc je vais refaire tout ça donc on a fait c'était exactement ça on peut utiliser info pour avoir des infos on peut utiliser minus r comme je vous ai montré pour avoir des infos ça nous a aucun problème donc après si vous voulez plus de ressources et plus de documentation vous indique à regarder la documentation nextflow ça c'est vraiment quelque chose que je conseille à tout le monde de regarder comment ça se passe nextflow patterns de vraiment de petits détails sur comment implémenter tout ce qu'on veut avec des avec des exemples précis et détaillés un exemple de pipeline en varncalling utilisant les best practices du jay ticket et bien évidemment NFCore qui sont une collection de pipeline communautaires comme je vous ai introduit plutôt aujourd'hui et comme je vais vous détailler demain et donc c'est tout pour aujourd'hui donc je voulais vous remercier à tous pour votre attention n'hésitez pas à poser des questions sur Slack des volontaires sont là pour vous aider je suis là pour répondre à vos questions et si vous avez d'autres problèmes vraiment n'hésitez pas moi je suis là pour ça donc merci à vous au revoir