Commit 851dfb13 authored by Ludovic Legrand's avatar Ludovic Legrand
Browse files

correction + install singularity et nextflow

parent b9cd2942
Pipeline #42682 passed with stage
in 2 minutes and 16 seconds
# Pré requis
## Conda
## Conda
```bash
wget -q https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
......@@ -16,7 +16,39 @@ conda config --add channels bioconda conda-forge
## Singularity
## Nextflow
Ce n'est pas simple car il n'est plus dans les dépôts au moins pour Debian et Ubuntu.
Voici une recette pour Debian/Ubuntu
```bash
apt install libseccomp-dev pkg-config squashfs-tools cryptsetup golang build-essential wget
wget https://github.com/sylabs/singularity/releases/download/v3.8.3/singularity-ce-3.8.3.tar.gz
tar xzf singularity-ce-3.8.3.tar.gz
cd singularity-ce-3.8.3
./mconfig
cd builddir
make
make install
```
## Nextflow
Assurez vous d'avoir un java 8 ou java 11.
```bash
java -version
```
Installation
```bash
curl -s https://get.nextflow.io | bash
```
Vous pouvez déplacer le binaire **nextflow** ou vous voulez.
# Demo Nextflow
......@@ -36,9 +68,9 @@ En DSL1 il est nécessaire de dupliquer les channels, un channel ne pouvant etre
Il y a peu de changements entre le DSL1 et le DSL2 concernant les channels. Le principalement changement c'est qu'un channel peut etre utilisé plusieurs fois sans devoir le dupliquer.
1. ```nextflow run 01channel/channel.fromPath.nf```
2. dupliquer la derniere ligne avec '''view()''' et relancer le pipeline
2. dupliquer la derniere ligne avec `view()` et relancer le pipeline
Tester aussi '''01channel/channel.fromFilePairs.nf''', ce channel un peu particulier est très utile en bioinformatique.
Tester aussi `01channel/channel.fromFilePairs.nf`, ce channel un peu particulier est très utile en bioinformatique.
## Process
......@@ -50,11 +82,11 @@ Ce process fait une simple decompression d'un fichier.
nextflow run 02process/process.simple.nf
```
- '''publishDir''' indique où seront les fichiers de sortie.
- '''tag''' recupère la variable '''id''' provenant du bloc '''input:''' et permet d'avoir le nom du fastq dans les logs pour les tâches du process
- '''println(...)''' affiche a l'écran le texte et le contenu de la variable
- il est possible de créer et d'assigner une variable en groovy et de l'utiliser dans le script bash. Exemple avec la variable '''toto'''
- '''touch myfile''' va créer un fichier mais il n'apparait pas dans le bloc '''output''' donc il restera dans le répertoire de travail et ne pourra pas etre utilisé par un autre process et ne sera pas disponible dans le '''publishDir'''
- `publishDir` indique où seront les fichiers de sortie.
- `tag` recupère la variable `id` provenant du bloc `input:` et permet d'avoir le nom du fastq dans les logs pour les tâches du process
- `println(...)` affiche a l'écran le texte et le contenu de la variable
- il est possible de créer et d'assigner une variable en groovy et de l'utiliser dans le script bash. Exemple avec la variable `toto`
- `touch myfile` va créer un fichier mais il n'apparait pas dans le bloc `output` donc il restera dans le répertoire de travail et ne pourra pas etre utilisé par un autre process et ne sera pas disponible dans le `publishDir`
### Process mutli channel
......@@ -64,13 +96,13 @@ Cet exemple permet de voir comment se comporte un process avec en entrée plusie
nextflow run 02process/process.multichannel.nf
```
- Il y a 6 fichiers en entrée mais nous avons que 3 fichiers en sortie a cause du second channel, '''chanNum''', qui n'a que 3 valeurs
- Quand il y a plusieurs channel dans le bloc '''input:''', les channels sont lus de maniere synchrone et le plus petit channel limite le nombre de tâches
- Il y a 6 fichiers en entrée mais nous avons que 3 fichiers en sortie a cause du second channel, `chanNum`, qui n'a que 3 valeurs
- Quand il y a plusieurs channel dans le bloc `input:`, les channels sont lus de maniere synchrone et le plus petit channel limite le nombre de tâches
### Process avec each
Cet exemple vous montre comment utiliser '''each'''. Son utilisation est assez spécifique, vous pouvez par exemple lancer plusieurs jobs avec des parametres differents sur le meme jeu de données.
Cet exemple vous montre comment utiliser `each`. Son utilisation est assez spécifique, vous pouvez par exemple lancer plusieurs jobs avec des parametres differents sur le meme jeu de données.
```bash
nextflow run 02process/process.each.nf
......@@ -97,15 +129,15 @@ Essayer de remplacer la partie **output** du process **gunzip** par le code en d
### Module avec un process
Dans le pipeline '''module.simple.nf''', nous avons le meme pipeline que precedemment mais avec la creation d'un module pour le process gunzip et un pipeline qui importe ce module pour l'utiliser.
Dans le pipeline `module.simple.nf`, nous avons le meme pipeline que precedemment mais avec la creation d'un module pour le process gunzip et un pipeline qui importe ce module pour l'utiliser.
```bash
nextflow run 03workflow_module/module.simple.nf
```
Nous obtenons le meme comportement que pour le pipeline '''02process/process.simple.nf'''
Nous obtenons le meme comportement que pour le pipeline `02process/process.simple.nf`
### Module avec N process
### Module avec N process
On ajoute un process qui utilise les données du process gunzip.
......@@ -148,7 +180,7 @@ Dans cet exemple, le pipeline va charger la configuration du profile **standard*
- le process **gunzip** a un label **multithread** donc il va charger dans le fichier **conf/lipm-smp.config** la partie **withLabel: multithread**
- le process **gzip** n'a pas de label donc il charge la configuration par défaut du fichier **conf/lipm-smp.config**
Vous pouvez changer de profile avec le parametre '''-profile'''. Si vous essayez le profile **lipm** ou **genologin** vous aurez une erreur car il va essayer de lancer les jobs sur un cluster SGE ou SLURM qui n'existe pas sur votre machine.
Vous pouvez changer de profile avec le parametre `-profile`. Si vous essayez le profile **lipm** ou **genologin** vous aurez une erreur car il va essayer de lancer les jobs sur un cluster SGE ou SLURM qui n'existe pas sur votre machine.
```bash
nextflow run 04configuration_environnement/conf.simple.nf -profile lipm
......@@ -190,8 +222,7 @@ La meme chose est possible mais avec conda
nextflow run 04configuration_environnement/conf.conda2.nf --genome $PWD/genome.fasta -profile conda,standard
```
### Environnement dynamique
### Environnement dynamique
Vous pouvez faire des benchmarks avec plusieurs versions en utilisant par exemple **conda** et **each**
......@@ -218,7 +249,7 @@ Un exemple très simple qui vous permet de voir que tous les fichiers du channel
nextflow run 05operateurs/operateur.collect.nf
```
- dans le fichier '''result/05operateurs/collect.log''' vous avez le resultat d'un '''ls''' dans le repertoire de travail. Vous pouvez aussi aller voir dans le répertoire correspondant de '''work'''.
- dans le fichier `result/05operateurs/collect.log` vous avez le resultat d'un `ls` dans le repertoire de travail. Vous pouvez aussi aller voir dans le répertoire correspondant de `work`.
Dans ce second exemple, le collect va attendre tous les fichiers du channel et les mettre a disposition dans le répertoire de travail mais il y a en plus un traitement pour générer un parametre pour la ligne de commande.
......@@ -230,27 +261,26 @@ nextflow run 05operateurs/operateur.collect2.nf
```
- Dans la console vous allez voir la liste des parametre formée a partir des noms des fichiers
- Dans le repertoire '''result/05operateurs/collect2.log''' il y a la ligne avec les parametres sous forme de string
- Dans le repertoire `result/05operateurs/collect2.log` il y a la ligne avec les parametres sous forme de string
Attention a la taille de la ligne de commande avec cet manière de procéder.
### splitCsv et groupeTuple
### splitCsv et groupeTuple
Un exemple un peu plus complexe mais plus proche de la réalité. Dans cet exemple nous allons fournir une fichier CSV avec des informations de sample et les fichiers associés. C'est un bon moyen pour prendre en charge les réplicas technique par exemple.
Les CSV fourni n'a pas de header donc nous ajoutons un header avec '''header: ['sample', 'fileR1', 'fileR2']''', cela permet d'utiliser le nom des colonnes au lieu de l'index.
Les CSV fourni n'a pas de header donc nous ajoutons un header avec `header: ['sample', 'fileR1', 'fileR2']`, cela permet d'utiliser le nom des colonnes au lieu de l'index.
```bash
nextflow run 05operateurs/operateur.groupetuple.nf
```
1. '''mock1''' va simuler un mapping et les lignes du fichier CSV sont traitées indépendement lors du mapping pour avoir le maximum de parallelisation
2. '''mock2''' va simuler la fusion des replicas techniques pour permettre les traitements en aval. C'est groupeTuple() qui va regrouper les fichiers ayant le meme nom de sample (premiere valeur d'un tuple).
1. `mock1` va simuler un mapping et les lignes du fichier CSV sont traitées indépendement lors du mapping pour avoir le maximum de parallelisation
2. `mock2` va simuler la fusion des replicas techniques pour permettre les traitements en aval. C'est groupeTuple() qui va regrouper les fichiers ayant le meme nom de sample (premiere valeur d'un tuple).
Vous pouvez decommenter les lignes avec '''view''' pour le résultat des opérateurs.
Vous pouvez decommenter les lignes avec `view` pour le résultat des opérateurs.
La contrainte majeure de '''groupeTuple''' c'est qu'il faut un tuple de 2 valeurs seulement. La seconde valeur peut etre une liste.
La contrainte majeure de `groupeTuple` c'est qu'il faut un tuple de 2 valeurs seulement. La seconde valeur peut etre une liste.
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment