From 537f52a6409200ac843e457722f0a74660d7d28c Mon Sep 17 00:00:00 2001 From: James Fellows Yates Date: Sun, 14 Feb 2021 17:50:20 +0100 Subject: [PATCH 01/86] Add MPI-EVA profile --- README.md | 30 ++--- conf/eva.config | 52 ++++++++ conf/pipeline/eager/eva.config | 212 +++++++++++++++++++++++++++++++++ docs/eva.md | 29 +++++ docs/pipeline/eager/eva.md | 34 ++++++ nfcore_custom.config | 1 + 6 files changed, 344 insertions(+), 14 deletions(-) create mode 100644 conf/eva.config create mode 100644 conf/pipeline/eager/eva.config create mode 100644 docs/eva.md create mode 100644 docs/pipeline/eager/eva.md diff --git a/README.md b/README.md index 45721e8..56c73b6 100644 --- a/README.md +++ b/README.md @@ -6,20 +6,20 @@ A repository for hosting Nextflow configuration files containing custom paramete ## Table of contents -* [Using an existing config](#using-an-existing-config) - * [Configuration and parameters](#configuration-and-parameters) - * [Offline usage](#offline-usage) -* [Adding a new config](#adding-a-new-config) - * [Checking user hostnames](#checking-user-hostnames) - * [Testing](#testing) - * [Documentation](#documentation) - * [Uploading to `nf-core/configs`](#uploading-to-nf-coreconfigs) -* [Adding a new pipeline-specific config](#adding-a-new-pipeline-specific-config) - * [Pipeline-specific institutional documentation](#pipeline-specific-institutional-documentation) - * [Pipeline-specific documentation](#pipeline-specific-documentation) - * [Enabling pipeline-specific configs within a pipeline](#enabling-pipeline-specific-configs-within-a-pipeline) - * [Create the pipeline-specific `nf-core/configs` files](#create-the-pipeline-specific-nf-coreconfigs-files) -* [Help](#help) +- [Using an existing config](#using-an-existing-config) + - [Configuration and parameters](#configuration-and-parameters) + - [Offline usage](#offline-usage) +- [Adding a new config](#adding-a-new-config) + - [Checking user hostnames](#checking-user-hostnames) + - [Testing](#testing) + - [Documentation](#documentation) + - [Uploading to `nf-core/configs`](#uploading-to-nf-coreconfigs) +- [Adding a new pipeline-specific config](#adding-a-new-pipeline-specific-config) + - [Pipeline-specific institutional documentation](#pipeline-specific-institutional-documentation) + - [Pipeline-specific documentation](#pipeline-specific-documentation) + - [Enabling pipeline-specific configs within a pipeline](#enabling-pipeline-specific-configs-within-a-pipeline) + - [Create the pipeline-specific `nf-core/configs` files](#create-the-pipeline-specific-nf-coreconfigs-files) +- [Help](#help) ## Using an existing config @@ -107,6 +107,7 @@ Currently documentation is available for the following systems: * [CZBIOHUB_AWS](docs/czbiohub.md) * [DENBI_QBIC](docs/denbi_qbic.md) * [EBC](docs/ebc.md) +* [EVA](docs/eva.md) * [GENOTOUL](docs/genotoul.md) * [GENOUEST](docs/genouest.md) * [GIS](docs/gis.md) @@ -174,6 +175,7 @@ Currently documentation is available for the following pipelines within specific * [UPPMAX](docs/pipeline/ampliseq/uppmax.md) * eager * [SHH](docs/pipeline/eager/shh.md) + * [EVA](docs/pipeline/eager/eva.md) * rnafusion * [MUNIN](docs/pipeline/rnafusion/munin.md) * sarek diff --git a/conf/eva.config b/conf/eva.config new file mode 100644 index 0000000..497085d --- /dev/null +++ b/conf/eva.config @@ -0,0 +1,52 @@ +//Profile config names for nf-core/configs +params { + config_profile_description = 'Generic MPI-EVA cluster(s) profile provided by nf-core/configs.' + config_profile_contact = 'James Fellows Yates (@jfy133)' + config_profile_url = 'https://eva.mpg.de' +} + +// Preform work directory cleanup after a successful run +cleanup = true + +singularity { + enabled = true + autoMounts = true +} + +process { + executor = 'sge' + penv = 'smp' + queue = 'all.q' +} + +executor { + queueSize = 8 +} + +profiles { + archgen { + params { + igenomes_base = "/projects1/public_data/igenomes/" + config_profile_description = 'MPI-EVA archgen profile, provided by nf-core/configs.' + max_memory = 256.GB + max_cpus = 32 + max_time = 720.h + //Illumina iGenomes reference file path + igenomes_base = "/projects1/public_data/igenomes/" + } + + process { + queue = 'archgen.q' + } + + singularity { + cacheDir = "/mnt/archgen/users/singularity_scratch" + + } + + } + // Profile to deactivate automatic cleanup of work directory after a successful run. Overwrites cleanup option. + debug { + cleanup = false + } +} diff --git a/conf/pipeline/eager/eva.config b/conf/pipeline/eager/eva.config new file mode 100644 index 0000000..8850cf1 --- /dev/null +++ b/conf/pipeline/eager/eva.config @@ -0,0 +1,212 @@ +// Profile config names for nf-core/configs + +params { + // Specific nf-core/configs params + config_profile_contact = 'James Fellows Yates (@jfy133)' + config_profile_description = 'nf-core/eager EVA profile provided by nf-core/configs' +} + +// Specific nf-core/eager process configuration +process { + + maxRetries = 2 + + // Solution for clusterOptions comes from here: https://github.com/nextflow-io/nextflow/issues/332 + personal toMega conversion + clusterOptions = { "-S /bin/bash -j y -o output.log -l h_vmem=${task.memory.toMega().toString().replaceAll(/[\sB]/,'')}M,virtual_free=${task.memory.toMega().toString().replaceAll(/[\sB]/,'')}M" } + + withLabel:'sc_tiny'{ + cpus = { check_max( 1, 'cpus' ) } + memory = { check_max( 1.GB * task.attempt, 'memory' ) } + time = { task.attempt == 3 ? 1440.h : task.attempt == 2 ? 48.h : 2.h } + } + + withLabel:'sc_small'{ + cpus = { check_max( 1, 'cpus' ) } + memory = { check_max( 4.GB * task.attempt, 'memory' ) } + time = { task.attempt == 3 ? 1440.h : task.attempt == 2 ? 48.h : 2.h } + } + + withLabel:'sc_medium'{ + cpus = { check_max( 1, 'cpus' ) } + memory = { check_max( 8.GB * task.attempt, 'memory' ) } + time = { task.attempt == 3 ? 1440.h : task.attempt == 2 ? 48.h : 2.h } + } + + withLabel:'mc_small'{ + cpus = { check_max( 2, 'cpus' ) } + memory = { check_max( 4.GB * task.attempt, 'memory' ) } + time = { task.attempt == 3 ? 1440.h : task.attempt == 2 ? 48.h : 2.h } + } + + withLabel:'mc_medium' { + cpus = { check_max( 4, 'cpus' ) } + memory = { check_max( 8.GB * task.attempt, 'memory' ) } + time = { task.attempt == 3 ? 1440.h : task.attempt == 2 ? 48.h : 2.h } + } + + withLabel:'mc_large'{ + cpus = { check_max( 8, 'cpus' ) } + memory = { check_max( 16.GB * task.attempt, 'memory' ) } + time = { task.attempt == 3 ? 1440.h : task.attempt == 2 ? 48.h : 2.h } + } + + withLabel:'mc_huge'{ + cpus = { check_max( 32, 'cpus' ) } + memory = { check_max( 256.GB * task.attempt, 'memory' ) } + time = { task.attempt == 3 ? 1440.h : task.attempt == 2 ? 48.h : 2.h } + } + + // Fixes for SGE and Java incompatibility due to Java using more memory than you tell it to use + + withName: makeSeqDict { + clusterOptions = { "-S /bin/bash -l h_vmem=${task.memory.toMega().plus(4000).toString().replaceAll(/[\sB]/,'')}M,virtual_free=${task.memory.toMega().plus(4000).toString().replaceAll(/[\sB]/,'')}M" } + } + + withName: fastqc { + clusterOptions = { "-S /bin/bash -l h_vmem=${task.memory.toMega().plus(1000).toString().replaceAll(/[\sB]/,'')}M,virtual_free=${task.memory.toMega().plus(1000).toString().replaceAll(/[\sB]/,'')}M" } + } + + withName: adapter_removal { + clusterOptions = { "-S /bin/bash -l h_vmem=${task.memory.toMega().plus(1000).toString().replaceAll(/[\sB]/,'')}M,virtual_free=${task.memory.toMega().plus(1000).toString().replaceAll(/[\sB]/,'')}M" } + } + + withName: dedup { + clusterOptions = { "-S /bin/bash -l h_vmem=${task.memory.toMega().plus(1000).toString().replaceAll(/[\sB]/,'')}M,virtual_free=${task.memory.toMega().plus(1000).toString().replaceAll(/[\sB]/,'')}M" } + } + + withName: markduplicates { + clusterOptions = { "-S /bin/bash -l h_vmem=${task.memory.toMega().plus(5000).toString().replaceAll(/[\sB]/,'')}M,virtual_free=${task.memory.toMega().plus(1000).toString().replaceAll(/[\sB]/,'')}M" } + } + + withName: malt { + clusterOptions = { "-S /bin/bash -l h_vmem=${task.memory.toMega().plus(1000).toString().replaceAll(/[\sB]/,'')}M,virtual_free=${task.memory.toMega().plus(1000).toString().replaceAll(/[\sB]/,'')}M" } + } + + withName: maltextract { + clusterOptions = { "-S /bin/bash -l h_vmem=${task.memory.toMega().plus(1000).toString().replaceAll(/[\sB]/,'')}M,virtual_free=${task.memory.toMega().plus(1000).toString().replaceAll(/[\sB]/,'')}M" } + } + + withName: multivcfanalyzer { + clusterOptions = { "-S /bin/bash -l h_vmem=${task.memory.toMega().plus(1000).toString().replaceAll(/[\sB]/,'')}M,virtual_free=${task.memory.toMega().plus(1000).toString().replaceAll(/[\sB]/,'')}M" } + } + + withName: mtnucratio { + clusterOptions = { "-S /bin/bash -l h_vmem=${task.memory.toMega().plus(1000).toString().replaceAll(/[\sB]/,'')}M,virtual_free=${task.memory.toMega().plus(1000).toString().replaceAll(/[\sB]/,'')}M" } + } + + withName: vcf2genome { + clusterOptions = { "-S /bin/bash -l h_vmem=${task.memory.toMega().plus(1000).toString().replaceAll(/[\sB]/,'')}M,virtual_free=${task.memory.toMega().plus(1000).toString().replaceAll(/[\sB]/,'')}M" } + } + + withName: qualimap { + clusterOptions = { "-S /bin/bash -l h_vmem=${task.memory.toMega().plus(5000).toString().replaceAll(/[\sB]/,'')}M,virtual_free=${task.memory.toMega().plus(1000).toString().replaceAll(/[\sB]/,'')}M" } + } + + withName: damageprofiler { + clusterOptions = { "-S /bin/bash -l h_vmem=${task.memory.toMega().plus(5000).toString().replaceAll(/[\sB]/,'')}M,virtual_free=${task.memory.toMega().plus(1000).toString().replaceAll(/[\sB]/,'')}M" } + } + + withName: circularmapper { + clusterOptions = { "-S /bin/bash -l h_vmem=${task.memory.toMega().plus(1000).toString().replaceAll(/[\sB]/,'')}M,virtual_free=${task.memory.toMega().plus(1000).toString().replaceAll(/[\sB]/,'')}M" } + } + + withName: circulargenerator { + clusterOptions = { "-S /bin/bash -l h_vmem=${task.memory.toMega().plus(1000).toString().replaceAll(/[\sB]/,'')}M,virtual_free=${task.memory.toMega().plus(1000).toString().replaceAll(/[\sB]/,'')}M" } + } + + withName: preseq { + clusterOptions = { "-S /bin/bash -l h_vmem=${task.memory.toMega().plus(4000).toString().replaceAll(/[\sB]/,'')}M,virtual_free=${task.memory.toMega().plus(1000).toString().replaceAll(/[\sB]/,'')}M" } + } + +} + +profiles { + + big_data { + + params { + // Specific nf-core/configs params + config_profile_contact = 'James Fellows Yates (@jfy133)' + config_profile_description = 'nf-core/eager big-data EVA profile provided by nf-core/configs' + } + + executor { + queueSize = 6 + } + + process { + + maxRetries = 2 + + withName:hostremoval_input_fastq { + cpus = { check_max( 1, 'cpus' ) } + memory = { check_max( 32.GB * task.attempt, 'memory' ) } + time = 1440.h + } + + withLabel:'sc_tiny'{ + cpus = { check_max( 1, 'cpus' ) } + memory = { check_max( 2.GB * task.attempt, 'memory' ) } + time = { task.attempt == 3 ? 1440.h : task.attempt == 2 ? 48.h : 2.h } + } + + withLabel:'sc_small'{ + cpus = { check_max( 1, 'cpus' ) } + memory = { check_max( 8.GB * task.attempt, 'memory' ) } + time = { task.attempt == 3 ? 1440.h : task.attempt == 2 ? 48.h : 2.h } + } + + withLabel:'sc_medium'{ + cpus = { check_max( 1, 'cpus' ) } + memory = { check_max( 16.GB * task.attempt, 'memory' ) } + time = { task.attempt == 3 ? 1440.h : task.attempt == 2 ? 48.h : 2.h } + } + + withLabel:'mc_small'{ + cpus = { check_max( 2, 'cpus' ) } + memory = { check_max( 8.GB * task.attempt, 'memory' ) } + time = { task.attempt == 3 ? 1440.h : task.attempt == 2 ? 48.h : 2.h } + } + + withLabel:'mc_medium' { + cpus = { check_max( 4, 'cpus' ) } + memory = { check_max( 16.GB * task.attempt, 'memory' ) } + time = { task.attempt == 3 ? 1440.h : task.attempt == 2 ? 48.h : 2.h } + } + + withLabel:'mc_large'{ + cpus = { check_max( 8, 'cpus' ) } + memory = { check_max( 32.GB * task.attempt, 'memory' ) } + time = { task.attempt == 3 ? 1440.h : task.attempt == 2 ? 48.h : 2.h } + } + + withLabel:'mc_huge'{ + cpus = { check_max( 32, 'cpus' ) } + memory = { check_max( 512.GB * task.attempt, 'memory' ) } + time = { task.attempt == 3 ? 1440.h : task.attempt == 2 ? 48.h : 2.h } + } + } + } + + pathogen_loose { + params { + config_profile_description = 'Pathogen (loose) MPI-EVA profile, provided by nf-core/configs.' + bwaalnn = 0.01 + bwaalnl = 16 + } + } + pathogen_strict { + params { + config_profile_description = 'Pathogen (strict) MPI-EVA SDAG profile, provided by nf-core/configs.' + bwaalnn = 0.1 + bwaalnl = 32 + } + } + human { + params { + config_profile_description = 'Human MPI-EVA SDAG profile, provided by nf-core/configs.' + bwaalnn = 0.01 + bwaalnl = 16500 + } + } +} diff --git a/docs/eva.md b/docs/eva.md new file mode 100644 index 0000000..d69ef03 --- /dev/null +++ b/docs/eva.md @@ -0,0 +1,29 @@ +# nf-core/configs: EVA Configuration + +All nf-core pipelines have been successfully configured for use on the Department of Genetics and Archaeogenetic's clusters at the [Max Planck Institute for Evolutionary Anthropology (MPI-EVA)](http://eva.mpg.de). + +To use, run the pipeline with `-profile eva`. You can further with optimise submissions by specifying which cluster queue you are using e,g, `-profile eva,archgen`. This will download and launch the [`eva.config`](../conf/eva.config) which has been pre-configured with a setup suitable for the `all.q` queue. The number of parallel jobs that run is currently limited to 8. + +Using this profile, a docker image containing all of the required software will be downloaded, and converted to a `singularity` image before execution of the pipeline. The image will currently be centrally stored here: + +## Additional Profiles + +We currently also offer profiles for the different department's specific nodes. + +### archgen + +If you specify `-profile eva,archgen` you will be able to use the nodes available on the `archgen.q` queue. + +Note the following characteristics of this profile: + +- By default, job resources are assigned a maximum number of CPUs of 32, 256 GB maximum memory and 720.h maximum wall time. +- Using this profile will currently store singularity images in a cache under `/mnt/archgen/users/singularity_scratch/cache/`. All archgen users currently have read/write access to this directory, however this will likely change to a read-only directory in the future that will be managed by the IT team. +- Intermediate files will be _automatically_ cleaned up (see `debug` below if you don't want this to happen) on successful run completion. + +>NB: You will need an account and VPN access to use the cluster at MPI-EVA in order to run the pipeline. If in doubt contact the IT team. +>NB: Nextflow will need to submit the jobs via SGE to the clusters and as such the commands above will have to be executed on one of the head nodes. If in doubt contact IT. + +### debug + +This simple profile just turns off automatic clean up of intermediate files. This can be useful for debugging. Specify e.g. with `-profile eva,archgen` + diff --git a/docs/pipeline/eager/eva.md b/docs/pipeline/eager/eva.md new file mode 100644 index 0000000..4537182 --- /dev/null +++ b/docs/pipeline/eager/eva.md @@ -0,0 +1,34 @@ +# nf-core/configs: eva eager specific configuration + +Extra specific configuration for eager pipeline + +## Usage + +To use, run the pipeline with `-profile eva`. + +This will download and launch the eager specific [`eva.config`](../../../conf/pipeline/eager/eva.config) which has been pre-configured with a setup suitable for the MPI-EVA cluster. + +Example: `nextflow run nf-core/eager -profile eva` + +## eager specific configurations for eva + +Specific configurations for eva has been made for eager. + +### General profiles + +- The general MPI-EVA profile runs with default nf-core/eager parameters, but with modifications to account for issues SGE have with Java tools. + +#### big_data + +- This defines larger base computing resources for when working with very deep sequenced or high-endogenous samples. + +### Contextual profiles + +#### Human Pop-Gen + +* `human`: optimised for mapping of human aDNA reads (i.e. bwa aln defaults as `-l 16500, -n 0.01`) + +#### Pathogen + +* `pathogen_loose`: optimised for mapping of human aDNA reads (i.e. bwa aln defaults as `-l 16 -n 0.01`) +* `pathogen_strict`: optimised for mapping of human aDNA reads (i.e. bwa aln defaults as `-l 32, -n 0.1`) \ No newline at end of file diff --git a/nfcore_custom.config b/nfcore_custom.config index 429e3c1..9e94f83 100644 --- a/nfcore_custom.config +++ b/nfcore_custom.config @@ -23,6 +23,7 @@ profiles { crick { includeConfig "${params.custom_config_base}/conf/crick.config" } czbiohub_aws { includeConfig "${params.custom_config_base}/conf/czbiohub_aws.config" } ebc { includeConfig "${params.custom_config_base}/conf/ebc.config" } + eva { includeConfig "${params.custom_config_base}/conf/eva.config" } icr_davros { includeConfig "${params.custom_config_base}/conf/icr_davros.config" } imperial { includeConfig "${params.custom_config_base}/conf/imperial.config" } imperial_mb { includeConfig "${params.custom_config_base}/conf/imperial_mb.config" } From a78aac327dde8ca0cdb84a011ccfc96c3e3a509e Mon Sep 17 00:00:00 2001 From: James Fellows Yates Date: Sun, 14 Feb 2021 17:58:50 +0100 Subject: [PATCH 02/86] Linting fixes --- docs/eva.md | 3 +-- docs/pipeline/eager/eva.md | 6 +++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/docs/eva.md b/docs/eva.md index d69ef03..42575b2 100644 --- a/docs/eva.md +++ b/docs/eva.md @@ -2,7 +2,7 @@ All nf-core pipelines have been successfully configured for use on the Department of Genetics and Archaeogenetic's clusters at the [Max Planck Institute for Evolutionary Anthropology (MPI-EVA)](http://eva.mpg.de). -To use, run the pipeline with `-profile eva`. You can further with optimise submissions by specifying which cluster queue you are using e,g, `-profile eva,archgen`. This will download and launch the [`eva.config`](../conf/eva.config) which has been pre-configured with a setup suitable for the `all.q` queue. The number of parallel jobs that run is currently limited to 8. +To use, run the pipeline with `-profile eva`. You can further with optimise submissions by specifying which cluster queue you are using e,g, `-profile eva,archgen`. This will download and launch the [`eva.config`](../conf/eva.config) which has been pre-configured with a setup suitable for the `all.q` queue. The number of parallel jobs that run is currently limited to 8. Using this profile, a docker image containing all of the required software will be downloaded, and converted to a `singularity` image before execution of the pipeline. The image will currently be centrally stored here: @@ -26,4 +26,3 @@ Note the following characteristics of this profile: ### debug This simple profile just turns off automatic clean up of intermediate files. This can be useful for debugging. Specify e.g. with `-profile eva,archgen` - diff --git a/docs/pipeline/eager/eva.md b/docs/pipeline/eager/eva.md index 4537182..a8dc563 100644 --- a/docs/pipeline/eager/eva.md +++ b/docs/pipeline/eager/eva.md @@ -26,9 +26,9 @@ Specific configurations for eva has been made for eager. #### Human Pop-Gen -* `human`: optimised for mapping of human aDNA reads (i.e. bwa aln defaults as `-l 16500, -n 0.01`) +- `human`: optimised for mapping of human aDNA reads (i.e. bwa aln defaults as `-l 16500, -n 0.01`) #### Pathogen -* `pathogen_loose`: optimised for mapping of human aDNA reads (i.e. bwa aln defaults as `-l 16 -n 0.01`) -* `pathogen_strict`: optimised for mapping of human aDNA reads (i.e. bwa aln defaults as `-l 32, -n 0.1`) \ No newline at end of file +- `pathogen_loose`: optimised for mapping of human aDNA reads (i.e. bwa aln defaults as `-l 16 -n 0.01`) +- `pathogen_strict`: optimised for mapping of human aDNA reads (i.e. bwa aln defaults as `-l 32, -n 0.1`) From 5bfb9510c7e38ba4e43885abbd80b198a1bdfa83 Mon Sep 17 00:00:00 2001 From: James Fellows Yates Date: Sun, 14 Feb 2021 17:59:55 +0100 Subject: [PATCH 03/86] Add to testing --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 3e5c930..c500dfb 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -16,7 +16,7 @@ jobs: needs: test_all_profiles strategy: matrix: - profile: ['abims', 'awsbatch', 'bi','bigpurple', 'binac', 'cbe', 'ccga_dx', 'ccga_med', 'cfc', 'cfc_dev', 'crick', 'denbi_qbic', 'ebc', 'genotoul', 'genouest', 'gis', 'google', 'hebbe', 'icr_davros', 'imperial', 'imperial_mb', 'kraken', 'mpcdf', 'munin', 'oist', 'pasteur', 'phoenix', 'prince', 'seg_globe', 'shh', 'uct_hpc', 'uppmax', 'utd_ganymede', 'uzh'] + profile: ['abims', 'awsbatch', 'bi','bigpurple', 'binac', 'cbe', 'ccga_dx', 'ccga_med', 'cfc', 'cfc_dev', 'crick', 'denbi_qbic', 'ebc', 'eva', 'genotoul', 'genouest', 'gis', 'google', 'hebbe', 'icr_davros', 'imperial', 'imperial_mb', 'kraken', 'mpcdf', 'munin', 'oist', 'pasteur', 'phoenix', 'prince', 'seg_globe', 'shh', 'uct_hpc', 'uppmax', 'utd_ganymede', 'uzh'] steps: - uses: actions/checkout@v1 - name: Install Nextflow From 4339e5872c211fe2186b8e6b0e012ace45749bb3 Mon Sep 17 00:00:00 2001 From: "James A. Fellows Yates" Date: Sun, 14 Feb 2021 18:05:06 +0100 Subject: [PATCH 04/86] Update eager.config --- pipeline/eager.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pipeline/eager.config b/pipeline/eager.config index 9242ecb..2827496 100644 --- a/pipeline/eager.config +++ b/pipeline/eager.config @@ -11,5 +11,5 @@ profiles { shh { includeConfig "${params.custom_config_base}/conf/pipeline/eager/shh.config" } mpcdf { includeConfig "${params.custom_config_base}/conf/pipeline/eager/mpcdf.config" } - + eva { includeConfig "${params.custom_config_base}/conf/pipeline/eager/eva.config" } } From 0bac3691e3656767aa10134c76ad4536e0b70814 Mon Sep 17 00:00:00 2001 From: "James A. Fellows Yates" Date: Sun, 14 Feb 2021 18:07:40 +0100 Subject: [PATCH 05/86] Create mpcdf.config --- docs/pipeline/eager/mpcdf.config | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 docs/pipeline/eager/mpcdf.config diff --git a/docs/pipeline/eager/mpcdf.config b/docs/pipeline/eager/mpcdf.config new file mode 100644 index 0000000..d170f4c --- /dev/null +++ b/docs/pipeline/eager/mpcdf.config @@ -0,0 +1,11 @@ +# nf-core/configs: mpcdf eager specific configuration + +Extra specific configuration for eager pipeline for the `cobra` cluster of the MPCDF + +## Usage + +To use, run the pipeline with `-profile mpcdf,cobra`. + +This will download and launch the eager specific [`mpcdf.config`](../../../conf/pipeline/eager/mpcdf.config) which has been pre-configured with a setup suitable for the mpcdf cluster. + +Currently this only applies to the `cobra` cluster, where maximum resources are adjusted accordingly. From eb9012919cfa8e2cfb847b6f420a90c902149bbd Mon Sep 17 00:00:00 2001 From: FriederikeHanssen Date: Wed, 10 Mar 2021 11:16:18 +0100 Subject: [PATCH 06/86] Set values for processes with max_mem/max_cpus --- conf/pipeline/sarek/cfc.config | 24 ++++++++++++++++++++++++ pipeline/sarek.config | 3 +++ 2 files changed, 27 insertions(+) create mode 100644 conf/pipeline/sarek/cfc.config diff --git a/conf/pipeline/sarek/cfc.config b/conf/pipeline/sarek/cfc.config new file mode 100644 index 0000000..6686c3c --- /dev/null +++ b/conf/pipeline/sarek/cfc.config @@ -0,0 +1,24 @@ +// Profile config names for nf-core/configs + +params { + // Specific nf-core/configs params + config_profile_contact = 'Friederike Hanssen (@FriederikeHanssen' + config_profile_description = 'nf-core/sarek CFC profile provided by nf-core/configs' +} + +// Specific nf-core/sarek process configuration +process { + withName:'StrelkaSingle|Strelka|StrelkaBP|MantaSingle|Manta' { + memory = {check_resource(128.GB)} + cpus = 16 + } + withName:'MSIsensor_scan|MSIsensor_msi' { + memory = {check_resource(128.GB)} + } + withName:BamQC { + memory = {check_resource(372.GB)} + } + withName:MapReads{ + cpus = 48 + } +} \ No newline at end of file diff --git a/pipeline/sarek.config b/pipeline/sarek.config index 4ef48da..dc03e30 100644 --- a/pipeline/sarek.config +++ b/pipeline/sarek.config @@ -12,4 +12,7 @@ profiles { munin { includeConfig "${params.custom_config_base}/conf/pipeline/sarek/munin.config" } uppmax { includeConfig "${params.custom_config_base}/conf/pipeline/sarek/uppmax.config" } icr_davros { includeConfig "${params.custom_config_base}/conf/pipeline/sarek/icr_davros.config" } + cfc { includeConfig "${params.custom_config_base}/conf/pipeline/sarek/cfc.config" } + cfc_dev { includeConfig "${params.custom_config_base}/conf/pipeline/sarek/cfc.config" } + } \ No newline at end of file From 162c212dd4de482aac374a7e6feba4fb8754086d Mon Sep 17 00:00:00 2001 From: FriederikeHanssen Date: Wed, 10 Mar 2021 11:17:23 +0100 Subject: [PATCH 07/86] Remove extra line --- pipeline/sarek.config | 1 - 1 file changed, 1 deletion(-) diff --git a/pipeline/sarek.config b/pipeline/sarek.config index dc03e30..4ba1f43 100644 --- a/pipeline/sarek.config +++ b/pipeline/sarek.config @@ -14,5 +14,4 @@ profiles { icr_davros { includeConfig "${params.custom_config_base}/conf/pipeline/sarek/icr_davros.config" } cfc { includeConfig "${params.custom_config_base}/conf/pipeline/sarek/cfc.config" } cfc_dev { includeConfig "${params.custom_config_base}/conf/pipeline/sarek/cfc.config" } - } \ No newline at end of file From 0057132e02809385a57f83b9535f8bb81ea3c9e4 Mon Sep 17 00:00:00 2001 From: FriederikeHanssen Date: Thu, 11 Mar 2021 09:27:08 +0100 Subject: [PATCH 08/86] remove check_reource statement --- conf/pipeline/sarek/cfc.config | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/conf/pipeline/sarek/cfc.config b/conf/pipeline/sarek/cfc.config index 6686c3c..78a8f0b 100644 --- a/conf/pipeline/sarek/cfc.config +++ b/conf/pipeline/sarek/cfc.config @@ -9,14 +9,14 @@ params { // Specific nf-core/sarek process configuration process { withName:'StrelkaSingle|Strelka|StrelkaBP|MantaSingle|Manta' { - memory = {check_resource(128.GB)} + memory = 128.GB cpus = 16 } withName:'MSIsensor_scan|MSIsensor_msi' { - memory = {check_resource(128.GB)} + memory = 128.GB } withName:BamQC { - memory = {check_resource(372.GB)} + memory = 372.GB } withName:MapReads{ cpus = 48 From 79ddbe1feafa5f31942cd0fa6d80a242920c84db Mon Sep 17 00:00:00 2001 From: FriederikeHanssen Date: Thu, 11 Mar 2021 09:29:03 +0100 Subject: [PATCH 09/86] Add missing bracket --- conf/pipeline/sarek/cfc.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/pipeline/sarek/cfc.config b/conf/pipeline/sarek/cfc.config index 78a8f0b..617b6af 100644 --- a/conf/pipeline/sarek/cfc.config +++ b/conf/pipeline/sarek/cfc.config @@ -2,7 +2,7 @@ params { // Specific nf-core/configs params - config_profile_contact = 'Friederike Hanssen (@FriederikeHanssen' + config_profile_contact = 'Friederike Hanssen (@FriederikeHanssen)' config_profile_description = 'nf-core/sarek CFC profile provided by nf-core/configs' } From bb124a9be8e81fb3aa659cbe98ce65f94103a40b Mon Sep 17 00:00:00 2001 From: Rike Date: Thu, 11 Mar 2021 16:11:41 +0100 Subject: [PATCH 10/86] Reduce vc to run on compute --- conf/pipeline/sarek/cfc.config | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/conf/pipeline/sarek/cfc.config b/conf/pipeline/sarek/cfc.config index 617b6af..be96c4a 100644 --- a/conf/pipeline/sarek/cfc.config +++ b/conf/pipeline/sarek/cfc.config @@ -9,16 +9,18 @@ params { // Specific nf-core/sarek process configuration process { withName:'StrelkaSingle|Strelka|StrelkaBP|MantaSingle|Manta' { - memory = 128.GB - cpus = 16 + memory = 55.GB + cpus = 19 } withName:'MSIsensor_scan|MSIsensor_msi' { - memory = 128.GB + memory = 55.GB } withName:BamQC { memory = 372.GB } withName:MapReads{ cpus = 48 + memory = 128.GB + } } \ No newline at end of file From b70097e495cd6331efe12cd2d0f7b8300ddb829c Mon Sep 17 00:00:00 2001 From: Rike Date: Wed, 17 Mar 2021 15:46:18 +0100 Subject: [PATCH 11/86] remove new line --- conf/pipeline/sarek/cfc.config | 1 - 1 file changed, 1 deletion(-) diff --git a/conf/pipeline/sarek/cfc.config b/conf/pipeline/sarek/cfc.config index be96c4a..9d34c59 100644 --- a/conf/pipeline/sarek/cfc.config +++ b/conf/pipeline/sarek/cfc.config @@ -21,6 +21,5 @@ process { withName:MapReads{ cpus = 48 memory = 128.GB - } } \ No newline at end of file From 67c93a4743f2020ddc9ecfded566dddd74d6dd39 Mon Sep 17 00:00:00 2001 From: FriederikeHanssen Date: Thu, 18 Mar 2021 11:06:38 +0100 Subject: [PATCH 12/86] Update conf/pipeline/sarek/cfc.config Co-authored-by: Gisela Gabernet --- conf/pipeline/sarek/cfc.config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/pipeline/sarek/cfc.config b/conf/pipeline/sarek/cfc.config index 9d34c59..400b86f 100644 --- a/conf/pipeline/sarek/cfc.config +++ b/conf/pipeline/sarek/cfc.config @@ -19,7 +19,7 @@ process { memory = 372.GB } withName:MapReads{ - cpus = 48 + cpus = 20 memory = 128.GB } -} \ No newline at end of file +} From b1846af9d39f1bb8e0b677b1297b8f9d4e3f5155 Mon Sep 17 00:00:00 2001 From: Rike Date: Thu, 18 Mar 2021 11:10:00 +0100 Subject: [PATCH 13/86] reduce mapping resource further to compute node --- conf/pipeline/sarek/cfc.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/pipeline/sarek/cfc.config b/conf/pipeline/sarek/cfc.config index 400b86f..12b85ca 100644 --- a/conf/pipeline/sarek/cfc.config +++ b/conf/pipeline/sarek/cfc.config @@ -20,6 +20,6 @@ process { } withName:MapReads{ cpus = 20 - memory = 128.GB + memory = 59.GB } } From 6221b67bcf20e90c5ddc968dc4712933acb3332b Mon Sep 17 00:00:00 2001 From: Rike Date: Thu, 18 Mar 2021 11:11:02 +0100 Subject: [PATCH 14/86] Give Strelka a complete compute node --- conf/pipeline/sarek/cfc.config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/pipeline/sarek/cfc.config b/conf/pipeline/sarek/cfc.config index 12b85ca..88f675b 100644 --- a/conf/pipeline/sarek/cfc.config +++ b/conf/pipeline/sarek/cfc.config @@ -9,8 +9,8 @@ params { // Specific nf-core/sarek process configuration process { withName:'StrelkaSingle|Strelka|StrelkaBP|MantaSingle|Manta' { - memory = 55.GB - cpus = 19 + memory = 59.GB + cpus = 20 } withName:'MSIsensor_scan|MSIsensor_msi' { memory = 55.GB From e2c583d5581ce40d18505d3af4155a85869fe40c Mon Sep 17 00:00:00 2001 From: Santiago Lacalle <33420220+slacalle@users.noreply.github.com> Date: Thu, 25 Mar 2021 12:38:15 +0000 Subject: [PATCH 15/86] Remove "/rdsgpfs" "/rdsgpfs" symlink will not be present on all nodes. Without that mount the container creation will fail. --- conf/imperial.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/imperial.config b/conf/imperial.config index f40d92b..eeb98ae 100644 --- a/conf/imperial.config +++ b/conf/imperial.config @@ -27,7 +27,7 @@ executor { singularity { enabled = true autoMounts = true - runOptions = "-B /rds/,/rdsgpfs/,/rds/general/user/$USER/ephemeral/tmp/:/tmp,/rds/general/user/$USER/ephemeral/tmp/:/var/tmp" + runOptions = "-B /rds/,/rds/general/user/$USER/ephemeral/tmp/:/tmp,/rds/general/user/$USER/ephemeral/tmp/:/var/tmp" } process { From eccc9ea8d5d91e29ac0b981b0dfe6c7c604bb555 Mon Sep 17 00:00:00 2001 From: Phil Ewels Date: Fri, 26 Mar 2021 15:20:32 +0100 Subject: [PATCH 16/86] Define params.project and params.clusterOptions in uppmax config --- conf/uppmax.config | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/conf/uppmax.config b/conf/uppmax.config index bc3d8c4..ff03ef1 100644 --- a/conf/uppmax.config +++ b/conf/uppmax.config @@ -1,8 +1,10 @@ -//Profile config names for nf-core/configs +// Profile config names for nf-core/configs params { config_profile_description = 'Swedish UPPMAX cluster profile provided by nf-core/configs.' config_profile_contact = 'Phil Ewels (@ewels)' config_profile_url = 'https://www.uppmax.uu.se/' + project = null + clusterOptions = null } singularity { From d34bc40841880062923d3a2e0595648640a1da49 Mon Sep 17 00:00:00 2001 From: Phil Ewels Date: Fri, 26 Mar 2021 15:22:57 +0100 Subject: [PATCH 17/86] UPPMAX: add to schema_ignore_params --- conf/uppmax.config | 1 + 1 file changed, 1 insertion(+) diff --git a/conf/uppmax.config b/conf/uppmax.config index ff03ef1..3b518d4 100644 --- a/conf/uppmax.config +++ b/conf/uppmax.config @@ -5,6 +5,7 @@ params { config_profile_url = 'https://www.uppmax.uu.se/' project = null clusterOptions = null + schema_ignore_params = "genomes,input_paths,cluster-options,clusterOptions,project" } singularity { From 8fc60e2e70bee84a28a72d0c82eb1fead3f1aff3 Mon Sep 17 00:00:00 2001 From: phue Date: Mon, 29 Mar 2021 19:25:58 +0200 Subject: [PATCH 18/86] add config for biohpc_gen --- .github/workflows/main.yml | 2 +- README.md | 1 + conf/biohpc_gen.config | 24 ++++++++++++++++++++++++ docs/biohpc_gen.md | 16 ++++++++++++++++ nfcore_custom.config | 3 ++- 5 files changed, 44 insertions(+), 2 deletions(-) create mode 100755 conf/biohpc_gen.config create mode 100644 docs/biohpc_gen.md diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 50dc704..38adb48 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -16,7 +16,7 @@ jobs: needs: test_all_profiles strategy: matrix: - profile: ['abims', 'awsbatch', 'bi','bigpurple', 'binac', 'cbe', 'ccga_dx', 'ccga_med', 'cfc', 'cfc_dev', 'crick', 'denbi_qbic', 'ebc', 'eddie', 'genotoul', 'genouest', 'gis', 'google', 'hebbe', 'icr_davros', 'ifb_core', 'imperial', 'imperial_mb', 'jax', 'kraken', 'mpcdf', 'munin', 'oist', 'pasteur', 'phoenix', 'prince', 'seg_globe', 'shh', 'uct_hpc', 'uppmax', 'utd_ganymede', 'uzh'] + profile: ['abims', 'awsbatch', 'bi','bigpurple', 'binac', 'biohpc_gen', 'cbe', 'ccga_dx', 'ccga_med', 'cfc', 'cfc_dev', 'crick', 'denbi_qbic', 'ebc', 'eddie', 'genotoul', 'genouest', 'gis', 'google', 'hebbe', 'icr_davros', 'ifb_core', 'imperial', 'imperial_mb', 'jax', 'kraken', 'mpcdf', 'munin', 'oist', 'pasteur', 'phoenix', 'prince', 'seg_globe', 'shh', 'uct_hpc', 'uppmax', 'utd_ganymede', 'uzh'] steps: - uses: actions/checkout@v1 - name: Install Nextflow diff --git a/README.md b/README.md index 5616780..4217d62 100644 --- a/README.md +++ b/README.md @@ -99,6 +99,7 @@ Currently documentation is available for the following systems: * [BIGPURPLE](docs/bigpurple.md) * [BI](docs/bi.md) * [BINAC](docs/binac.md) +* [BIOHPC_GEN](docs/biohpc_gen.md) * [CBE](docs/cbe.md) * [CCGA_DX](docs/ccga_dx.md) * [CCGA_MED](docs/ccga_med.md) diff --git a/conf/biohpc_gen.config b/conf/biohpc_gen.config new file mode 100755 index 0000000..cdd2c03 --- /dev/null +++ b/conf/biohpc_gen.config @@ -0,0 +1,24 @@ +//Profile config names for nf-core/configs +params { + config_profile_description = 'BioHPC Genomics (biohpc_gen) cluster profile provided by nf-core/configs' + config_profile_contact = 'Patrick Hüther (@phue)' + config_profile_url = 'https://collab.lmu.de/display/BioHPCGenomics/BioHPC+Genomics' +} + +process { + executor = 'slurm' + queue = { task.memory <= 1536.GB ? (task.time > 2.d || task.memory > 384.GB ? 'biohpc_gen_production' : 'biohpc_gen_normal') : 'biohpc_gen_highmem' } + beforeScript = 'module use /dss/dssfs01/pr53da/pr53da-dss-0000/spack/modules/x86_avx2/linux*' + module = 'charliecloud/0.22:miniconda3' + clusterOptions = '-M biohpc_gen' +} + +charliecloud { + enabled = true +} + +params { + params.max_time = 14.d + params.max_cpus = 80 + params.max_memory = 3.TB +} \ No newline at end of file diff --git a/docs/biohpc_gen.md b/docs/biohpc_gen.md new file mode 100644 index 0000000..66647ac --- /dev/null +++ b/docs/biohpc_gen.md @@ -0,0 +1,16 @@ +# nf-core/configs: BioHPC Genomics (BIOHPC_GEN) Configuration + +All nf-core pipelines have been successfully configured for use on the BioHPC Genomics (biohpc_gen) cluster that is housed at the Leibniz Rechenzentrum (LRZ) for research groups at the Faculty of Biology of the Ludwig-Maximilians-University (LMU) in Munich. + +To use, run the pipeline with `-profile biohpc_gen`. This will download and launch the [`biohpc_gen.config`](../conf/biohpc_gen.config) which has been pre-configured with a setup suitable for the biohpc_gen cluster. Using this profile, a docker image containing all of the required software will be downloaded, and converted to a Charliecloud container before execution of the pipeline. + +Before running the pipeline you will need to load Nextflow and Charliecloud using the environment module system on biohpc_gen. You can do this by issuing the commands below: + +```bash +## Load Nextflow and Charliecloud environment modules +module purge +module load nextflow charliecloud/0.22 +``` + +>NB: You will need an account to use the LRZ Linux cluster as well as group access to the biohpc_gen cluster in order to run nf-core pipelines. +>NB: Nextflow will need to submit the jobs via the job scheduler to the HPC cluster and as such the commands above will have to be executed on one of the login nodes. diff --git a/nfcore_custom.config b/nfcore_custom.config index eb287b9..807b6f7 100644 --- a/nfcore_custom.config +++ b/nfcore_custom.config @@ -15,6 +15,7 @@ profiles { bi { includeConfig "${params.custom_config_base}/conf/bi.config" } bigpurple { includeConfig "${params.custom_config_base}/conf/bigpurple.config" } binac { includeConfig "${params.custom_config_base}/conf/binac.config" } + biohpc_gen { includeConfig "${params.custom_config_base}/conf/biohpc_gen.config" } cbe { includeConfig "${params.custom_config_base}/conf/cbe.config" } ccga_dx { includeConfig "${params.custom_config_base}/conf/ccga_dx.config" } ccga_med { includeConfig "${params.custom_config_base}/conf/ccga_med.config" } @@ -23,7 +24,7 @@ profiles { crick { includeConfig "${params.custom_config_base}/conf/crick.config" } czbiohub_aws { includeConfig "${params.custom_config_base}/conf/czbiohub_aws.config" } ebc { includeConfig "${params.custom_config_base}/conf/ebc.config" } - eddie { includeConfig "${params.custom_config_base}/conf/eddie.config" } + eddie { includeConfig "${params.custom_config_base}/conf/eddie.config" } icr_davros { includeConfig "${params.custom_config_base}/conf/icr_davros.config" } ifb_core { includeConfig "${params.custom_config_base}/conf/ifb_core.config" } imperial { includeConfig "${params.custom_config_base}/conf/imperial.config" } From 7c5a0871a3582f8fefe3ab6c76ec4c8a2479b5fe Mon Sep 17 00:00:00 2001 From: phue Date: Mon, 29 Mar 2021 19:36:49 +0200 Subject: [PATCH 19/86] add note about required nextflow version --- docs/biohpc_gen.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/biohpc_gen.md b/docs/biohpc_gen.md index 66647ac..1078835 100644 --- a/docs/biohpc_gen.md +++ b/docs/biohpc_gen.md @@ -12,5 +12,6 @@ module purge module load nextflow charliecloud/0.22 ``` +>NB: Charliecloud support requires Nextflow version `21.03.0-edge` or later. >NB: You will need an account to use the LRZ Linux cluster as well as group access to the biohpc_gen cluster in order to run nf-core pipelines. >NB: Nextflow will need to submit the jobs via the job scheduler to the HPC cluster and as such the commands above will have to be executed on one of the login nodes. From 60ae267e4397cc9664154ad5cd5df19692a9b615 Mon Sep 17 00:00:00 2001 From: phue Date: Tue, 6 Apr 2021 11:35:01 +0200 Subject: [PATCH 20/86] use SLURM_CLUSTERS env var this seems to be more reliable for queue checking than using the clusterOptions directive. See https://github.com/nextflow-io/nextflow/issues/807 --- conf/biohpc_gen.config | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/conf/biohpc_gen.config b/conf/biohpc_gen.config index cdd2c03..b625b20 100755 --- a/conf/biohpc_gen.config +++ b/conf/biohpc_gen.config @@ -5,12 +5,15 @@ params { config_profile_url = 'https://collab.lmu.de/display/BioHPCGenomics/BioHPC+Genomics' } +env { + SLURM_CLUSTERS='biohpc_gen' +} + process { executor = 'slurm' queue = { task.memory <= 1536.GB ? (task.time > 2.d || task.memory > 384.GB ? 'biohpc_gen_production' : 'biohpc_gen_normal') : 'biohpc_gen_highmem' } beforeScript = 'module use /dss/dssfs01/pr53da/pr53da-dss-0000/spack/modules/x86_avx2/linux*' module = 'charliecloud/0.22:miniconda3' - clusterOptions = '-M biohpc_gen' } charliecloud { @@ -21,4 +24,4 @@ params { params.max_time = 14.d params.max_cpus = 80 params.max_memory = 3.TB -} \ No newline at end of file +} From d69af0f287700e82680a958295d41c3aa231b086 Mon Sep 17 00:00:00 2001 From: James Fellows Yates Date: Tue, 6 Apr 2021 16:42:22 +0200 Subject: [PATCH 21/86] Merging --- conf/pipeline/eager/eva.config | 14 +++++++------- conf/pipeline/eager/shh.config | 6 ++++++ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/conf/pipeline/eager/eva.config b/conf/pipeline/eager/eva.config index 8850cf1..46fddae 100644 --- a/conf/pipeline/eager/eva.config +++ b/conf/pipeline/eager/eva.config @@ -63,19 +63,19 @@ process { } withName: fastqc { - clusterOptions = { "-S /bin/bash -l h_vmem=${task.memory.toMega().plus(1000).toString().replaceAll(/[\sB]/,'')}M,virtual_free=${task.memory.toMega().plus(1000).toString().replaceAll(/[\sB]/,'')}M" } + clusterOptions = { "-S /bin/bash -l h_vmem=${task.memory.toMega().plus(4000).toString().replaceAll(/[\sB]/,'')}M,virtual_free=${task.memory.toMega().plus(4000).toString().replaceAll(/[\sB]/,'')}M" } } withName: adapter_removal { - clusterOptions = { "-S /bin/bash -l h_vmem=${task.memory.toMega().plus(1000).toString().replaceAll(/[\sB]/,'')}M,virtual_free=${task.memory.toMega().plus(1000).toString().replaceAll(/[\sB]/,'')}M" } + clusterOptions = { "-S /bin/bash -l h_vmem=${task.memory.toMega().plus(12000).toString().replaceAll(/[\sB]/,'')}M,virtual_free=${task.memory.toMega().plus(12000).toString().replaceAll(/[\sB]/,'')}M" } } withName: dedup { - clusterOptions = { "-S /bin/bash -l h_vmem=${task.memory.toMega().plus(1000).toString().replaceAll(/[\sB]/,'')}M,virtual_free=${task.memory.toMega().plus(1000).toString().replaceAll(/[\sB]/,'')}M" } + clusterOptions = { "-S /bin/bash -l h_vmem=${task.memory.toMega().plus(4000).toString().replaceAll(/[\sB]/,'')}M,virtual_free=${task.memory.toMega().plus(4000).toString().replaceAll(/[\sB]/,'')}M" } } withName: markduplicates { - clusterOptions = { "-S /bin/bash -l h_vmem=${task.memory.toMega().plus(5000).toString().replaceAll(/[\sB]/,'')}M,virtual_free=${task.memory.toMega().plus(1000).toString().replaceAll(/[\sB]/,'')}M" } + clusterOptions = { "-S /bin/bash -l h_vmem=${task.memory.toMega().plus(8000).toString().replaceAll(/[\sB]/,'')}M,virtual_free=${task.memory.toMega().plus(8000).toString().replaceAll(/[\sB]/,'')}M" } } withName: malt { @@ -99,11 +99,11 @@ process { } withName: qualimap { - clusterOptions = { "-S /bin/bash -l h_vmem=${task.memory.toMega().plus(5000).toString().replaceAll(/[\sB]/,'')}M,virtual_free=${task.memory.toMega().plus(1000).toString().replaceAll(/[\sB]/,'')}M" } + clusterOptions = { "-S /bin/bash -l h_vmem=${task.memory.toMega().plus(5000).toString().replaceAll(/[\sB]/,'')}M,virtual_free=${task.memory.toMega().plus(5000).toString().replaceAll(/[\sB]/,'')}M" } } withName: damageprofiler { - clusterOptions = { "-S /bin/bash -l h_vmem=${task.memory.toMega().plus(5000).toString().replaceAll(/[\sB]/,'')}M,virtual_free=${task.memory.toMega().plus(1000).toString().replaceAll(/[\sB]/,'')}M" } + clusterOptions = { "-S /bin/bash -l h_vmem=${task.memory.toMega().plus(5000).toString().replaceAll(/[\sB]/,'')}M,virtual_free=${task.memory.toMega().plus(5000).toString().replaceAll(/[\sB]/,'')}M" } } withName: circularmapper { @@ -115,7 +115,7 @@ process { } withName: preseq { - clusterOptions = { "-S /bin/bash -l h_vmem=${task.memory.toMega().plus(4000).toString().replaceAll(/[\sB]/,'')}M,virtual_free=${task.memory.toMega().plus(1000).toString().replaceAll(/[\sB]/,'')}M" } + clusterOptions = { "-S /bin/bash -l h_vmem=${task.memory.toMega().plus(4000).toString().replaceAll(/[\sB]/,'')}M,virtual_free=${task.memory.toMega().plus(4000).toString().replaceAll(/[\sB]/,'')}M" } } } diff --git a/conf/pipeline/eager/shh.config b/conf/pipeline/eager/shh.config index 44d1c3c..5046df0 100644 --- a/conf/pipeline/eager/shh.config +++ b/conf/pipeline/eager/shh.config @@ -20,6 +20,12 @@ process { queue = { task.memory > 756.GB ? 'supercruncher' : 'long' } } + withName: circulargenerator { + cpus = { check_max( 1, 'cpus' ) } + memory = { check_max( 4.GB * task.attempt, 'memory' ) } + time = { check_max( 4.h * task.attempt, 'time' ) } + } + withLabel:'sc_tiny'{ cpus = { check_max( 1, 'cpus' ) } memory = { check_max( 1.GB * task.attempt, 'memory' ) } From be1d35840d65ac0dfeccc13c511d99d2236f0f20 Mon Sep 17 00:00:00 2001 From: James Fellows Yates Date: Tue, 6 Apr 2021 17:48:16 +0200 Subject: [PATCH 22/86] Add EVA and EAGER@EVA --- .github/workflows/main.yml | 2 +- conf/eva.config | 2 +- conf/pipeline/eager/eva.config | 37 ++++++++++++++++++---------------- docs/eva.md | 2 +- docs/pipeline/eager/eva.md | 2 +- 5 files changed, 24 insertions(+), 21 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index c500dfb..96776a6 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -16,7 +16,7 @@ jobs: needs: test_all_profiles strategy: matrix: - profile: ['abims', 'awsbatch', 'bi','bigpurple', 'binac', 'cbe', 'ccga_dx', 'ccga_med', 'cfc', 'cfc_dev', 'crick', 'denbi_qbic', 'ebc', 'eva', 'genotoul', 'genouest', 'gis', 'google', 'hebbe', 'icr_davros', 'imperial', 'imperial_mb', 'kraken', 'mpcdf', 'munin', 'oist', 'pasteur', 'phoenix', 'prince', 'seg_globe', 'shh', 'uct_hpc', 'uppmax', 'utd_ganymede', 'uzh'] + profile: ['abims', 'awsbatch', 'bi','bigpurple', 'binac', 'cbe', 'ccga_dx', 'ccga_med', 'cfc', 'cfc_dev', 'crick', 'denbi_qbic', 'ebc', 'eddie', 'eva', 'genotoul', 'genouest', 'gis', 'google', 'hebbe', 'icr_davros', 'ifb_core', 'imperial', 'imperial_mb', 'jax', 'kraken', 'mpcdf', 'munin', 'oist', 'pasteur', 'phoenix', 'prince', 'seg_globe', 'shh', 'uct_hpc', 'uppmax', 'utd_ganymede', 'uzh'] steps: - uses: actions/checkout@v1 - name: Install Nextflow diff --git a/conf/eva.config b/conf/eva.config index 497085d..c0a1d4f 100644 --- a/conf/eva.config +++ b/conf/eva.config @@ -49,4 +49,4 @@ profiles { debug { cleanup = false } -} +} \ No newline at end of file diff --git a/conf/pipeline/eager/eva.config b/conf/pipeline/eager/eva.config index 46fddae..2e07d57 100644 --- a/conf/pipeline/eager/eva.config +++ b/conf/pipeline/eager/eva.config @@ -9,10 +9,12 @@ params { // Specific nf-core/eager process configuration process { + beforeScript = 'export _JAVA_OPTIONS="-XX:ParallelGCThreads=1 -XX:+PrintCommandLineFlags"' + maxRetries = 2 // Solution for clusterOptions comes from here: https://github.com/nextflow-io/nextflow/issues/332 + personal toMega conversion - clusterOptions = { "-S /bin/bash -j y -o output.log -l h_vmem=${task.memory.toMega().toString().replaceAll(/[\sB]/,'')}M,virtual_free=${task.memory.toMega().toString().replaceAll(/[\sB]/,'')}M" } + clusterOptions = { "-S /bin/bash -j y -o output.log -l h_vmem=${task.memory.toGiga()}G,virtual_free=${task.memory.toGiga()}G" } withLabel:'sc_tiny'{ cpus = { check_max( 1, 'cpus' ) } @@ -59,63 +61,64 @@ process { // Fixes for SGE and Java incompatibility due to Java using more memory than you tell it to use withName: makeSeqDict { - clusterOptions = { "-S /bin/bash -l h_vmem=${task.memory.toMega().plus(4000).toString().replaceAll(/[\sB]/,'')}M,virtual_free=${task.memory.toMega().plus(4000).toString().replaceAll(/[\sB]/,'')}M" } + clusterOptions = { "-S /bin/bash -v JAVA_OPTS='-XX:ParallelGCThreads=1' -l h_vmem=${(task.memory.toGiga() + 3)}G,virtual_free=${(task.memory.toGiga() + 3)}G" } } withName: fastqc { - clusterOptions = { "-S /bin/bash -l h_vmem=${task.memory.toMega().plus(4000).toString().replaceAll(/[\sB]/,'')}M,virtual_free=${task.memory.toMega().plus(4000).toString().replaceAll(/[\sB]/,'')}M" } + clusterOptions = { "-S /bin/bash -l h_vmem=${(task.memory.toGiga() * 2)}G,virtual_free=${(task.memory.toGiga() * 2)}G" } } withName: adapter_removal { - clusterOptions = { "-S /bin/bash -l h_vmem=${task.memory.toMega().plus(12000).toString().replaceAll(/[\sB]/,'')}M,virtual_free=${task.memory.toMega().plus(12000).toString().replaceAll(/[\sB]/,'')}M" } + clusterOptions = { "-S /bin/bash -l h_vmem=${(task.memory.toGiga() * 2)}G,virtual_free=${(task.memory.toGiga() * 2)}G" } } withName: dedup { - clusterOptions = { "-S /bin/bash -l h_vmem=${task.memory.toMega().plus(4000).toString().replaceAll(/[\sB]/,'')}M,virtual_free=${task.memory.toMega().plus(4000).toString().replaceAll(/[\sB]/,'')}M" } + clusterOptions = { "-S /bin/bash -l h_vmem=${(task.memory.toGiga() * 2)}G,virtual_free=${(task.memory.toGiga() * 2)}G" } } withName: markduplicates { - clusterOptions = { "-S /bin/bash -l h_vmem=${task.memory.toMega().plus(8000).toString().replaceAll(/[\sB]/,'')}M,virtual_free=${task.memory.toMega().plus(8000).toString().replaceAll(/[\sB]/,'')}M" } + clusterOptions = { "-S /bin/bash -l h_vmem=${(task.memory.toGiga() + 6)}G,virtual_free=${(task.memory.toGiga() + 6)}G" } } withName: malt { - clusterOptions = { "-S /bin/bash -l h_vmem=${task.memory.toMega().plus(1000).toString().replaceAll(/[\sB]/,'')}M,virtual_free=${task.memory.toMega().plus(1000).toString().replaceAll(/[\sB]/,'')}M" } + clusterOptions = { "-S /bin/bash -l h_vmem=${(task.memory.toGiga() * 2)}G,virtual_free=${(task.memory.toGiga() * 2)}G" } } withName: maltextract { - clusterOptions = { "-S /bin/bash -l h_vmem=${task.memory.toMega().plus(1000).toString().replaceAll(/[\sB]/,'')}M,virtual_free=${task.memory.toMega().plus(1000).toString().replaceAll(/[\sB]/,'')}M" } + clusterOptions = { "-S /bin/bash -l h_vmem=${(task.memory.toGiga() * 2)}G,virtual_free=${(task.memory.toGiga() * 2)}G" } } withName: multivcfanalyzer { - clusterOptions = { "-S /bin/bash -l h_vmem=${task.memory.toMega().plus(1000).toString().replaceAll(/[\sB]/,'')}M,virtual_free=${task.memory.toMega().plus(1000).toString().replaceAll(/[\sB]/,'')}M" } + clusterOptions = { "-S /bin/bash -l h_vmem=${(task.memory.toGiga() * 2)}G,virtual_free=${(task.memory.toGiga() * 2)}G" } } withName: mtnucratio { - clusterOptions = { "-S /bin/bash -l h_vmem=${task.memory.toMega().plus(1000).toString().replaceAll(/[\sB]/,'')}M,virtual_free=${task.memory.toMega().plus(1000).toString().replaceAll(/[\sB]/,'')}M" } + clusterOptions = { "-S /bin/bash -l h_vmem=${(task.memory.toGiga() * 2)}G,virtual_free=${(task.memory.toGiga() * 2)}G" } } withName: vcf2genome { - clusterOptions = { "-S /bin/bash -l h_vmem=${task.memory.toMega().plus(1000).toString().replaceAll(/[\sB]/,'')}M,virtual_free=${task.memory.toMega().plus(1000).toString().replaceAll(/[\sB]/,'')}M" } + clusterOptions = { "-S /bin/bash -l h_vmem=${(task.memory.toGiga() * 2)}G,virtual_free=${(task.memory.toGiga() * 2)}G" } } withName: qualimap { - clusterOptions = { "-S /bin/bash -l h_vmem=${task.memory.toMega().plus(5000).toString().replaceAll(/[\sB]/,'')}M,virtual_free=${task.memory.toMega().plus(5000).toString().replaceAll(/[\sB]/,'')}M" } + clusterOptions = { "-S /bin/bash -l h_vmem=${(task.memory.toGiga() + 6)}G,virtual_free=${(task.memory.toGiga() + 6)}G" } } withName: damageprofiler { - clusterOptions = { "-S /bin/bash -l h_vmem=${task.memory.toMega().plus(5000).toString().replaceAll(/[\sB]/,'')}M,virtual_free=${task.memory.toMega().plus(5000).toString().replaceAll(/[\sB]/,'')}M" } + clusterOptions = { "-S /bin/bash -l h_vmem=${(task.memory.toGiga() + 6)}G,virtual_free=${(task.memory.toGiga() + 6)}G" } } withName: circularmapper { - clusterOptions = { "-S /bin/bash -l h_vmem=${task.memory.toMega().plus(1000).toString().replaceAll(/[\sB]/,'')}M,virtual_free=${task.memory.toMega().plus(1000).toString().replaceAll(/[\sB]/,'')}M" } + clusterOptions = { "-S /bin/bash -l h_vmem=${(task.memory.toGiga() * 2)}G,virtual_free=${(task.memory.toGiga() * 2)}G" } } withName: circulargenerator { - clusterOptions = { "-S /bin/bash -l h_vmem=${task.memory.toMega().plus(1000).toString().replaceAll(/[\sB]/,'')}M,virtual_free=${task.memory.toMega().plus(1000).toString().replaceAll(/[\sB]/,'')}M" } + clusterOptions = { "-S /bin/bash -l h_vmem=${(task.memory.toGiga() * 2)}G,virtual_free=${(task.memory.toGiga() * 2)}G" } } withName: preseq { - clusterOptions = { "-S /bin/bash -l h_vmem=${task.memory.toMega().plus(4000).toString().replaceAll(/[\sB]/,'')}M,virtual_free=${task.memory.toMega().plus(4000).toString().replaceAll(/[\sB]/,'')}M" } + clusterOptions = { "-S /bin/bash -l h_vmem=${(task.memory.toGiga() * 2)}G,virtual_free=${(task.memory.toGiga() * 2)}G" } + errorStrategy = { task.exitStatus in [143,137,104,134,139] ? 'retry' : 'ignore' } } } @@ -209,4 +212,4 @@ profiles { bwaalnl = 16500 } } -} +} \ No newline at end of file diff --git a/docs/eva.md b/docs/eva.md index 42575b2..9b83222 100644 --- a/docs/eva.md +++ b/docs/eva.md @@ -25,4 +25,4 @@ Note the following characteristics of this profile: ### debug -This simple profile just turns off automatic clean up of intermediate files. This can be useful for debugging. Specify e.g. with `-profile eva,archgen` +This simple profile just turns off automatic clean up of intermediate files. This can be useful for debugging. Specify e.g. with `-profile eva,archgen` \ No newline at end of file diff --git a/docs/pipeline/eager/eva.md b/docs/pipeline/eager/eva.md index a8dc563..71f4a2e 100644 --- a/docs/pipeline/eager/eva.md +++ b/docs/pipeline/eager/eva.md @@ -31,4 +31,4 @@ Specific configurations for eva has been made for eager. #### Pathogen - `pathogen_loose`: optimised for mapping of human aDNA reads (i.e. bwa aln defaults as `-l 16 -n 0.01`) -- `pathogen_strict`: optimised for mapping of human aDNA reads (i.e. bwa aln defaults as `-l 32, -n 0.1`) +- `pathogen_strict`: optimised for mapping of human aDNA reads (i.e. bwa aln defaults as `-l 32, -n 0.1`) \ No newline at end of file From 504c10d6ff5d2965a55f282c81ae66325ae0d380 Mon Sep 17 00:00:00 2001 From: "James A. Fellows Yates" Date: Tue, 6 Apr 2021 17:50:25 +0200 Subject: [PATCH 23/86] Update README.md --- README.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 56c73b6..687a1ae 100644 --- a/README.md +++ b/README.md @@ -6,20 +6,20 @@ A repository for hosting Nextflow configuration files containing custom paramete ## Table of contents -- [Using an existing config](#using-an-existing-config) - - [Configuration and parameters](#configuration-and-parameters) - - [Offline usage](#offline-usage) -- [Adding a new config](#adding-a-new-config) - - [Checking user hostnames](#checking-user-hostnames) - - [Testing](#testing) - - [Documentation](#documentation) - - [Uploading to `nf-core/configs`](#uploading-to-nf-coreconfigs) -- [Adding a new pipeline-specific config](#adding-a-new-pipeline-specific-config) - - [Pipeline-specific institutional documentation](#pipeline-specific-institutional-documentation) - - [Pipeline-specific documentation](#pipeline-specific-documentation) - - [Enabling pipeline-specific configs within a pipeline](#enabling-pipeline-specific-configs-within-a-pipeline) - - [Create the pipeline-specific `nf-core/configs` files](#create-the-pipeline-specific-nf-coreconfigs-files) -- [Help](#help) +* [Using an existing config](#using-an-existing-config) + * [Configuration and parameters](#configuration-and-parameters) + * [Offline usage](#offline-usage) +* [Adding a new config](#adding-a-new-config) + * [Checking user hostnames](#checking-user-hostnames) + * [Testing](#testing) + * [Documentation](#documentation) + * [Uploading to `nf-core/configs`](#uploading-to-nf-coreconfigs) +* [Adding a new pipeline-specific config](#adding-a-new-pipeline-specific-config) + * [Pipeline-specific institutional documentation](#pipeline-specific-institutional-documentation) + * [Pipeline-specific documentation](#pipeline-specific-documentation) + * [Enabling pipeline-specific configs within a pipeline](#enabling-pipeline-specific-configs-within-a-pipeline) + * [Create the pipeline-specific `nf-core/configs` files](#create-the-pipeline-specific-nf-coreconfigs-files) +* [Help](#help) ## Using an existing config From 60c66d93aca43d7ae3473ff182c9a83e087695cc Mon Sep 17 00:00:00 2001 From: James Fellows Yates Date: Tue, 6 Apr 2021 17:53:27 +0200 Subject: [PATCH 24/86] Markdown linting --- docs/eva.md | 2 +- docs/pipeline/eager/eva.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/eva.md b/docs/eva.md index 9b83222..24a964c 100644 --- a/docs/eva.md +++ b/docs/eva.md @@ -25,4 +25,4 @@ Note the following characteristics of this profile: ### debug -This simple profile just turns off automatic clean up of intermediate files. This can be useful for debugging. Specify e.g. with `-profile eva,archgen` \ No newline at end of file +This simple profile just turns off automatic clean up of intermediate files. This can be useful for debugging. Specify e.g. with `-profile eva,archgen`. diff --git a/docs/pipeline/eager/eva.md b/docs/pipeline/eager/eva.md index 71f4a2e..a8dc563 100644 --- a/docs/pipeline/eager/eva.md +++ b/docs/pipeline/eager/eva.md @@ -31,4 +31,4 @@ Specific configurations for eva has been made for eager. #### Pathogen - `pathogen_loose`: optimised for mapping of human aDNA reads (i.e. bwa aln defaults as `-l 16 -n 0.01`) -- `pathogen_strict`: optimised for mapping of human aDNA reads (i.e. bwa aln defaults as `-l 32, -n 0.1`) \ No newline at end of file +- `pathogen_strict`: optimised for mapping of human aDNA reads (i.e. bwa aln defaults as `-l 32, -n 0.1`) From 53b54ba8454f02e55d799214c9bcf87fd8b0d2c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20H=C3=BCther?= Date: Wed, 7 Apr 2021 13:18:06 +0200 Subject: [PATCH 25/86] Remove whitespace Co-authored-by: Alexander Peltzer --- nfcore_custom.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nfcore_custom.config b/nfcore_custom.config index 807b6f7..6b51561 100644 --- a/nfcore_custom.config +++ b/nfcore_custom.config @@ -24,7 +24,7 @@ profiles { crick { includeConfig "${params.custom_config_base}/conf/crick.config" } czbiohub_aws { includeConfig "${params.custom_config_base}/conf/czbiohub_aws.config" } ebc { includeConfig "${params.custom_config_base}/conf/ebc.config" } - eddie { includeConfig "${params.custom_config_base}/conf/eddie.config" } + eddie { includeConfig "${params.custom_config_base}/conf/eddie.config" } icr_davros { includeConfig "${params.custom_config_base}/conf/icr_davros.config" } ifb_core { includeConfig "${params.custom_config_base}/conf/ifb_core.config" } imperial { includeConfig "${params.custom_config_base}/conf/imperial.config" } From ce465cca57113aa4cf568f86a35211b0f2d1e4d0 Mon Sep 17 00:00:00 2001 From: "James A. Fellows Yates" Date: Wed, 7 Apr 2021 19:27:24 +0200 Subject: [PATCH 26/86] Apply suggestions from code review Co-authored-by: Alexander Peltzer --- conf/eva.config | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/conf/eva.config b/conf/eva.config index c0a1d4f..ad71e12 100644 --- a/conf/eva.config +++ b/conf/eva.config @@ -32,7 +32,6 @@ profiles { max_cpus = 32 max_time = 720.h //Illumina iGenomes reference file path - igenomes_base = "/projects1/public_data/igenomes/" } process { @@ -49,4 +48,4 @@ profiles { debug { cleanup = false } -} \ No newline at end of file +} From a0c8a9ec8f103558468df24200759a82afee0da2 Mon Sep 17 00:00:00 2001 From: Asaf Peer Date: Mon, 12 Apr 2021 16:00:34 -0400 Subject: [PATCH 27/86] updated jax resources --- conf/jax.config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/jax.config b/conf/jax.config index 7cf790e..56c0f12 100644 --- a/conf/jax.config +++ b/conf/jax.config @@ -19,7 +19,7 @@ singularity{ cacheDir = params.singularity_cache_dir } params { - max_memory = 768.GB - max_cpus = 70 + max_memory = 320.GB + max_cpus = 32 max_time = 336.h } From 7ac66dcd72cb4693a37f4e889ee5ca067028624b Mon Sep 17 00:00:00 2001 From: Harshil Patel Date: Tue, 13 Apr 2021 17:07:02 +0100 Subject: [PATCH 28/86] Update crick.config --- conf/crick.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/crick.config b/conf/crick.config index 338bb76..f9c3197 100755 --- a/conf/crick.config +++ b/conf/crick.config @@ -17,7 +17,7 @@ process { params { max_memory = 224.GB max_cpus = 32 - max_time = 72.h + max_time = '72.h' igenomes_base = '/camp/svc/reference/Genomics/aws-igenomes' } From 0fc90586e04894e93a877416649ec4248173fadc Mon Sep 17 00:00:00 2001 From: "James A. Fellows Yates" Date: Thu, 15 Apr 2021 22:26:37 +0200 Subject: [PATCH 29/86] Update mpcdf.md --- docs/mpcdf.md | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/docs/mpcdf.md b/docs/mpcdf.md index af16d76..0d48dd2 100644 --- a/docs/mpcdf.md +++ b/docs/mpcdf.md @@ -4,18 +4,17 @@ All nf-core pipelines have been successfully configured for use on the HPCs at [ > :warning: these profiles are not officially supported by the MPCDF. -To run Nextflow, the `jdk` module must be loaded. To use the nf-core profile(s), run the pipeline with `-profile ,mpcdf`. +To run Nextflow, the `jdk` module must be loaded. To use the nf-core profile(s), run the pipeline with `-profile mpcdf,`. + +Currently profiles for the following clusters are supported: `cobra`, `raven` + +All profiles use `singularity` as the corresponding containerEngine. To prevent repeatedly downloading the same singularity image for every pipeline run, for all profiles we recommend specifying a cache location in your `~/.bash_profile` with the `$NXF_SINGULARITY_CACHEDIR` bash variable. -Currently the following clusters are supported: cobra, raven >NB: Nextflow will need to submit the jobs via SLURM to the clusters and as such the commands above will have to be executed on one of the head nodes. Check the [MPCDF documentation](https://www.mpcdf.mpg.de/services/computing). ## cobra -Cobra does not currently support singularity, therefore the anaconda/module is loaded for each process. - -Due to this, we also recommend setting the `$NXF_CONDA_CACHEDIR` to a location of your choice to store all environments (so to prevent nextflow building the environment on every run). - To use: `-profile cobra,mpcdf` Sets the following parameters: @@ -31,10 +30,6 @@ Sets the following parameters: ## raven -Raven does not currently support singularity, therefore `module load anaconda/3/2020.02` is loaded for each process. - -Due to this, we also recommend setting the `$NXF_CONDA_CACHEDIR` to a location of your choice to store all environments (so to prevent nextflow building the environment on every run). - To use: `-profile raven,mpcdf` Sets the following parameters: From b9a00f79268c237a540060e7a43c2c8418c68bb8 Mon Sep 17 00:00:00 2001 From: "James A. Fellows Yates" Date: Thu, 15 Apr 2021 22:27:07 +0200 Subject: [PATCH 30/86] Update mpcdf.config --- conf/mpcdf.config | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/conf/mpcdf.config b/conf/mpcdf.config index 481ebc4..c6c3c9c 100644 --- a/conf/mpcdf.config +++ b/conf/mpcdf.config @@ -1,24 +1,28 @@ params { config_profile_description = 'MPCDF HPC profiles (unoffically) provided by nf-core/configs.' config_profile_contact = 'James Fellows Yates (@jfy133)' - config_profile_url = 'https://www.mpcdf.mpg.de/services/computing' + config_profile_url = 'https://www.mpcdf.mpg.de/services/supercomputing' } profiles { cobra { - // Does not have singularity! Conda module must be used, but it is - // recommended to set NXF_CONDA_CACHEDIR var in ~/.bash{_profile,rc} - // To create common cache dir process { - beforeScript = 'module load anaconda/3/2020.02' + beforeScript = 'module load singularity' executor = 'slurm' } executor { queueSize = 8 } + + // Set $NXF_SINGULARITY_CACHEDIR in your ~/.bash_profile + // to stop downloading the same image for every run + singularity { + enabled = true + autoMounts = true + } params { config_profile_description = 'MPCDF cobra profile (unofficially) provided by nf-core/configs.' @@ -28,18 +32,22 @@ profiles { } } raven { - // Does not have singularity! Conda module must be used, but it is - // recommended to set NXF_CONDA_CACHEDIR var in ~/.bash{_profile,rc} - // to create common cache dir process { - beforeScript = 'module load anaconda/3/2020.02' + beforeScript = 'module load singularity' executor = 'slurm' } executor { queueSize = 8 } + + // Set $NXF_SINGULARITY_CACHEDIR in your ~/.bash_profile + // to stop downloading the same image for every run + singularity { + enabled = true + autoMounts = true + } params { config_profile_description = 'MPCDF raven profile (unofficially) provided by nf-core/configs.' @@ -47,5 +55,8 @@ profiles { max_cpus = 192 max_time = 24.h } + } + debug { + cleanup = false } } From 12a451880306262049b068722af4b52956eddeac Mon Sep 17 00:00:00 2001 From: "James A. Fellows Yates" Date: Thu, 15 Apr 2021 22:29:15 +0200 Subject: [PATCH 31/86] Markdown lint fix --- docs/mpcdf.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/mpcdf.md b/docs/mpcdf.md index 0d48dd2..73ed52f 100644 --- a/docs/mpcdf.md +++ b/docs/mpcdf.md @@ -10,7 +10,6 @@ Currently profiles for the following clusters are supported: `cobra`, `raven` All profiles use `singularity` as the corresponding containerEngine. To prevent repeatedly downloading the same singularity image for every pipeline run, for all profiles we recommend specifying a cache location in your `~/.bash_profile` with the `$NXF_SINGULARITY_CACHEDIR` bash variable. - >NB: Nextflow will need to submit the jobs via SLURM to the clusters and as such the commands above will have to be executed on one of the head nodes. Check the [MPCDF documentation](https://www.mpcdf.mpg.de/services/computing). ## cobra From 10abca712bb9f8c6ba009fbd51b2efb709b68d49 Mon Sep 17 00:00:00 2001 From: MaxUlysse Date: Fri, 16 Apr 2021 17:01:58 +0200 Subject: [PATCH 32/86] fix: first draft of bianca guide --- docs/uppmax.md | 174 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 167 insertions(+), 7 deletions(-) diff --git a/docs/uppmax.md b/docs/uppmax.md index d9ac5ce..c8375a2 100644 --- a/docs/uppmax.md +++ b/docs/uppmax.md @@ -19,7 +19,7 @@ You can do this with the `--project` flag (two hyphens) when launching nextflow. nextflow run nf-core/PIPELINE -profile uppmax --project snic2018-1-234 # ..rest of pipeline flags ``` -> NB: If you're not sure what your UPPMAX project ID is, try running `groups` or checking SUPR. +$ NB: If you're not sure what your UPPMAX project ID is, try running `groups` or checking SUPR. Before running the pipeline you will need to either install Nextflow or load it using the environment module system. @@ -43,7 +43,7 @@ If your nf-core pipeline run is running out of memory, you can run on a fat node ``` This raises the ceiling of available memory from the default of `128.GB` to `256.GB`. -Rackham has nodes with 128GB, 256GB and 1TB memory available. +`Rackham` has nodes with 128GB, 256GB and 1TB memory available. Note that each job will still start with the same request as normal, but restarted attempts with larger requests will be able to request greater amounts of memory. @@ -76,12 +76,172 @@ To use it, submit with `-profile uppmax,devel`. ## Running on Bianca -For security reasons, there is no internet access on Bianca so you can't download from or upload files to the cluster directly. Before running a nf-core pipeline on Bianca you will first have to download the pipeline and singularity images needed elsewhere and transfer them via the wharf area to your Bianca project. +$ :warning: For more information about `bianca`, follow the [UPPMAX `bianca` user guide](http://uppmax.uu.se/support/user-guides/bianca-user-guide/). +$ :warning: For more information, follow the [nf-core guide for running offline](https://nf-co.re/usage/offline) and the [nf-core `tools` guide for downloading pipelines for offline use](https://nf-co.re/tools#downloading-pipelines-for-offline-use). + > :warning: For more information about using `Singularity` with UPPMAX, follow the [UPPMAX `Singularity` guide](https://www.uppmax.uu.se/support-sv/user-guides/singularity-user-guide/). -You can follow the guide for downloading pipelines [for offline use](https://nf-co.re/tools#downloading-pipelines-for-offline-use). Note that you will have to download the singularity images as well. +For security reasons, there is no internet access on `bianca` so you can't download from or upload files to the cluster directly. +Before running a nf-core pipeline on `bianca` you will first have to download the pipeline and singularity images needed elsewhere and transfer them via the wharf area to your own `bianca` project. -Next transfer the pipeline and the singularity images to your project. Before running the pipeline you will have to indicate to nextflow where the singularity images are located by setting `NXF_SINGULARITY_CACHEDIR` : +In this guide, we use `rackham` to download and transfer files to wharf, but it can also be done on your own computer. +If you use `rackham` to download the pipeline and the singularity containers, we recommend using an interactive session (cf [interactive guide](https://www.uppmax.uu.se/support/faq/running-jobs-faq/how-can-i-run-interactively-on-a-compute-node/)), which is what we do in the following guide. -`export NXF_SINGULARITY_CACHEDIR=Your_Location_For_The_Singularity_directory/.` +### Download Nextflow -You should now be able to run your nf-core pipeline on bianca. +You can use the UPPMAX provided `module`, but if necessary, you can also download a more recent version. + +```bash +# Connect to rackham +$ ssh -X @rackham.uppmax.uu.se +# Or stay in your terminal + +# Download the nextflow-all bundle +$ wget https://github.com/nextflow-io/nextflow/releases/download/v/nextflow--all + +# Connect to wharf using sftp +# For FileZilla follow the bianca user guide +$ sftp -@bianca-sftp.uppmax.uu.se:- + +# Transfer nextflow to wharf +sftp> put nextflow--all . + +# Exit sftp +$ exit + +# Connect to bianca +$ ssh -A -@bianca.uppmax.uu.se + +# Go to your project +$ cd /castor/project/proj_nobackup + +# Make folder for Nextflow +$ mkdir tools +$ mkdir tools/nextflow + +# Move Nextflow from wharf to its directory +$ mv /castor/project/proj_nobackup/wharf//-/nextflow--all /castor/project/proj_nobackup/tools/nextflow + +# Establish permission +$ chmod a+x /castor/project/proj_nobackup/tools/nextflow/nextflow--all + +# If you want other people to use it +# Be sure that your group has rights to the directory as well + +$ chown -R . /castor/project/proj_nobackup/tools/nextflow/nextflow--all + +# Make a link to it +$ ln -s /castor/project/proj_nobackup/tools/nextflow/nextflow--all /castor/project/proj_nobackup/tools/nextflow/nextflow + +# And every time you're launching Nextflow, don't forget to export the following ENV variables +# Or add them to your .bashrc file +$ export NXF_HOME=/castor/project/proj/nobackup/tools/nextflow/ +$ export PATH=${NXF_HOME}:${PATH} +$ export NXF_TEMP=$SNIC_TMP +$ export NXF_LAUNCHER=$SNIC_TMP +$ export NXF_SINGULARITY_CACHEDIR=/castor/project/proj_nobackup/singularity-images +``` + +### Download nf-core pipelines + +```bash +# Connect to rackham +$ ssh -X @rackham.uppmax.uu.se +# Or stay in your terminal + +# Open an interactive session (if you are on rackham) +$ interactive + +# Install the latest pip version +$ pip3 install --upgrade --force-reinstall git+https://github.com/nf-core/tools.git@dev --user + +# Download a pipeline (nf-core/rnaseq 3.0) with the singularity images +$ nf-core download rnaseq -r 3.0 -s -p 10 --compress none + +# Download a pipeline (nf-core/sarek 2.7) with the singularity images +$ nf-core download sarek -r 2.7 -s -p 10 --compress none + +# Download specific Singularity images +$ singularity pull --name nfcore-sareksnpeff-2.7.GRCh38.img docker://nfcore/sareksnpeff:2.7.GRCh38 +$ singularity pull --name nfcore-sarekvep-2.7.GRCh38.img docker://nfcore/sarekvep:2.7.GRCh38 + +# Move specific Singularity images into nf-core download folder +$ mv *.img nf-core-sarek-2.7/singularity-images/. + +# Connect to wharf using sftp +$ sftp -@bianca-sftp.uppmax.uu.se:- + +# Transfer rnaseq folder from rackham to wharf +sftp> put -r nf-core-rnaseq-3.0 . +[...] + +# Transfer sarek folder from rackham to wharf +sftp> put -r nf-core-sarek-2.7 . +[...] + +# The archives will be in the wharf folder in your user home on your bianca project + +# Connect to bianca +$ ssh -A -@bianca.uppmax.uu.se + +# Go to your project +$ cd /castor/project/proj_nobackup + +# Make and go into a nf-core/sarek directory (where you will store all nf-core/sarek versions) +$ mkdir sarek +$ cd sarek + +# Copy the tar from wharf to the project +$ cp /castor/project/proj_nobackup/wharf//-/nf-core-sarek-2.7 /castor/project/proj_nobackup/sarek + +# If you want other people to use it, +# Be sure that your group has rights to the directory as well +$ chown -R . nf-core-sarek-2.7 + +# Make a symbolic link to the extracted repository +$ ln -s nf-core-sarek-2.7 default +``` + +The principle is to have every member of your project to be able to use the same nf-core/sarek version at the same time. So every member of the project who wants to use nf-core/sarek will need to do: + +```bash +# Connect to bianca +$ ssh -A -@bianca.uppmax.uu.se + +# Go to your user directory +$ cd /home/ + +# Make a symbolic link to the default nf-core/sarek +$ ln -s /castor/project/proj_nobackup/sarek/default sarek +``` + +And then nf-core/sarek can be used with: + +```bash +$ nextflow run ~/sarek -profile uppmax --project --genome [GENOME ASSEMBLY] ... +``` + +This is an example of how to run sarek with the tool Manta and the genome assembly version GRCh38, which worked on `bianca` 20210416 + +```bash +$ nextflow run ~/sarek -profile uppmax --project --tools Manta --input +``` + +## Update nf-core/sarek + +Repeat the same steps as for installing nf-core/sarek, and update the link. + +```bash +# Connect to bianca (Connect to rackham first if needed) +$ ssh -A -@bianca.uppmax.uu.se + +# Go to the sarek directory in your project +$ cd /castor/project/proj_nobackup/sarek + +# Remove link +$ rm default + +# Link to new nf-core/sarek version +$ ln -s nf-core-sarek-2.7 default +``` + +You can for example keep a `default` version that you are sure is working, an make a link for a `testing` or `development` From eacdf89e534acd9db3837057f9439875fa3079df Mon Sep 17 00:00:00 2001 From: "James A. Fellows Yates" Date: Tue, 20 Apr 2021 13:17:35 +0200 Subject: [PATCH 33/86] Update eva.config --- conf/pipeline/eager/eva.config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/pipeline/eager/eva.config b/conf/pipeline/eager/eva.config index 2e07d57..fa7667d 100644 --- a/conf/pipeline/eager/eva.config +++ b/conf/pipeline/eager/eva.config @@ -61,7 +61,7 @@ process { // Fixes for SGE and Java incompatibility due to Java using more memory than you tell it to use withName: makeSeqDict { - clusterOptions = { "-S /bin/bash -v JAVA_OPTS='-XX:ParallelGCThreads=1' -l h_vmem=${(task.memory.toGiga() + 3)}G,virtual_free=${(task.memory.toGiga() + 3)}G" } + clusterOptions = { "-S /bin/bash -l h_vmem=${(task.memory.toGiga() * 2)}G,virtual_free=${(task.memory.toGiga() * 2)}G" } } withName: fastqc { @@ -212,4 +212,4 @@ profiles { bwaalnl = 16500 } } -} \ No newline at end of file +} From 4930795cabe69b5ceb3e6c86f7817d28e639eb6b Mon Sep 17 00:00:00 2001 From: MaxUlysse Date: Tue, 20 Apr 2021 15:38:49 +0200 Subject: [PATCH 34/86] feat: more complete docs --- docs/uppmax.md | 178 ++++++++++++++++++++++++------------------------- 1 file changed, 88 insertions(+), 90 deletions(-) diff --git a/docs/uppmax.md b/docs/uppmax.md index c8375a2..98b7d27 100644 --- a/docs/uppmax.md +++ b/docs/uppmax.md @@ -8,30 +8,32 @@ We have a Slack channel dedicated to UPPMAX users on the nf-core Slack: [https:/ ## Using the UPPMAX config profile -To use, run the pipeline with `-profile uppmax` (one hyphen). -This will download and launch the [`uppmax.config`](../conf/uppmax.config) which has been pre-configured with a setup suitable for the UPPMAX servers. -Using this profile, a docker image containing all of the required software will be downloaded, and converted to a Singularity image before execution of the pipeline. - -In addition to this config profile, you will also need to specify an UPPMAX project id. -You can do this with the `--project` flag (two hyphens) when launching nextflow. For example: - -```bash -nextflow run nf-core/PIPELINE -profile uppmax --project snic2018-1-234 # ..rest of pipeline flags -``` - -$ NB: If you're not sure what your UPPMAX project ID is, try running `groups` or checking SUPR. - Before running the pipeline you will need to either install Nextflow or load it using the environment module system. -This config enables Nextflow to manage the pipeline jobs via the Slurm job scheduler and using Singularity for software management. +To use, run the pipeline with `-profile uppmax` (one hyphen). +This will download and launch the [`uppmax.config`](../conf/uppmax.config) which has been pre-configured with a setup suitable for the UPPMAX servers. +It will enable Nextflow to manage the pipeline jobs via the Slurm job scheduler. +Using this profile, Docker image(s) containing required software(s) will be downloaded, and converted to Singularity image(s) before execution of the pipeline. + +In addition to this config profile, you will also need to specify an UPPMAX project id. +You can do this with the `--project` flag (two hyphens) when launching nextflow. +For example: + +```bash +# Launch a nf-core pipeline with the uppmax profile for the project id snic2018-1-234 +$ nextflow run nf-core/ -profile uppmax --project snic2018-1-234 [...] +``` + +> NB: If you're not sure what your UPPMAX project ID is, try running `groups` or checking SUPR. Just run Nextflow on a login node and it will handle everything else. Remember to use `-bg` to launch Nextflow in the background, so that the pipeline doesn't exit if you leave your terminal session. +Alternatively, you can also launch Nextflow in a `screen` or a `tmux` session. ## Using iGenomes references -A local copy of the iGenomes resource has been made available on all UPPMAX clusters so you should be able to run the pipeline against any reference available in the `igenomes.config`. +A local copy of the iGenomes resource has been made available on all UPPMAX clusters so you should be able to run the pipeline against any reference available in the `conf/igenomes.config`. You can do this by simply using the `--genome ` parameter. ## Getting more memory @@ -43,7 +45,7 @@ If your nf-core pipeline run is running out of memory, you can run on a fat node ``` This raises the ceiling of available memory from the default of `128.GB` to `256.GB`. -`Rackham` has nodes with 128GB, 256GB and 1TB memory available. +`rackham` has nodes with 128GB, 256GB and 1TB memory available. Note that each job will still start with the same request as normal, but restarted attempts with larger requests will be able to request greater amounts of memory. @@ -53,15 +55,15 @@ All jobs will be submitted to fat nodes using this method, so it's only for use The UPPMAX nf-core configuration profile uses the `hostname` of the active environment to automatically apply the following resource limits: +* `rackham` + * cpus available: 20 cpus + * memory available: 125 GB * `bianca` * cpus available: 16 cpus * memory available: 109 GB * `irma` * cpus available: 16 cpus * memory available: 250 GB -* `rackham` - * cpus available: 20 cpus - * memory available: 125 GB ## Development config @@ -74,42 +76,41 @@ It is not suitable for use with real data. To use it, submit with `-profile uppmax,devel`. -## Running on Bianca +## Running on bianca -$ :warning: For more information about `bianca`, follow the [UPPMAX `bianca` user guide](http://uppmax.uu.se/support/user-guides/bianca-user-guide/). -$ :warning: For more information, follow the [nf-core guide for running offline](https://nf-co.re/usage/offline) and the [nf-core `tools` guide for downloading pipelines for offline use](https://nf-co.re/tools#downloading-pipelines-for-offline-use). - > :warning: For more information about using `Singularity` with UPPMAX, follow the [UPPMAX `Singularity` guide](https://www.uppmax.uu.se/support-sv/user-guides/singularity-user-guide/). +> :warning: For more information about `bianca`, follow the [UPPMAX `bianca` user guide](http://uppmax.uu.se/support/user-guides/bianca-user-guide/). +> :warning: For more information, follow the [nf-core guide for running offline](https://nf-co.re/usage/offline) and the [nf-core `tools` guide for downloading pipelines for offline use](https://nf-co.re/tools#downloading-pipelines-for-offline-use). +> :warning: For more information about using `Singularity` with UPPMAX, follow the [UPPMAX `Singularity` guide](https://www.uppmax.uu.se/support-sv/user-guides/singularity-user-guide/). For security reasons, there is no internet access on `bianca` so you can't download from or upload files to the cluster directly. -Before running a nf-core pipeline on `bianca` you will first have to download the pipeline and singularity images needed elsewhere and transfer them via the wharf area to your own `bianca` project. +Before running a nf-core pipeline on `bianca` you will first have to download the pipeline and singularity images needed elsewhere and transfer them via the `wharf` area to your own `bianca` project. -In this guide, we use `rackham` to download and transfer files to wharf, but it can also be done on your own computer. +In this guide, we use `rackham` to download and transfer files to the `wharf` area, but it can also be done on your own computer. If you use `rackham` to download the pipeline and the singularity containers, we recommend using an interactive session (cf [interactive guide](https://www.uppmax.uu.se/support/faq/running-jobs-faq/how-can-i-run-interactively-on-a-compute-node/)), which is what we do in the following guide. -### Download Nextflow +### Download and install Nextflow -You can use the UPPMAX provided `module`, but if necessary, you can also download a more recent version. +You can use the Nextflow UPPMAX provided `module`, but if necessary, you can also download a more recent version. ```bash # Connect to rackham -$ ssh -X @rackham.uppmax.uu.se +$ ssh -X @rackham.uppmax.uu.se # Or stay in your terminal # Download the nextflow-all bundle -$ wget https://github.com/nextflow-io/nextflow/releases/download/v/nextflow--all +$ wget https://github.com/nextflow-io/nextflow/releases/download/v/nextflow--all -# Connect to wharf using sftp -# For FileZilla follow the bianca user guide -$ sftp -@bianca-sftp.uppmax.uu.se:- +# Connect to the wharf area using sftp +$ sftp -@bianca-sftp.uppmax.uu.se:- -# Transfer nextflow to wharf -sftp> put nextflow--all . +# Transfer nextflow to the wharf area +sftp> put nextflow--all . # Exit sftp $ exit # Connect to bianca -$ ssh -A -@bianca.uppmax.uu.se +$ ssh -A -@bianca.uppmax.uu.se # Go to your project $ cd /castor/project/proj_nobackup @@ -118,19 +119,18 @@ $ cd /castor/project/proj_nobackup $ mkdir tools $ mkdir tools/nextflow -# Move Nextflow from wharf to its directory -$ mv /castor/project/proj_nobackup/wharf//-/nextflow--all /castor/project/proj_nobackup/tools/nextflow +# Move Nextflow from the wharf area to its directory +$ mv /castor/project/proj_nobackup/wharf//-/nextflow--all /castor/project/proj_nobackup/tools/nextflow # Establish permission -$ chmod a+x /castor/project/proj_nobackup/tools/nextflow/nextflow--all +$ chmod a+x /castor/project/proj_nobackup/tools/nextflow/nextflow--all # If you want other people to use it # Be sure that your group has rights to the directory as well - -$ chown -R . /castor/project/proj_nobackup/tools/nextflow/nextflow--all +$ chown -R . /castor/project/proj_nobackup/tools/nextflow/nextflow--all # Make a link to it -$ ln -s /castor/project/proj_nobackup/tools/nextflow/nextflow--all /castor/project/proj_nobackup/tools/nextflow/nextflow +$ ln -s /castor/project/proj_nobackup/tools/nextflow/nextflow--all /castor/project/proj_nobackup/tools/nextflow/nextflow # And every time you're launching Nextflow, don't forget to export the following ENV variables # Or add them to your .bashrc file @@ -141,107 +141,105 @@ $ export NXF_LAUNCHER=$SNIC_TMP $ export NXF_SINGULARITY_CACHEDIR=/castor/project/proj_nobackup/singularity-images ``` -### Download nf-core pipelines +### Install nf-core tools ```bash # Connect to rackham -$ ssh -X @rackham.uppmax.uu.se +$ ssh -X @rackham.uppmax.uu.se +# Or stay in your terminal + +# Install the latest pip version +$ pip3 install --upgrade --force-reinstall git+https://github.com/nf-core/tools.git@dev --user +``` + +### Download and transfer a nf-core pipeline + +```bash +# Connect to rackham +$ ssh -X @rackham.uppmax.uu.se # Or stay in your terminal # Open an interactive session (if you are on rackham) $ interactive -# Install the latest pip version -$ pip3 install --upgrade --force-reinstall git+https://github.com/nf-core/tools.git@dev --user - # Download a pipeline (nf-core/rnaseq 3.0) with the singularity images -$ nf-core download rnaseq -r 3.0 -s -p 10 --compress none +$ nf-core download rnaseq -r 3.0 -s --compress none -# Download a pipeline (nf-core/sarek 2.7) with the singularity images -$ nf-core download sarek -r 2.7 -s -p 10 --compress none - -# Download specific Singularity images +# If necessary, extra singularity images can be download separately +# For example, if you downloaded nf-core/sarek, you will need extra images for annotation +# Here we download the nf-core/sarek GRCh38 specific images $ singularity pull --name nfcore-sareksnpeff-2.7.GRCh38.img docker://nfcore/sareksnpeff:2.7.GRCh38 $ singularity pull --name nfcore-sarekvep-2.7.GRCh38.img docker://nfcore/sarekvep:2.7.GRCh38 -# Move specific Singularity images into nf-core download folder +# Which can then be moved into the nf-core/sarek download folder $ mv *.img nf-core-sarek-2.7/singularity-images/. -# Connect to wharf using sftp -$ sftp -@bianca-sftp.uppmax.uu.se:- +# Connect to the wharf area using sftp +$ sftp -@bianca-sftp.uppmax.uu.se:- -# Transfer rnaseq folder from rackham to wharf +# Transfer rnaseq folder from rackham to the wharf area sftp> put -r nf-core-rnaseq-3.0 . -[...] - -# Transfer sarek folder from rackham to wharf -sftp> put -r nf-core-sarek-2.7 . -[...] # The archives will be in the wharf folder in your user home on your bianca project # Connect to bianca -$ ssh -A -@bianca.uppmax.uu.se +$ ssh -A -@bianca.uppmax.uu.se # Go to your project $ cd /castor/project/proj_nobackup -# Make and go into a nf-core/sarek directory (where you will store all nf-core/sarek versions) -$ mkdir sarek -$ cd sarek +# Make and go into a nf-core directory (where you will store all nf-core pipelines') +$ mkdir f-core +$ cd nf-core -# Copy the tar from wharf to the project -$ cp /castor/project/proj_nobackup/wharf//-/nf-core-sarek-2.7 /castor/project/proj_nobackup/sarek +# Move the folder from the wharf area to the project +$ cp /castor/project/proj_nobackup/wharf//-/nf-core-rnaseq-3.0 . # If you want other people to use it, # Be sure that your group has rights to the directory as well -$ chown -R . nf-core-sarek-2.7 +$ chown -R . nf-core-rnaseq-3.0 # Make a symbolic link to the extracted repository -$ ln -s nf-core-sarek-2.7 default +$ ln -s nf-core-rnaseq-3.0 nf-core-rnaseq-default ``` -The principle is to have every member of your project to be able to use the same nf-core/sarek version at the same time. So every member of the project who wants to use nf-core/sarek will need to do: +The principle is to have every member of your project to be able to use the same nf-core/rnaseq version at the same time. +So every member of the project who wants to use nf-core/rnaseq will need to do: ```bash # Connect to bianca -$ ssh -A -@bianca.uppmax.uu.se +$ ssh -A -@bianca.uppmax.uu.se # Go to your user directory -$ cd /home/ +$ cd /home/ -# Make a symbolic link to the default nf-core/sarek -$ ln -s /castor/project/proj_nobackup/sarek/default sarek +# Make a symbolic link to the default nf-core/rnaseq +$ ln -s /castor/project/proj_nobackup/nf-core/nf-core-rnaseq-default nf-core-rnaseq ``` -And then nf-core/sarek can be used with: +And then nf-core/rnaseq can be used with: ```bash -$ nextflow run ~/sarek -profile uppmax --project --genome [GENOME ASSEMBLY] ... +# run rnaseq on bianca +$ nextflow run ~/rnaseq -profile uppmax --project --genome [GENOME ASSEMBLY] ... ``` -This is an example of how to run sarek with the tool Manta and the genome assembly version GRCh38, which worked on `bianca` 20210416 +## Update a pipeline -```bash -$ nextflow run ~/sarek -profile uppmax --project --tools Manta --input -``` - -## Update nf-core/sarek - -Repeat the same steps as for installing nf-core/sarek, and update the link. +To update, repeat the same steps as for installing and update the link. ```bash # Connect to bianca (Connect to rackham first if needed) -$ ssh -A -@bianca.uppmax.uu.se +$ ssh -A -@bianca.uppmax.uu.se -# Go to the sarek directory in your project -$ cd /castor/project/proj_nobackup/sarek +# Go to the rnaseq directory in your project +$ cd /castor/project/proj_nobackup/nf-core # Remove link -$ rm default +$ unlink nf-core-rnaseq-default -# Link to new nf-core/sarek version -$ ln -s nf-core-sarek-2.7 default +# Link to new nf-core/rnaseq version +$ ln -s nf-core-rnaseq-3.0 nf-core-rnaseq-default ``` -You can for example keep a `default` version that you are sure is working, an make a link for a `testing` or `development` +You can for example keep a `nf-core-rnaseq-default` version that you are sure is working, an make a link for a `nf-core-rnaseq-testing` or `nf-core-rnaseq-development`. From e4d2ef0984e049fb5cd9e539de5f833654987c08 Mon Sep 17 00:00:00 2001 From: Maxime Garcia Date: Tue, 20 Apr 2021 15:53:54 +0200 Subject: [PATCH 35/86] Apply suggestions from code review Co-authored-by: Phil Ewels --- docs/uppmax.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/uppmax.md b/docs/uppmax.md index 98b7d27..4097541 100644 --- a/docs/uppmax.md +++ b/docs/uppmax.md @@ -189,7 +189,7 @@ $ ssh -A -@bianca.uppmax.uu.se $ cd /castor/project/proj_nobackup # Make and go into a nf-core directory (where you will store all nf-core pipelines') -$ mkdir f-core +$ mkdir nf-core $ cd nf-core # Move the folder from the wharf area to the project From 1c1dd952fc28f59eec2c5e7724c5740c987c3469 Mon Sep 17 00:00:00 2001 From: MaxUlysse Date: Tue, 20 Apr 2021 15:58:51 +0200 Subject: [PATCH 36/86] fix: bullet list --- docs/uppmax.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/docs/uppmax.md b/docs/uppmax.md index 4097541..c17063c 100644 --- a/docs/uppmax.md +++ b/docs/uppmax.md @@ -78,9 +78,12 @@ To use it, submit with `-profile uppmax,devel`. ## Running on bianca -> :warning: For more information about `bianca`, follow the [UPPMAX `bianca` user guide](http://uppmax.uu.se/support/user-guides/bianca-user-guide/). -> :warning: For more information, follow the [nf-core guide for running offline](https://nf-co.re/usage/offline) and the [nf-core `tools` guide for downloading pipelines for offline use](https://nf-co.re/tools#downloading-pipelines-for-offline-use). -> :warning: For more information about using `Singularity` with UPPMAX, follow the [UPPMAX `Singularity` guide](https://www.uppmax.uu.se/support-sv/user-guides/singularity-user-guide/). +> :warning: For more information, please follow the following guides: +> +> * [UPPMAX `bianca` user guide](http://uppmax.uu.se/support/user-guides/bianca-user-guide/). +> * [nf-core guide for running offline](https://nf-co.re/usage/offline) +> * [nf-core `tools` guide for downloading pipelines for offline use](https://nf-co.re/tools#downloading-pipelines-for-offline-use). +> * [UPPMAX `Singularity` guide](https://www.uppmax.uu.se/support-sv/user-guides/singularity-user-guide/). For security reasons, there is no internet access on `bianca` so you can't download from or upload files to the cluster directly. Before running a nf-core pipeline on `bianca` you will first have to download the pipeline and singularity images needed elsewhere and transfer them via the `wharf` area to your own `bianca` project. From 4eea06f0dbeb9189496ef6881bffc95bc8b19935 Mon Sep 17 00:00:00 2001 From: Maxime Garcia Date: Tue, 20 Apr 2021 16:03:34 +0200 Subject: [PATCH 37/86] Apply suggestions from code review Co-authored-by: Pontus Freyhult --- docs/uppmax.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/uppmax.md b/docs/uppmax.md index c17063c..621448b 100644 --- a/docs/uppmax.md +++ b/docs/uppmax.md @@ -8,7 +8,7 @@ We have a Slack channel dedicated to UPPMAX users on the nf-core Slack: [https:/ ## Using the UPPMAX config profile -Before running the pipeline you will need to either install Nextflow or load it using the environment module system. +Before running the pipeline you will need to either install Nextflow or load it using the environment module system (this can be done with e.g. `module load bioinfo-tools Nextflow/` where `VERSION` is e.g. `20.10`). To use, run the pipeline with `-profile uppmax` (one hyphen). This will download and launch the [`uppmax.config`](../conf/uppmax.config) which has been pre-configured with a setup suitable for the UPPMAX servers. From b225a0555ae00df959ac43afe946f02e24a2a8fe Mon Sep 17 00:00:00 2001 From: phue Date: Wed, 21 Apr 2021 10:08:00 +0200 Subject: [PATCH 38/86] biohpc_gen: update software tree path --- conf/biohpc_gen.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/biohpc_gen.config b/conf/biohpc_gen.config index b625b20..e3f4069 100755 --- a/conf/biohpc_gen.config +++ b/conf/biohpc_gen.config @@ -12,7 +12,7 @@ env { process { executor = 'slurm' queue = { task.memory <= 1536.GB ? (task.time > 2.d || task.memory > 384.GB ? 'biohpc_gen_production' : 'biohpc_gen_normal') : 'biohpc_gen_highmem' } - beforeScript = 'module use /dss/dssfs01/pr53da/pr53da-dss-0000/spack/modules/x86_avx2/linux*' + beforeScript = 'module use /dss/dsslegfs02/pn73se/pn73se-dss-0000/spack/modules/x86_avx2/linux*' module = 'charliecloud/0.22:miniconda3' } From 79e3dd65a753f69b17b9f7f4c043b73ed4030619 Mon Sep 17 00:00:00 2001 From: Maxime Garcia Date: Wed, 21 Apr 2021 11:06:39 +0200 Subject: [PATCH 39/86] Apply suggestions from code review Co-authored-by: Pontus Freyhult --- docs/uppmax.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/uppmax.md b/docs/uppmax.md index 621448b..1cf8690 100644 --- a/docs/uppmax.md +++ b/docs/uppmax.md @@ -13,7 +13,9 @@ Before running the pipeline you will need to either install Nextflow or load it To use, run the pipeline with `-profile uppmax` (one hyphen). This will download and launch the [`uppmax.config`](../conf/uppmax.config) which has been pre-configured with a setup suitable for the UPPMAX servers. It will enable Nextflow to manage the pipeline jobs via the Slurm job scheduler. -Using this profile, Docker image(s) containing required software(s) will be downloaded, and converted to Singularity image(s) before execution of the pipeline. +Using this profile, Docker image(s) containing required software(s) will be downloaded, and converted to Singularity image(s) if needed before execution of the pipeline. + +Recent version of Nextflow also support the environment variable `NXF_SINGULARITY_CACHEDIR` which can be used to supply images. Images for some nf-core pipelines are available under `/sw/data/ToolBox/nf-core/` and those can be used by `NXF_SINGULARITY_CACHEDIR=/sw/data/ToolBox/nf-core/; export NXF_SINGULARITY_CACHEDIR`. In addition to this config profile, you will also need to specify an UPPMAX project id. You can do this with the `--project` flag (two hyphens) when launching nextflow. From 658fa7ccda13d2d5d9c9d220be7524ae4463f7a4 Mon Sep 17 00:00:00 2001 From: MaxUlysse Date: Wed, 21 Apr 2021 11:08:16 +0200 Subject: [PATCH 40/86] fix: markdownlint --- docs/uppmax.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/uppmax.md b/docs/uppmax.md index 1cf8690..9057b2a 100644 --- a/docs/uppmax.md +++ b/docs/uppmax.md @@ -13,9 +13,10 @@ Before running the pipeline you will need to either install Nextflow or load it To use, run the pipeline with `-profile uppmax` (one hyphen). This will download and launch the [`uppmax.config`](../conf/uppmax.config) which has been pre-configured with a setup suitable for the UPPMAX servers. It will enable Nextflow to manage the pipeline jobs via the Slurm job scheduler. -Using this profile, Docker image(s) containing required software(s) will be downloaded, and converted to Singularity image(s) if needed before execution of the pipeline. +Using this profile, Docker image(s) containing required software(s) will be downloaded, and converted to Singularity image(s) if needed before execution of the pipeline. -Recent version of Nextflow also support the environment variable `NXF_SINGULARITY_CACHEDIR` which can be used to supply images. Images for some nf-core pipelines are available under `/sw/data/ToolBox/nf-core/` and those can be used by `NXF_SINGULARITY_CACHEDIR=/sw/data/ToolBox/nf-core/; export NXF_SINGULARITY_CACHEDIR`. +Recent version of Nextflow also support the environment variable `NXF_SINGULARITY_CACHEDIR` which can be used to supply images. +Images for some nf-core pipelines are available under `/sw/data/ToolBox/nf-core/` and those can be used by `NXF_SINGULARITY_CACHEDIR=/sw/data/ToolBox/nf-core/; export NXF_SINGULARITY_CACHEDIR`. In addition to this config profile, you will also need to specify an UPPMAX project id. You can do this with the `--project` flag (two hyphens) when launching nextflow. From c89877decca23ea327a50bd9ec5665fb8e9675fe Mon Sep 17 00:00:00 2001 From: MaxUlysse Date: Wed, 21 Apr 2021 11:17:06 +0200 Subject: [PATCH 41/86] feat: use --- docs/uppmax.md | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/docs/uppmax.md b/docs/uppmax.md index 9057b2a..a38c1be 100644 --- a/docs/uppmax.md +++ b/docs/uppmax.md @@ -168,8 +168,8 @@ $ ssh -X @rackham.uppmax.uu.se # Open an interactive session (if you are on rackham) $ interactive -# Download a pipeline (nf-core/rnaseq 3.0) with the singularity images -$ nf-core download rnaseq -r 3.0 -s --compress none +# Download a pipeline with the singularity images +$ nf-core download -r -s --compress none # If necessary, extra singularity images can be download separately # For example, if you downloaded nf-core/sarek, you will need extra images for annotation @@ -183,8 +183,8 @@ $ mv *.img nf-core-sarek-2.7/singularity-images/. # Connect to the wharf area using sftp $ sftp -@bianca-sftp.uppmax.uu.se:- -# Transfer rnaseq folder from rackham to the wharf area -sftp> put -r nf-core-rnaseq-3.0 . +# Transfer folder from rackham to the wharf area +sftp> put -r nf-core-- . # The archives will be in the wharf folder in your user home on your bianca project @@ -199,18 +199,18 @@ $ mkdir nf-core $ cd nf-core # Move the folder from the wharf area to the project -$ cp /castor/project/proj_nobackup/wharf//-/nf-core-rnaseq-3.0 . +$ cp /castor/project/proj_nobackup/wharf//-/nf-core-- . # If you want other people to use it, # Be sure that your group has rights to the directory as well -$ chown -R . nf-core-rnaseq-3.0 +$ chown -R . nf-core-- # Make a symbolic link to the extracted repository -$ ln -s nf-core-rnaseq-3.0 nf-core-rnaseq-default +$ ln -s nf-core-- nf-core--default ``` -The principle is to have every member of your project to be able to use the same nf-core/rnaseq version at the same time. -So every member of the project who wants to use nf-core/rnaseq will need to do: +The principle is to have every member of your project to be able to use the same nf-core/ version at the same time. +So every member of the project who wants to use nf-core/ will need to do: ```bash # Connect to bianca @@ -219,15 +219,15 @@ $ ssh -A -@bianca.uppmax.uu.se # Go to your user directory $ cd /home/ -# Make a symbolic link to the default nf-core/rnaseq -$ ln -s /castor/project/proj_nobackup/nf-core/nf-core-rnaseq-default nf-core-rnaseq +# Make a symbolic link to the default nf-core/ +$ ln -s /castor/project/proj_nobackup/nf-core/nf-core--default nf-core- ``` -And then nf-core/rnaseq can be used with: +And then nf-core/ can be used with: ```bash -# run rnaseq on bianca -$ nextflow run ~/rnaseq -profile uppmax --project --genome [GENOME ASSEMBLY] ... +# run on bianca +$ nextflow run ~/ -profile uppmax --project --genome ... ``` ## Update a pipeline @@ -238,14 +238,14 @@ To update, repeat the same steps as for installing and update the link. # Connect to bianca (Connect to rackham first if needed) $ ssh -A -@bianca.uppmax.uu.se -# Go to the rnaseq directory in your project +# Go to the nf-core directory in your project $ cd /castor/project/proj_nobackup/nf-core # Remove link -$ unlink nf-core-rnaseq-default +$ unlink nf-core--default -# Link to new nf-core/rnaseq version -$ ln -s nf-core-rnaseq-3.0 nf-core-rnaseq-default +# Link to new nf-core/ version +$ ln -s nf-core-- nf-core--default ``` -You can for example keep a `nf-core-rnaseq-default` version that you are sure is working, an make a link for a `nf-core-rnaseq-testing` or `nf-core-rnaseq-development`. +You can for example keep a `nf-core--default` version that you are sure is working, an make a link for a `nf-core--testing` or `nf-core--development`. From 1a7ec56c33adc7550ccff48b2ffecc5e638e4a8e Mon Sep 17 00:00:00 2001 From: MaxUlysse Date: Wed, 21 Apr 2021 11:23:50 +0200 Subject: [PATCH 42/86] feat: more details --- docs/uppmax.md | 47 ++++++++++++++++++++++++++++++++++------------- 1 file changed, 34 insertions(+), 13 deletions(-) diff --git a/docs/uppmax.md b/docs/uppmax.md index a38c1be..176adf3 100644 --- a/docs/uppmax.md +++ b/docs/uppmax.md @@ -8,18 +8,18 @@ We have a Slack channel dedicated to UPPMAX users on the nf-core Slack: [https:/ ## Using the UPPMAX config profile -Before running the pipeline you will need to either install Nextflow or load it using the environment module system (this can be done with e.g. `module load bioinfo-tools Nextflow/` where `VERSION` is e.g. `20.10`). +Before running the pipeline you will need to either install `Nextflow` or load it using the environment module system (this can be done with e.g. `module load bioinfo-tools Nextflow/` where `VERSION` is e.g. `20.10`). To use, run the pipeline with `-profile uppmax` (one hyphen). This will download and launch the [`uppmax.config`](../conf/uppmax.config) which has been pre-configured with a setup suitable for the UPPMAX servers. -It will enable Nextflow to manage the pipeline jobs via the Slurm job scheduler. -Using this profile, Docker image(s) containing required software(s) will be downloaded, and converted to Singularity image(s) if needed before execution of the pipeline. +It will enable `Nextflow` to manage the pipeline jobs via the `Slurm` job scheduler. +Using this profile, `Docker` image(s) containing required software(s) will be downloaded, and converted to `Singularity` image(s) if needed before execution of the pipeline. -Recent version of Nextflow also support the environment variable `NXF_SINGULARITY_CACHEDIR` which can be used to supply images. -Images for some nf-core pipelines are available under `/sw/data/ToolBox/nf-core/` and those can be used by `NXF_SINGULARITY_CACHEDIR=/sw/data/ToolBox/nf-core/; export NXF_SINGULARITY_CACHEDIR`. +Recent version of `Nextflow` also support the environment variable `NXF_SINGULARITY_CACHEDIR` which can be used to supply images. +Images for some `nf-core` pipelines are available under `/sw/data/ToolBox/nf-core/` and those can be used by `NXF_SINGULARITY_CACHEDIR=/sw/data/ToolBox/nf-core/; export NXF_SINGULARITY_CACHEDIR`. In addition to this config profile, you will also need to specify an UPPMAX project id. -You can do this with the `--project` flag (two hyphens) when launching nextflow. +You can do this with the `--project` flag (two hyphens) when launching `Nextflow`. For example: ```bash @@ -29,19 +29,19 @@ $ nextflow run nf-core/ -profile uppmax --project snic2018-1-234 [...] > NB: If you're not sure what your UPPMAX project ID is, try running `groups` or checking SUPR. -Just run Nextflow on a login node and it will handle everything else. +Just run `Nextflow` on a login node and it will handle everything else. -Remember to use `-bg` to launch Nextflow in the background, so that the pipeline doesn't exit if you leave your terminal session. -Alternatively, you can also launch Nextflow in a `screen` or a `tmux` session. +Remember to use `-bg` to launch `Nextflow` in the background, so that the pipeline doesn't exit if you leave your terminal session. +Alternatively, you can also launch `Nextflow` in a `screen` or a `tmux` session. -## Using iGenomes references +## Using AWS iGenomes references -A local copy of the iGenomes resource has been made available on all UPPMAX clusters so you should be able to run the pipeline against any reference available in the `conf/igenomes.config`. +A local copy of the `AWS iGenomes` resource has been made available on all UPPMAX clusters so you should be able to run the pipeline against any reference available in the `conf/igenomes.config`. You can do this by simply using the `--genome ` parameter. ## Getting more memory -If your nf-core pipeline run is running out of memory, you can run on a fat node with more memory using the following nextflow flags: +If your `nf-core` pipeline run is running out of memory, you can run on a fat node with more memory using the following `Nextflow` flags: ```bash --clusterOptions "-C mem256GB" --max_memory "256GB" @@ -96,7 +96,15 @@ If you use `rackham` to download the pipeline and the singularity containers, we ### Download and install Nextflow -You can use the Nextflow UPPMAX provided `module`, but if necessary, you can also download a more recent version. +You can use the `Nextflow` UPPMAX provided `module`, but if necessary, you can also download a more recent version. + +```bash +# See the available versions for the module +module spider Nextflow + +# Load a specific version of the Nextflow module +module load bioinfo-tools Nextflow/` +``` ```bash # Connect to rackham @@ -149,6 +157,19 @@ $ export NXF_SINGULARITY_CACHEDIR=/castor/project/proj_nobackup/singularity-imag ### Install nf-core tools +You can use the `nf-core` UPPMAX provided `module`, but if necessary, you can also download a more recent version. + +```bash +# Connect to rackham +$ ssh -X @rackham.uppmax.uu.se + +# See the available versions for the module +module spider nf-core + +# Load a specific version of the nf-core module +module load bioinfo-tools nf-core/` +``` + ```bash # Connect to rackham $ ssh -X @rackham.uppmax.uu.se From 844246cc7d649c271d7d72467b8196ebc3b24a0e Mon Sep 17 00:00:00 2001 From: MaxUlysse Date: Wed, 21 Apr 2021 11:28:58 +0200 Subject: [PATCH 43/86] fix: clearer usage of module --- docs/uppmax.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/uppmax.md b/docs/uppmax.md index 176adf3..e8304b8 100644 --- a/docs/uppmax.md +++ b/docs/uppmax.md @@ -99,6 +99,9 @@ If you use `rackham` to download the pipeline and the singularity containers, we You can use the `Nextflow` UPPMAX provided `module`, but if necessary, you can also download a more recent version. ```bash +# Connect to bianca +$ ssh -A -@bianca.uppmax.uu.se + # See the available versions for the module module spider Nextflow From bab9241243ed2a92a99f31fe9ee9cb39d9b99405 Mon Sep 17 00:00:00 2001 From: MaxUlysse Date: Wed, 21 Apr 2021 11:51:14 +0200 Subject: [PATCH 44/86] fix: markdownlint --- docs/uppmax.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/uppmax.md b/docs/uppmax.md index e8304b8..a26fa88 100644 --- a/docs/uppmax.md +++ b/docs/uppmax.md @@ -233,8 +233,8 @@ $ chown -R . nf-core-- $ ln -s nf-core-- nf-core--default ``` -The principle is to have every member of your project to be able to use the same nf-core/ version at the same time. -So every member of the project who wants to use nf-core/ will need to do: +The principle is to have every member of your project to be able to use the same `nf-core/` version at the same time. +So every member of the project who wants to use `nf-core/` will need to do: ```bash # Connect to bianca @@ -247,7 +247,7 @@ $ cd /home/ $ ln -s /castor/project/proj_nobackup/nf-core/nf-core--default nf-core- ``` -And then nf-core/ can be used with: +And then `nf-core/` can be used with: ```bash # run on bianca From 1548690ca68b8c7501352a7783e8ca649e2b00bf Mon Sep 17 00:00:00 2001 From: Maxime Garcia Date: Wed, 21 Apr 2021 12:27:27 +0200 Subject: [PATCH 45/86] Update docs/uppmax.md Co-authored-by: Pontus Freyhult --- docs/uppmax.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/uppmax.md b/docs/uppmax.md index a26fa88..3024cb0 100644 --- a/docs/uppmax.md +++ b/docs/uppmax.md @@ -44,7 +44,7 @@ You can do this by simply using the `--genome ` parameter. If your `nf-core` pipeline run is running out of memory, you can run on a fat node with more memory using the following `Nextflow` flags: ```bash ---clusterOptions "-C mem256GB" --max_memory "256GB" +--clusterOptions "-C mem256GB -p node" --max_memory "256GB" ``` This raises the ceiling of available memory from the default of `128.GB` to `256.GB`. From 7d8770af1a1ad08fdaa9d83bde33e1e541969de2 Mon Sep 17 00:00:00 2001 From: Anthony Underwood Date: Wed, 21 Apr 2021 16:39:55 +0100 Subject: [PATCH 46/86] Create sanger.config --- conf/sanger.config | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 conf/sanger.config diff --git a/conf/sanger.config b/conf/sanger.config new file mode 100644 index 0000000..686a3af --- /dev/null +++ b/conf/sanger.config @@ -0,0 +1,26 @@ +params { + config_profile_description = 'The Wellcome Sanger Institute HPC cluster profile' + config_profile_contact = 'Anthony Underwood (@aunderwo)' + config_profile_url = 'https://www.sanger.ac.uk/group/informatics-support-group/' +} + +singularity { + enabled = true + cacheDir = "${baseDir}/singularity" + runOptions = '--bind /lustre --bind /nfs/pathnfs01 --bind /nfs/pathnfs02 --bind /nfs/pathnfs03 --bind /nfs/pathnfs04 --bind /nfs/pathnfs05 --bind /nfs/pathnfs06 --no-home' +} + +process{ + executor = 'lsf' + queue = 'normal' + errorStrategy = { task.attempt <= 5 ? "retry" : "finish" } + process.maxRetries = 5 +} + +executor{ + name = 'lsf' + perJobMemLimit = true + poolSize = 4 + submitRateLimit = '5 sec' + killBatchSize = 50 +} From 7163e8723d7f7011bfb3f6aa225c170848a6c5c1 Mon Sep 17 00:00:00 2001 From: Anthony Underwood Date: Wed, 21 Apr 2021 20:17:42 +0100 Subject: [PATCH 47/86] Create sanger.md --- docs/sanger.md | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 docs/sanger.md diff --git a/docs/sanger.md b/docs/sanger.md new file mode 100644 index 0000000..be39bfa --- /dev/null +++ b/docs/sanger.md @@ -0,0 +1,47 @@ +# nf-core/configs: Wellcome Sanger Institute Configuration + +To use, run the pipeline with `-profile sanger`. This will download and launch the [`sanger.config`](../conf/sanger.config) which has been +pre-configured with a setup suitable for the Wellcome Sanger Institute LSF cluster. +Using this profile, either a docker image containing all of the required software will be downloaded, and converted to a Singularity image or +a Singularity image downloaded directly before execution of the pipeline. + +## Running the workflow on the Wellcome Sanger Institute cluster + +The latest version of Nextflow is not installed by default on the cluster. You will need to install it into a directory you have write access to + +- Install Nextflow : [here](https://www.nextflow.io/docs/latest/getstarted.html#) + +Nextflow manages each process as a separate job that is submitted to the cluster by using the `bsub` command. +Nextflow shouldn't run directly on the submission node but on a compute node. +To do so make a shell script with a similar structure to the following code and submit with `bsub < $PWD/my_script.sh` + +``` +#!/bin/bash +#BSUB -o /path/to/a/log/dir/%J.o +#BSUB -e /path/to/a/log/dir//%J.e +#BSUB -M 8000 +#BSUB -q long +#BSUB -n 4 + +export HTTP_PROXY='http://wwwcache.sanger.ac.uk:3128' +export HTTPS_PROXY='http://wwwcache.sanger.ac.uk:3128' +export NXF_ANSI_LOG=false +export NXF_OPTS="-Xms8G -Xmx8G -Dnxf.pool.maxThreads=2000" +export NXF_VER=21.03.0-edge + + +/path/to/your/install/nextflow run \ +/path/to/nf-core/pipeline/main.nf \ +-w /path/to/some/dir/work \ +-profile sanger \ +-c my_specific.config \ +-qs 1000 \ +-resume + +## clean up on exit 0 - delete this if you want to keep the work dir +status=$? +if [[ $status -eq 0 ]]; then + rm -r /path/to/some/dir/work +fi +``` + From 40eb3e02010af4653b44748116102eb6f6b0f376 Mon Sep 17 00:00:00 2001 From: Anthony Underwood Date: Wed, 21 Apr 2021 20:20:30 +0100 Subject: [PATCH 48/86] Update sanger.md --- docs/sanger.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/sanger.md b/docs/sanger.md index be39bfa..f1e5c29 100644 --- a/docs/sanger.md +++ b/docs/sanger.md @@ -2,7 +2,7 @@ To use, run the pipeline with `-profile sanger`. This will download and launch the [`sanger.config`](../conf/sanger.config) which has been pre-configured with a setup suitable for the Wellcome Sanger Institute LSF cluster. -Using this profile, either a docker image containing all of the required software will be downloaded, and converted to a Singularity image or +Using this profile, either a docker image containing all of the required software will be downloaded, and converted to a Singularity image or a Singularity image downloaded directly before execution of the pipeline. ## Running the workflow on the Wellcome Sanger Institute cluster From cc18d213dc44742ac579b6e7aa6498656e6c7313 Mon Sep 17 00:00:00 2001 From: Anthony Underwood Date: Wed, 21 Apr 2021 20:24:08 +0100 Subject: [PATCH 49/86] Update sanger.md --- docs/sanger.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/sanger.md b/docs/sanger.md index f1e5c29..bb0e607 100644 --- a/docs/sanger.md +++ b/docs/sanger.md @@ -15,7 +15,7 @@ Nextflow manages each process as a separate job that is submitted to the cluster Nextflow shouldn't run directly on the submission node but on a compute node. To do so make a shell script with a similar structure to the following code and submit with `bsub < $PWD/my_script.sh` -``` +```bash #!/bin/bash #BSUB -o /path/to/a/log/dir/%J.o #BSUB -e /path/to/a/log/dir//%J.e @@ -44,4 +44,3 @@ if [[ $status -eq 0 ]]; then rm -r /path/to/some/dir/work fi ``` - From 6175362049ab8a378df5464970b23c6f40b00c1c Mon Sep 17 00:00:00 2001 From: Anthony Underwood Date: Wed, 21 Apr 2021 20:47:48 +0100 Subject: [PATCH 50/86] Add sanger profile --- nfcore_custom.config | 1 + 1 file changed, 1 insertion(+) diff --git a/nfcore_custom.config b/nfcore_custom.config index 88d7a62..9b4fbda 100644 --- a/nfcore_custom.config +++ b/nfcore_custom.config @@ -43,6 +43,7 @@ profiles { pasteur { includeConfig "${params.custom_config_base}/conf/pasteur.config" } phoenix { includeConfig "${params.custom_config_base}/conf/phoenix.config" } prince { includeConfig "${params.custom_config_base}/conf/prince.config" } + sanger { includeConfig "${params.custom_config_base}/conf/sanger.config"} seg_globe { includeConfig "${params.custom_config_base}/conf/seg_globe.config"} shh { includeConfig "${params.custom_config_base}/conf/shh.config" } uct_hpc { includeConfig "${params.custom_config_base}/conf/uct_hpc.config" } From fa267c0cf95a5657d33ce07892b073b8a0629d57 Mon Sep 17 00:00:00 2001 From: Anthony Underwood Date: Wed, 21 Apr 2021 21:01:25 +0100 Subject: [PATCH 51/86] Add sanger to tests --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index cd2170c..65cabe5 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -16,7 +16,7 @@ jobs: needs: test_all_profiles strategy: matrix: - profile: ['abims', 'awsbatch', 'bi','bigpurple', 'binac', 'biohpc_gen', 'cbe', 'ccga_dx', 'ccga_med', 'cfc', 'cfc_dev', 'crick', 'denbi_qbic', 'ebc', 'eddie', 'eva', 'genotoul', 'genouest', 'gis', 'google', 'hebbe', 'icr_davros', 'ifb_core', 'imperial', 'imperial_mb', 'jax', 'kraken', 'mpcdf', 'munin', 'oist', 'pasteur', 'phoenix', 'prince', 'seg_globe', 'shh', 'uct_hpc', 'uppmax', 'utd_ganymede', 'uzh'] + profile: ['abims', 'awsbatch', 'bi','bigpurple', 'binac', 'biohpc_gen', 'cbe', 'ccga_dx', 'ccga_med', 'cfc', 'cfc_dev', 'crick', 'denbi_qbic', 'ebc', 'eddie', 'eva', 'genotoul', 'genouest', 'gis', 'google', 'hebbe', 'icr_davros', 'ifb_core', 'imperial', 'imperial_mb', 'jax', 'kraken', 'mpcdf', 'munin', 'oist', 'pasteur', 'phoenix', 'prince', 'sanger', 'seg_globe', 'shh', 'uct_hpc', 'uppmax', 'utd_ganymede', 'uzh'] steps: - uses: actions/checkout@v1 - name: Install Nextflow From 351c5773f0541dd445649e6c4af1b8a8590e0a5e Mon Sep 17 00:00:00 2001 From: Anthony Underwood Date: Thu, 22 Apr 2021 11:59:34 +0100 Subject: [PATCH 52/86] Add queue limits for 'normal' --- conf/sanger.config | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/conf/sanger.config b/conf/sanger.config index 686a3af..63952c8 100644 --- a/conf/sanger.config +++ b/conf/sanger.config @@ -24,3 +24,9 @@ executor{ submitRateLimit = '5 sec' killBatchSize = 50 } + +params { + max_memory = 128.GB + max_cpus = 64 + max_time = 12.h +} From b16b011bcc2fc72ad7b3b84b410d895cae139cdf Mon Sep 17 00:00:00 2001 From: Anthony Underwood Date: Thu, 22 Apr 2021 12:02:11 +0100 Subject: [PATCH 53/86] Add ~/bin as recommended location for nextflow executable --- docs/sanger.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/sanger.md b/docs/sanger.md index bb0e607..483683c 100644 --- a/docs/sanger.md +++ b/docs/sanger.md @@ -11,6 +11,8 @@ The latest version of Nextflow is not installed by default on the cluster. You w - Install Nextflow : [here](https://www.nextflow.io/docs/latest/getstarted.html#) +Recommendation place to move the `nextflow` executable is `~/bin` so that it's in the `PATH`. + Nextflow manages each process as a separate job that is submitted to the cluster by using the `bsub` command. Nextflow shouldn't run directly on the submission node but on a compute node. To do so make a shell script with a similar structure to the following code and submit with `bsub < $PWD/my_script.sh` @@ -27,10 +29,10 @@ export HTTP_PROXY='http://wwwcache.sanger.ac.uk:3128' export HTTPS_PROXY='http://wwwcache.sanger.ac.uk:3128' export NXF_ANSI_LOG=false export NXF_OPTS="-Xms8G -Xmx8G -Dnxf.pool.maxThreads=2000" -export NXF_VER=21.03.0-edge +export NXF_VER=21.04.0-edge -/path/to/your/install/nextflow run \ +nextflow run \ /path/to/nf-core/pipeline/main.nf \ -w /path/to/some/dir/work \ -profile sanger \ From f414446a8845852e4fd8032fb3d45da385e33f10 Mon Sep 17 00:00:00 2001 From: Anthony Underwood Date: Thu, 22 Apr 2021 15:38:36 +0100 Subject: [PATCH 54/86] Add info on how to load Singularity into your path --- docs/sanger.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/sanger.md b/docs/sanger.md index 483683c..940834e 100644 --- a/docs/sanger.md +++ b/docs/sanger.md @@ -11,9 +11,16 @@ The latest version of Nextflow is not installed by default on the cluster. You w - Install Nextflow : [here](https://www.nextflow.io/docs/latest/getstarted.html#) -Recommendation place to move the `nextflow` executable is `~/bin` so that it's in the `PATH`. +A recommended place to move the `nextflow` executable to is `~/bin` so that it's in the `PATH`. + Nextflow manages each process as a separate job that is submitted to the cluster by using the `bsub` command. +Since the Nextflow pipeline will submit individual jobs for each process to the cluster and dependencies will be provided bu Singularity images you shoudl make sure that your account has access to the Singularity binary by adding these lines to your `.bashrc` file + +```bash +[[ -f /software/pathogen/farm5 ]] && module load ISG/singularity +``` + Nextflow shouldn't run directly on the submission node but on a compute node. To do so make a shell script with a similar structure to the following code and submit with `bsub < $PWD/my_script.sh` From 3e8f9b3d4e60f912039f10192a11ee099e5c668a Mon Sep 17 00:00:00 2001 From: Anthony Underwood Date: Thu, 22 Apr 2021 15:57:09 +0100 Subject: [PATCH 55/86] Remove blank lines --- docs/sanger.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/sanger.md b/docs/sanger.md index 940834e..ee75755 100644 --- a/docs/sanger.md +++ b/docs/sanger.md @@ -13,7 +13,6 @@ The latest version of Nextflow is not installed by default on the cluster. You w A recommended place to move the `nextflow` executable to is `~/bin` so that it's in the `PATH`. - Nextflow manages each process as a separate job that is submitted to the cluster by using the `bsub` command. Since the Nextflow pipeline will submit individual jobs for each process to the cluster and dependencies will be provided bu Singularity images you shoudl make sure that your account has access to the Singularity binary by adding these lines to your `.bashrc` file From 8b3951b244e8a529ff41cd5bef249d59ca624beb Mon Sep 17 00:00:00 2001 From: Anthony Underwood Date: Thu, 22 Apr 2021 16:00:37 +0100 Subject: [PATCH 56/86] Create cambridge.config --- conf/cambridge.config | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 conf/cambridge.config diff --git a/conf/cambridge.config b/conf/cambridge.config new file mode 100644 index 0000000..3c970b7 --- /dev/null +++ b/conf/cambridge.config @@ -0,0 +1,18 @@ +params { + config_profile_description = 'Cambridge HPC cluster profile.' + config_profile_contact = 'Andries van Tonder (ajv37@cam.ac.uk)' + config_profile_url = "https://docs.hpc.cam.ac.uk/hpc" +} +singularity { + enabled = true + autoMounts = true +} +process { + executor = 'slurm' + clusterOptions = '-p cclake' +} +params { + max_memory = 192.GB + max_cpus = 56 + max_time = 12.h +} From 29dcc160e388bb7d961e67255045fe2b4b27a082 Mon Sep 17 00:00:00 2001 From: Anthony Underwood Date: Thu, 22 Apr 2021 16:04:29 +0100 Subject: [PATCH 57/86] Create cambridge.md --- docs/cambridge.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 docs/cambridge.md diff --git a/docs/cambridge.md b/docs/cambridge.md new file mode 100644 index 0000000..3f6373e --- /dev/null +++ b/docs/cambridge.md @@ -0,0 +1,17 @@ +# nf-core/configs: Cambridge HPC Configuration +All nf-core pipelines have been successfully configured for use on the Cambridge HPC cluster at the [The University of Cambridge](https://www.cam.ac.uk/). +To use, run the pipeline with `-profile cambridge`. This will download and launch the [`cambridge.config`](../conf/cambridge.config) whichhas been pre-configured +with a setup suitable for the Cambridge HPC cluster. Using this profile, either a docker image containing all of the required software will be downloaded, +and converted to a Singularity image or a Singularity image downloaded directly before execution of the pipeline. + +The latest version of Nextflow is not installed by default on the Cambridge HPC cluster. You will need to install it into a directory you have write access to. +Follow these instructions from the Nextflow documentation. + +- Install Nextflow : [here](https://www.nextflow.io/docs/latest/getstarted.html#) + +All of the intermediate files required to run the pipeline will be stored in the `work/` directory. It is recommended to delete this directory after the pipeline +has finished successfully because it can get quite large, and all of the main output files will be saved in the `results/` directory anyway. + +> NB: You will need an account to use the Cambridge HPC cluster in order to run the pipeline. If in doubt contact IT. +> NB: Nextflow will need to submit the jobs via SLURM to the Cambridge HPC cluster and as such the commands above will have to be executed on one of the login +nodes. If in doubt contact IT. From 982d1a8f2a297b2e0662828ae83b87fc2588a356 Mon Sep 17 00:00:00 2001 From: Anthony Underwood Date: Thu, 22 Apr 2021 16:41:05 +0100 Subject: [PATCH 58/86] Fix markdown linting --- docs/cambridge.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/cambridge.md b/docs/cambridge.md index 3f6373e..ce833d7 100644 --- a/docs/cambridge.md +++ b/docs/cambridge.md @@ -1,4 +1,5 @@ # nf-core/configs: Cambridge HPC Configuration + All nf-core pipelines have been successfully configured for use on the Cambridge HPC cluster at the [The University of Cambridge](https://www.cam.ac.uk/). To use, run the pipeline with `-profile cambridge`. This will download and launch the [`cambridge.config`](../conf/cambridge.config) whichhas been pre-configured with a setup suitable for the Cambridge HPC cluster. Using this profile, either a docker image containing all of the required software will be downloaded, From 5aadc5ec0ee6121b1d8c6b076363dc9323526bf0 Mon Sep 17 00:00:00 2001 From: Anthony Underwood Date: Sat, 24 Apr 2021 13:21:19 +0100 Subject: [PATCH 59/86] Add Sanger to README --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 7637725..68beab2 100644 --- a/README.md +++ b/README.md @@ -123,6 +123,7 @@ Currently documentation is available for the following systems: * [PASTEUR](docs/pasteur.md) * [PHOENIX](docs/phoenix.md) * [PRINCE](docs/prince.md) +* [SANGER](docs/sanger.md) * [SEG_GLOBE](docs/seg_globe.md) * [SHH](docs/shh.md) * [UCT_HPC](docs/uct_hpc.md) From e1b1402f501a1443eceacc0d2e3476b92008e9b8 Mon Sep 17 00:00:00 2001 From: Anthony Underwood Date: Sat, 24 Apr 2021 13:22:54 +0100 Subject: [PATCH 60/86] Add Cambridge to README --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 7637725..61e7acc 100644 --- a/README.md +++ b/README.md @@ -100,6 +100,7 @@ Currently documentation is available for the following systems: * [BI](docs/bi.md) * [BINAC](docs/binac.md) * [BIOHPC_GEN](docs/biohpc_gen.md) +* [CAMBRIDGE](docs/cambridge.md) * [CBE](docs/cbe.md) * [CCGA_DX](docs/ccga_dx.md) * [CCGA_MED](docs/ccga_med.md) From 867e1aff61a86e7564bef64469b4042824dd7188 Mon Sep 17 00:00:00 2001 From: MaxUlysse Date: Mon, 26 Apr 2021 12:41:56 +0200 Subject: [PATCH 61/86] feat: remove social preview image to use GitHub OpenGraph --- assets/nf-core-configs_social_preview.png | Bin 58712 -> 0 bytes assets/nf-core-configs_social_preview.svg | 450 ---------------------- 2 files changed, 450 deletions(-) delete mode 100644 assets/nf-core-configs_social_preview.png delete mode 100644 assets/nf-core-configs_social_preview.svg diff --git a/assets/nf-core-configs_social_preview.png b/assets/nf-core-configs_social_preview.png deleted file mode 100644 index 20b5bc4fdb7b12c6f28e6f3c77339c7ce9ca8dbd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58712 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - Config files used to define parameters specific tocompute environments at different Institutions - configs - - - - - - - - - - - - - - - - - - - - - - - - - From 76b62b478d80161c0c5cc15861e9e93b9d0e60bd Mon Sep 17 00:00:00 2001 From: Phil Ewels Date: Thu, 29 Apr 2021 23:06:56 +0200 Subject: [PATCH 62/86] Fix hebbe withName regex --- conf/hebbe.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/hebbe.config b/conf/hebbe.config index 26296d5..58e1e24 100644 --- a/conf/hebbe.config +++ b/conf/hebbe.config @@ -14,7 +14,7 @@ process { clusterOptions = { "-A $params.project ${params.clusterOptions ?: ''}" } /* The Hebbe scheduler fails if you try to request an amount of memory for a job */ - withName: '*' { memory = null } + withName: '.*' { memory = null } } params { From a849fe991ce709212a705597050886a35e75770b Mon Sep 17 00:00:00 2001 From: "James A. Fellows Yates" Date: Tue, 4 May 2021 21:43:19 +0200 Subject: [PATCH 63/86] Add additional retry allowance for silly big data in markdups --- conf/pipeline/eager/shh.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/pipeline/eager/shh.config b/conf/pipeline/eager/shh.config index 5046df0..14bd00c 100644 --- a/conf/pipeline/eager/shh.config +++ b/conf/pipeline/eager/shh.config @@ -10,7 +10,7 @@ params { // Specific nf-core/eager process configuration process { - maxRetries = 2 + maxRetries = 3 withName: malt { maxRetries = 1 From 3bcd55966df5720f7fc9beef80ac282c62b2b359 Mon Sep 17 00:00:00 2001 From: "James A. Fellows Yates" Date: Wed, 5 May 2021 11:39:33 +0200 Subject: [PATCH 64/86] Update eva.config --- conf/pipeline/eager/eva.config | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/conf/pipeline/eager/eva.config b/conf/pipeline/eager/eva.config index fa7667d..0b7bbae 100644 --- a/conf/pipeline/eager/eva.config +++ b/conf/pipeline/eager/eva.config @@ -79,6 +79,10 @@ process { withName: markduplicates { clusterOptions = { "-S /bin/bash -l h_vmem=${(task.memory.toGiga() + 6)}G,virtual_free=${(task.memory.toGiga() + 6)}G" } } + + withName: library_merge { + clusterOptions = { "-S /bin/bash -l h_vmem=${(task.memory.toGiga() + 6)}G,virtual_free=${(task.memory.toGiga() + 6)}G" } + } withName: malt { clusterOptions = { "-S /bin/bash -l h_vmem=${(task.memory.toGiga() * 2)}G,virtual_free=${(task.memory.toGiga() * 2)}G" } From 73fcc4495a302c660ce6ebc10ff2a0df752313e9 Mon Sep 17 00:00:00 2001 From: MaxUlysse Date: Wed, 19 May 2021 20:46:52 +0200 Subject: [PATCH 65/86] feat: update owner of profile --- conf/munin.config | 15 +++++++++------ conf/pipeline/sarek/munin.config | 3 ++- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/conf/munin.config b/conf/munin.config index 09df9c8..5db483e 100644 --- a/conf/munin.config +++ b/conf/munin.config @@ -2,8 +2,8 @@ params { // Specific nf-core/configs params - config_profile_contact = 'Szilveszter Juhos (@szilvajuhos)' - config_profile_description = 'MUNIN profile provided by nf-core/configs.' + config_profile_contact = 'Maxime Garcia (@maxulysse)' + config_profile_description = 'MUNIN profile provided by nf-core/configs' config_profile_url = 'https://ki.se/forskning/barntumorbanken' // Local AWS iGenomes reference file paths on munin @@ -26,8 +26,11 @@ singularity { } // To use docker, use nextflow run -profile munin,docker -docker { - enabled = false - mountFlags = 'z' - fixOwnership = true +profiles { + docker { + docker { + enabled = false + mountFlags = 'z' + fixOwnership = true + } } diff --git a/conf/pipeline/sarek/munin.config b/conf/pipeline/sarek/munin.config index 039d117..7276a27 100644 --- a/conf/pipeline/sarek/munin.config +++ b/conf/pipeline/sarek/munin.config @@ -2,8 +2,9 @@ params { // Specific nf-core/configs params - config_profile_contact = 'Maxime Garcia (@MaxUlysse)' + config_profile_contact = 'Maxime Garcia (@maxulysse)' config_profile_description = 'nf-core/sarek MUNIN profile provided by nf-core/configs' + config_profile_url = 'https://ki.se/forskning/barntumorbanken' // Specific nf-core/sarek params annotation_cache = true From 8166e0f6068f8d6eda2f93a2623f17e2135ec096 Mon Sep 17 00:00:00 2001 From: Olga Botvinnik Date: Wed, 19 May 2021 13:36:15 -0700 Subject: [PATCH 66/86] executor.cli --> aws.batch.cliPath --- conf/czbiohub_aws.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/czbiohub_aws.config b/conf/czbiohub_aws.config index c4b0e7d..7132352 100644 --- a/conf/czbiohub_aws.config +++ b/conf/czbiohub_aws.config @@ -27,7 +27,7 @@ process { workDir = "s3://czb-nextflow/intermediates/" aws.region = 'us-west-2' -executor.awscli = '/home/ec2-user/miniconda/bin/aws' +aws.batch.cliPath = '/home/ec2-user/miniconda/bin/aws' params.tracedir = './' params { From 05548bdb75beaf1531212086fce90ecbe446a4f8 Mon Sep 17 00:00:00 2001 From: MaxUlysse Date: Thu, 20 May 2021 09:37:48 +0200 Subject: [PATCH 67/86] fix: forgotten } --- conf/munin.config | 1 + 1 file changed, 1 insertion(+) diff --git a/conf/munin.config b/conf/munin.config index 5db483e..3902e29 100644 --- a/conf/munin.config +++ b/conf/munin.config @@ -33,4 +33,5 @@ profiles { mountFlags = 'z' fixOwnership = true } + } } From f6578f727d1038c1f59209607b6fff5d4a67437f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=98yvind=20Almelid?= Date: Tue, 25 May 2021 09:54:08 +0100 Subject: [PATCH 68/86] Add TMPDIR and mount for it to singularity configuration --- conf/eddie.config | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/conf/eddie.config b/conf/eddie.config index 70e0dcc..7f7e2e2 100644 --- a/conf/eddie.config +++ b/conf/eddie.config @@ -31,7 +31,7 @@ process { params { saveReference = true // iGenomes reference base - igenomes_base = '/exports/igmm/eddie/NextGenResources/igenomes' + igenomes_base = '/exports/igmm/eddie/BioinformaticsResources/igenomes' max_memory = 384.GB max_cpus = 32 max_time = 240.h @@ -42,8 +42,8 @@ env { } singularity { - envWhitelist = "SINGULARITY_TMPDIR" - runOptions = '-p' + envWhitelist = "SINGULARITY_TMPDIR,TMPDIR" + runOptions = '-p -B "$TMPDIR"' enabled = true autoMounts = true } From 31d46cb0a9fbdc990c644cbfad0788ee430ff28d Mon Sep 17 00:00:00 2001 From: "James A. Fellows Yates" Date: Fri, 4 Jun 2021 12:22:54 +0200 Subject: [PATCH 69/86] Make big_data go by default to medium via run time --- conf/pipeline/eager/shh.config | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/conf/pipeline/eager/shh.config b/conf/pipeline/eager/shh.config index 5046df0..da5d6cf 100644 --- a/conf/pipeline/eager/shh.config +++ b/conf/pipeline/eager/shh.config @@ -106,43 +106,43 @@ profiles { withLabel:'sc_tiny'{ cpus = { check_max( 1, 'cpus' ) } memory = { check_max( 2.GB * task.attempt, 'memory' ) } - time = { task.attempt == 3 ? 1440.h : task.attempt == 2 ? 48.h : 2.h } + time = { task.attempt == 3 ? 1440.h : 48.h } } withLabel:'sc_small'{ cpus = { check_max( 1, 'cpus' ) } memory = { check_max( 8.GB * task.attempt, 'memory' ) } - time = { task.attempt == 3 ? 1440.h : task.attempt == 2 ? 48.h : 2.h } + time = { task.attempt == 3 ? 1440.h : 48.h } } withLabel:'sc_medium'{ cpus = { check_max( 1, 'cpus' ) } memory = { check_max( 16.GB * task.attempt, 'memory' ) } - time = { task.attempt == 3 ? 1440.h : task.attempt == 2 ? 48.h : 2.h } + time = { task.attempt == 3 ? 1440.h : 48.h } } withLabel:'mc_small'{ cpus = { check_max( 2, 'cpus' ) } memory = { check_max( 8.GB * task.attempt, 'memory' ) } - time = { task.attempt == 3 ? 1440.h : task.attempt == 2 ? 48.h : 2.h } + time = { task.attempt == 3 ? 1440.h : 48.h } } withLabel:'mc_medium' { cpus = { check_max( 4, 'cpus' ) } memory = { check_max( 16.GB * task.attempt, 'memory' ) } - time = { task.attempt == 3 ? 1440.h : task.attempt == 2 ? 48.h : 2.h } + time = { task.attempt == 3 ? 1440.h : 48.h } } withLabel:'mc_large'{ cpus = { check_max( 8, 'cpus' ) } memory = { check_max( 32.GB * task.attempt, 'memory' ) } - time = { task.attempt == 3 ? 1440.h : task.attempt == 2 ? 48.h : 2.h } + time = { task.attempt == 3 ? 1440.h : 48.h } } withLabel:'mc_huge'{ cpus = { check_max( 32, 'cpus' ) } memory = { check_max( 512.GB * task.attempt, 'memory' ) } - time = { task.attempt == 3 ? 1440.h : task.attempt == 2 ? 48.h : 2.h } + time = { task.attempt == 3 ? 1440.h : 48.h } } } } From fc8b1162c1df01a5f75f97aea51e697b142a9ad9 Mon Sep 17 00:00:00 2001 From: "James A. Fellows Yates" Date: Mon, 7 Jun 2021 10:48:35 +0200 Subject: [PATCH 70/86] Fix HOPS huamn ref path --- conf/pipeline/eager/shh.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/pipeline/eager/shh.config b/conf/pipeline/eager/shh.config index 5046df0..9388ad0 100644 --- a/conf/pipeline/eager/shh.config +++ b/conf/pipeline/eager/shh.config @@ -164,7 +164,7 @@ profiles { params { config_profile_description = 'Rough HOPS screening MPI-SHH profile, provided by nf-core/configs.' fasta = '/projects1/Reference_Genomes/Human/HG19/hg19_complete.fasta' - bwa_index = '/projects1/Reference_Genomes/Human/HG19/hg19_complete.fasta' + bwa_index = '/projects1/Reference_Genomes/Human/HG19/' fasta_index = '/projects1/Reference_Genomes/Human/HG19/hg19_complete.fasta.fai' seq_dict = '/projects1/Reference_Genomes/Human/HG19/hg19_complete.dict' bwaalnn = 0.01 From f196de824618747e243565f15559f43d4b414cef Mon Sep 17 00:00:00 2001 From: mseybold Date: Thu, 10 Jun 2021 12:34:58 +0200 Subject: [PATCH 71/86] Update cfc.config singularity is now installed natively on the nodes, so no more need for a module here --- conf/cfc.config | 1 - 1 file changed, 1 deletion(-) diff --git a/conf/cfc.config b/conf/cfc.config index ffe0395..1948e14 100644 --- a/conf/cfc.config +++ b/conf/cfc.config @@ -11,7 +11,6 @@ singularity { } process { - beforeScript = 'module load devel/singularity/3.4.2' executor = 'slurm' queue = { task.memory > 60.GB || task.cpus > 20 ? 'qbic' : 'compute' } scratch = 'true' From c3385593cbafc9d3e3e2b29d8669428ccdb090a2 Mon Sep 17 00:00:00 2001 From: ggabernet Date: Fri, 11 Jun 2021 14:59:09 +0200 Subject: [PATCH 72/86] revert cfc config --- conf/cfc.config | 1 + 1 file changed, 1 insertion(+) diff --git a/conf/cfc.config b/conf/cfc.config index 1948e14..15d4a47 100644 --- a/conf/cfc.config +++ b/conf/cfc.config @@ -12,6 +12,7 @@ singularity { process { executor = 'slurm' + beforeScript = 'module load devel/singularity/3.4.2' queue = { task.memory > 60.GB || task.cpus > 20 ? 'qbic' : 'compute' } scratch = 'true' } From 2b58a62a9b057b2c0f23a57d5f660da23e234e77 Mon Sep 17 00:00:00 2001 From: Edmund Miller Date: Fri, 11 Jun 2021 14:50:58 -0500 Subject: [PATCH 73/86] feat(utd): Add initial sysbio config --- conf/utd_sysbio.config | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 conf/utd_sysbio.config diff --git a/conf/utd_sysbio.config b/conf/utd_sysbio.config new file mode 100644 index 0000000..654ac09 --- /dev/null +++ b/conf/utd_sysbio.config @@ -0,0 +1,38 @@ +//Profile config names for nf-core/configs +params { + config_profile_description = 'University of Texas at Dallas HPC cluster profile provided by nf-core/configs' + config_profile_contact = 'Edmund Miller(@emiller88)' + config_profile_url = 'http://docs.oithpc.utdallas.edu/' + singularity_cache_dir = '/scratch/applied-genomics/singularity' +} + +env { + TMPDIR = '/home/$USER/scratch/tmp' +} + +singularity { + enabled = true + envWhitelist='SINGULARITY_BINDPATH' + autoMounts = true + cacheDir = params.singularity_cache_dir +} + +process { + beforeScript = 'module load singularity/3.4.1' + executor = 'slurm' + queue = { task.memory >= 30.GB && task.cpu <= 16 ? 'normal': 'smallmem' } + + + withLabel:process_high { + cpus = { check_max( 16 * task.attempt, 'cpus' ) } + memory = { check_max( 62.GB * task.attempt, 'memory' ) } + time = { check_max( 16.h * task.attempt, 'time' ) } + } +} + +params { + igenomes_base = '/scratch/applied-genomics/references/iGenomes/references/' + max_memory = 90.GB + max_cpus = 16 + max_time = 96.h +} \ No newline at end of file From 04d0b27e816ed144447906e8be7d76422f5800d2 Mon Sep 17 00:00:00 2001 From: Edmund Miller Date: Wed, 16 Jun 2021 21:17:40 -0500 Subject: [PATCH 74/86] fix(sysbio): Reduce memory on high processes --- conf/utd_sysbio.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/utd_sysbio.config b/conf/utd_sysbio.config index 654ac09..a6d6ae0 100644 --- a/conf/utd_sysbio.config +++ b/conf/utd_sysbio.config @@ -25,7 +25,7 @@ process { withLabel:process_high { cpus = { check_max( 16 * task.attempt, 'cpus' ) } - memory = { check_max( 62.GB * task.attempt, 'memory' ) } + memory = { check_max( 60.GB * task.attempt, 'memory' ) } time = { check_max( 16.h * task.attempt, 'time' ) } } } From b11f137901bef7db3529980798e14f9456e07b4e Mon Sep 17 00:00:00 2001 From: Edmund Miller Date: Wed, 16 Jun 2021 21:18:28 -0500 Subject: [PATCH 75/86] fix(sysbio): Leave igenomes unfinished --- conf/utd_sysbio.config | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/conf/utd_sysbio.config b/conf/utd_sysbio.config index a6d6ae0..41c9318 100644 --- a/conf/utd_sysbio.config +++ b/conf/utd_sysbio.config @@ -31,7 +31,8 @@ process { } params { - igenomes_base = '/scratch/applied-genomics/references/iGenomes/references/' + // TODO Need to initialize this + // igenomes_base = '/scratch/applied-genomics/references/iGenomes/references/' max_memory = 90.GB max_cpus = 16 max_time = 96.h From 472082254a04f3916a442b10fe1ab401fd3049cc Mon Sep 17 00:00:00 2001 From: Edmund Miller Date: Wed, 16 Jun 2021 21:18:48 -0500 Subject: [PATCH 76/86] fix(sysbio): Add Star resources --- conf/utd_sysbio.config | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/conf/utd_sysbio.config b/conf/utd_sysbio.config index 41c9318..bd0eda8 100644 --- a/conf/utd_sysbio.config +++ b/conf/utd_sysbio.config @@ -23,6 +23,10 @@ process { queue = { task.memory >= 30.GB && task.cpu <= 16 ? 'normal': 'smallmem' } + withName:STAR_ALIGN { + memory = 36.GB + } + withLabel:process_high { cpus = { check_max( 16 * task.attempt, 'cpus' ) } memory = { check_max( 60.GB * task.attempt, 'memory' ) } From 2a958f5ce3d5a26a3a2cd583a463a020f072b29c Mon Sep 17 00:00:00 2001 From: Edmund Miller Date: Wed, 16 Jun 2021 21:19:38 -0500 Subject: [PATCH 77/86] docs: Add sysbio --- README.md | 1 + docs/utd_sysbio.config | 18 ++++++++++++++++++ nfcore_custom.config | 2 ++ 3 files changed, 21 insertions(+) create mode 100644 docs/utd_sysbio.config diff --git a/README.md b/README.md index 6daff2a..c272420 100644 --- a/README.md +++ b/README.md @@ -130,6 +130,7 @@ Currently documentation is available for the following systems: * [UCT_HPC](docs/uct_hpc.md) * [UPPMAX](docs/uppmax.md) * [UTD_GANYMEDE](docs/utd_ganymede.md) +* [UTD_SYSBIO](docs/utd_sysbio.md) * [UZH](docs/uzh.md) ### Uploading to `nf-core/configs` diff --git a/docs/utd_sysbio.config b/docs/utd_sysbio.config new file mode 100644 index 0000000..ff00de9 --- /dev/null +++ b/docs/utd_sysbio.config @@ -0,0 +1,18 @@ +# nf-core/configs: UTD Sysbio Configuration + +All nf-core pipelines have been successfully configured for use on the Sysbio HPC cluster at the [The Univeristy of Texas at Dallas](https://www.utdallas.edu/). + +To use, run the pipeline with `-profile utd_sysbio`. This will download and launch the [`utd_sysbio.config`](../conf/utd_sysbio.config) which has been pre-configured with a setup suitable for the Sysbio HPC cluster. Using this profile, a docker image containing all of the required software will be downloaded, and converted to a Singularity image before execution of the pipeline. + +Before running the pipeline you will need to load Singularity using the environment module system on Sysbio. You can do this by issuing the commands below: + +```bash +## Singularity environment modules +module purge +module load singularity +``` + +All of the intermediate files required to run the pipeline will be stored in the `work/` directory. It is recommended to delete this directory after the pipeline has finished successfully because it can get quite large, and all of the main output files will be saved in the `results/` directory anyway. + +>NB: You will need an account to use the HPC cluster on Sysbio in order to run the pipeline. If in doubt contact OIT. +>NB: Nextflow will need to submit the jobs via SLURM to the HPC cluster and as such the commands above will have to be executed on one of the login nodes. If in doubt contact OIT. diff --git a/nfcore_custom.config b/nfcore_custom.config index 9b4fbda..dbb4638 100644 --- a/nfcore_custom.config +++ b/nfcore_custom.config @@ -49,6 +49,7 @@ profiles { uct_hpc { includeConfig "${params.custom_config_base}/conf/uct_hpc.config" } uppmax { includeConfig "${params.custom_config_base}/conf/uppmax.config" } utd_ganymede { includeConfig "${params.custom_config_base}/conf/utd_ganymede.config" } + utd_sysbio { includeConfig "${params.custom_config_base}/conf/utd_sysbio.config" } uzh { includeConfig "${params.custom_config_base}/conf/uzh.config" } jax { includeConfig "${params.custom_config_base}/conf/jax.config" } } @@ -70,5 +71,6 @@ params { genouest: ['.genouest.org'], uppmax: ['.uppmax.uu.se'], utd_ganymede: ['ganymede.utdallas.edu'] + utd_sysbio: ['sysbio.utdallas.edu'] ] } From 7ff1c6cc7d2494cfa5ecd7a79640fb625453c1f9 Mon Sep 17 00:00:00 2001 From: Edmund Miller Date: Wed, 16 Jun 2021 21:19:49 -0500 Subject: [PATCH 78/86] ci: Add sysbio --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 65cabe5..92bfce8 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -16,7 +16,7 @@ jobs: needs: test_all_profiles strategy: matrix: - profile: ['abims', 'awsbatch', 'bi','bigpurple', 'binac', 'biohpc_gen', 'cbe', 'ccga_dx', 'ccga_med', 'cfc', 'cfc_dev', 'crick', 'denbi_qbic', 'ebc', 'eddie', 'eva', 'genotoul', 'genouest', 'gis', 'google', 'hebbe', 'icr_davros', 'ifb_core', 'imperial', 'imperial_mb', 'jax', 'kraken', 'mpcdf', 'munin', 'oist', 'pasteur', 'phoenix', 'prince', 'sanger', 'seg_globe', 'shh', 'uct_hpc', 'uppmax', 'utd_ganymede', 'uzh'] + profile: ['abims', 'awsbatch', 'bi','bigpurple', 'binac', 'biohpc_gen', 'cbe', 'ccga_dx', 'ccga_med', 'cfc', 'cfc_dev', 'crick', 'denbi_qbic', 'ebc', 'eddie', 'eva', 'genotoul', 'genouest', 'gis', 'google', 'hebbe', 'icr_davros', 'ifb_core', 'imperial', 'imperial_mb', 'jax', 'kraken', 'mpcdf', 'munin', 'oist', 'pasteur', 'phoenix', 'prince', 'sanger', 'seg_globe', 'shh', 'uct_hpc', 'uppmax', 'utd_ganymede', 'utd_sysbio' 'uzh'] steps: - uses: actions/checkout@v1 - name: Install Nextflow From 14a2106c63c975eb8798525ed79593f714d00c7a Mon Sep 17 00:00:00 2001 From: Edmund Miller Date: Thu, 17 Jun 2021 08:06:24 -0500 Subject: [PATCH 79/86] fix(sysbio): Move rnaseq specific things to pipeline config --- conf/pipeline/rnaseq/utd_sysbio.config | 13 +++++++++++++ conf/utd_sysbio.config | 11 ----------- 2 files changed, 13 insertions(+), 11 deletions(-) create mode 100644 conf/pipeline/rnaseq/utd_sysbio.config diff --git a/conf/pipeline/rnaseq/utd_sysbio.config b/conf/pipeline/rnaseq/utd_sysbio.config new file mode 100644 index 0000000..1af5ed1 --- /dev/null +++ b/conf/pipeline/rnaseq/utd_sysbio.config @@ -0,0 +1,13 @@ +process { + + withName : "STAR_ALIGN" { + memory = 36.GB + } + + withLabel:process_high { + cpus = { check_max( 16 * task.attempt, 'cpus' ) } + memory = { check_max( 60.GB * task.attempt, 'memory' ) } + time = { check_max( 16.h * task.attempt, 'time' ) } + } + +} diff --git a/conf/utd_sysbio.config b/conf/utd_sysbio.config index bd0eda8..5d02901 100644 --- a/conf/utd_sysbio.config +++ b/conf/utd_sysbio.config @@ -21,17 +21,6 @@ process { beforeScript = 'module load singularity/3.4.1' executor = 'slurm' queue = { task.memory >= 30.GB && task.cpu <= 16 ? 'normal': 'smallmem' } - - - withName:STAR_ALIGN { - memory = 36.GB - } - - withLabel:process_high { - cpus = { check_max( 16 * task.attempt, 'cpus' ) } - memory = { check_max( 60.GB * task.attempt, 'memory' ) } - time = { check_max( 16.h * task.attempt, 'time' ) } - } } params { From 87c8e346e07352070e3e2b644a2bb80256244a23 Mon Sep 17 00:00:00 2001 From: Edmund Miller Date: Thu, 17 Jun 2021 08:13:29 -0500 Subject: [PATCH 80/86] fix(sysbio): Change filetype --- docs/{utd_sysbio.config => utd_sysbio.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename docs/{utd_sysbio.config => utd_sysbio.md} (100%) diff --git a/docs/utd_sysbio.config b/docs/utd_sysbio.md similarity index 100% rename from docs/utd_sysbio.config rename to docs/utd_sysbio.md From 41ae99d34a81c364ebede9ea6b951fb52c551419 Mon Sep 17 00:00:00 2001 From: Edmund Miller Date: Thu, 17 Jun 2021 08:17:18 -0500 Subject: [PATCH 81/86] feat(sysbio): Add cleanup --- conf/utd_sysbio.config | 3 +++ docs/utd_sysbio.md | 2 -- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/conf/utd_sysbio.config b/conf/utd_sysbio.config index 5d02901..28460a8 100644 --- a/conf/utd_sysbio.config +++ b/conf/utd_sysbio.config @@ -23,6 +23,9 @@ process { queue = { task.memory >= 30.GB && task.cpu <= 16 ? 'normal': 'smallmem' } } +// Preform work directory cleanup after a successful run +cleanup = true + params { // TODO Need to initialize this // igenomes_base = '/scratch/applied-genomics/references/iGenomes/references/' diff --git a/docs/utd_sysbio.md b/docs/utd_sysbio.md index ff00de9..3ae617a 100644 --- a/docs/utd_sysbio.md +++ b/docs/utd_sysbio.md @@ -12,7 +12,5 @@ module purge module load singularity ``` -All of the intermediate files required to run the pipeline will be stored in the `work/` directory. It is recommended to delete this directory after the pipeline has finished successfully because it can get quite large, and all of the main output files will be saved in the `results/` directory anyway. - >NB: You will need an account to use the HPC cluster on Sysbio in order to run the pipeline. If in doubt contact OIT. >NB: Nextflow will need to submit the jobs via SLURM to the HPC cluster and as such the commands above will have to be executed on one of the login nodes. If in doubt contact OIT. From e35c5fd1d87d1b004650db4c1c6194215e48c22f Mon Sep 17 00:00:00 2001 From: Edmund Miller Date: Thu, 17 Jun 2021 08:32:31 -0500 Subject: [PATCH 82/86] fix(sysbio): Add nf-core params --- conf/pipeline/rnaseq/utd_sysbio.config | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/conf/pipeline/rnaseq/utd_sysbio.config b/conf/pipeline/rnaseq/utd_sysbio.config index 1af5ed1..5e4c492 100644 --- a/conf/pipeline/rnaseq/utd_sysbio.config +++ b/conf/pipeline/rnaseq/utd_sysbio.config @@ -1,3 +1,10 @@ +params { + config_profile_description = 'University of Texas at Dallas HPC cluster profile provided by nf-core/configs' + config_profile_contact = 'Edmund Miller(@emiller88)' + config_profile_url = 'http://docs.oithpc.utdallas.edu/' + singularity_cache_dir = '/scratch/applied-genomics/singularity' +} + process { withName : "STAR_ALIGN" { From 21e1037e0c61a376edfe0e8f2778808b89fa6be2 Mon Sep 17 00:00:00 2001 From: Edmund Miller Date: Thu, 17 Jun 2021 08:36:24 -0500 Subject: [PATCH 83/86] docs(sysbio): Add rnaseq specific docs --- conf/pipeline/rnaseq/utd_sysbio.config | 1 - docs/pipeline/rnaseq/utd_sysbio.md | 23 +++++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 docs/pipeline/rnaseq/utd_sysbio.md diff --git a/conf/pipeline/rnaseq/utd_sysbio.config b/conf/pipeline/rnaseq/utd_sysbio.config index 5e4c492..0c9dd7d 100644 --- a/conf/pipeline/rnaseq/utd_sysbio.config +++ b/conf/pipeline/rnaseq/utd_sysbio.config @@ -2,7 +2,6 @@ params { config_profile_description = 'University of Texas at Dallas HPC cluster profile provided by nf-core/configs' config_profile_contact = 'Edmund Miller(@emiller88)' config_profile_url = 'http://docs.oithpc.utdallas.edu/' - singularity_cache_dir = '/scratch/applied-genomics/singularity' } process { diff --git a/docs/pipeline/rnaseq/utd_sysbio.md b/docs/pipeline/rnaseq/utd_sysbio.md new file mode 100644 index 0000000..ff228d5 --- /dev/null +++ b/docs/pipeline/rnaseq/utd_sysbio.md @@ -0,0 +1,23 @@ +# nf-core/configs: UTD sysbio rnaseq specific configuration + +Extra specific configuration for rnaseq pipeline + +## Usage + +To use, run the pipeline with `-profile sysbio`. + +This will download and launch the eager specific [`utd_sysbio.config`](../../../conf/pipeline/rnaseq/utd_sysbio.config) which has been pre-configured with a setup suitable for the shh cluster. + +Example: `nextflow run nf-core/rnaseq -profile sysbio` + +## rnaseq specific configurations for UTD sysbio + +Specific configurations for UTD Sysbio has been made for rnaseq. + +### General profiles + + + +### Contextual profiles + + From f9e4ec4a8d5ac96c349dacaa38bd47db611ca1fa Mon Sep 17 00:00:00 2001 From: Edmund Miller Date: Thu, 17 Jun 2021 08:50:25 -0500 Subject: [PATCH 84/86] fix(sysbio): Add sysbio to rnaseq --- pipeline/rnaseq.config | 1 + 1 file changed, 1 insertion(+) diff --git a/pipeline/rnaseq.config b/pipeline/rnaseq.config index 1a27463..17a4ca0 100644 --- a/pipeline/rnaseq.config +++ b/pipeline/rnaseq.config @@ -10,4 +10,5 @@ profiles { eddie { includeConfig "${params.custom_config_base}/conf/pipeline/rnaseq/eddie.config" } + utd_sysbio { includeConfig "${params.custom_config_base}/conf/pipeline/rnaseq/utd_sysbio.config" } } From 5ad959a4361a13adeab3e65920a9d6fc930ad824 Mon Sep 17 00:00:00 2001 From: Edmund Miller Date: Thu, 17 Jun 2021 09:08:27 -0500 Subject: [PATCH 85/86] fix(sysbio): Missing comma --- nfcore_custom.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nfcore_custom.config b/nfcore_custom.config index dbb4638..75e8309 100644 --- a/nfcore_custom.config +++ b/nfcore_custom.config @@ -70,7 +70,7 @@ params { genotoul: ['.genologin1.toulouse.inra.fr', '.genologin2.toulouse.inra.fr'], genouest: ['.genouest.org'], uppmax: ['.uppmax.uu.se'], - utd_ganymede: ['ganymede.utdallas.edu'] + utd_ganymede: ['ganymede.utdallas.edu'], utd_sysbio: ['sysbio.utdallas.edu'] ] } From cb213a499cfc3044e80f119121f7bcd2d010325a Mon Sep 17 00:00:00 2001 From: Edmund Miller Date: Thu, 17 Jun 2021 09:34:03 -0500 Subject: [PATCH 86/86] ci: Another missing comma --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 92bfce8..5dac8ac 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -16,7 +16,7 @@ jobs: needs: test_all_profiles strategy: matrix: - profile: ['abims', 'awsbatch', 'bi','bigpurple', 'binac', 'biohpc_gen', 'cbe', 'ccga_dx', 'ccga_med', 'cfc', 'cfc_dev', 'crick', 'denbi_qbic', 'ebc', 'eddie', 'eva', 'genotoul', 'genouest', 'gis', 'google', 'hebbe', 'icr_davros', 'ifb_core', 'imperial', 'imperial_mb', 'jax', 'kraken', 'mpcdf', 'munin', 'oist', 'pasteur', 'phoenix', 'prince', 'sanger', 'seg_globe', 'shh', 'uct_hpc', 'uppmax', 'utd_ganymede', 'utd_sysbio' 'uzh'] + profile: ['abims', 'awsbatch', 'bi','bigpurple', 'binac', 'biohpc_gen', 'cbe', 'ccga_dx', 'ccga_med', 'cfc', 'cfc_dev', 'crick', 'denbi_qbic', 'ebc', 'eddie', 'eva', 'genotoul', 'genouest', 'gis', 'google', 'hebbe', 'icr_davros', 'ifb_core', 'imperial', 'imperial_mb', 'jax', 'kraken', 'mpcdf', 'munin', 'oist', 'pasteur', 'phoenix', 'prince', 'sanger', 'seg_globe', 'shh', 'uct_hpc', 'uppmax', 'utd_ganymede', 'utd_sysbio', 'uzh'] steps: - uses: actions/checkout@v1 - name: Install Nextflow