From 7346bffdc81c6ab1d1807d7cabc689d048dcd416 Mon Sep 17 00:00:00 2001 From: Daniel Straub <42973691+d4straub@users.noreply.github.com> Date: Tue, 28 Jan 2020 08:48:34 +0100 Subject: [PATCH 01/16] Update binac.config Processes that ask for 128 Gb are queuing forever when on short queue, but executed when send to smp queue. --- conf/binac.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/binac.config b/conf/binac.config index 8c3d493..62a07c6 100644 --- a/conf/binac.config +++ b/conf/binac.config @@ -14,7 +14,7 @@ process { beforeScript = 'module load devel/singularity/3.4.2' executor = 'pbs' queue = 'short' - process.queue = { task.memory > 128.GB ? 'smp': task.time <= 20.m ? 'tiny' : task.time <= 48.h ? 'short' : task.time <= 168.h ? 'short' : 'long'} + process.queue = { task.memory >= 128.GB ? 'smp': task.time <= 20.m ? 'tiny' : task.time <= 48.h ? 'short' : task.time <= 168.h ? 'short' : 'long'} } params { From b7be65a31ef5ad511d5d29478e5430059428e096 Mon Sep 17 00:00:00 2001 From: Daniel Straub <42973691+d4straub@users.noreply.github.com> Date: Fri, 7 Feb 2020 14:53:43 +0100 Subject: [PATCH 02/16] Cleanup config --- conf/binac.config | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/conf/binac.config b/conf/binac.config index 62a07c6..21f2459 100644 --- a/conf/binac.config +++ b/conf/binac.config @@ -13,8 +13,7 @@ singularity { process { beforeScript = 'module load devel/singularity/3.4.2' executor = 'pbs' - queue = 'short' - process.queue = { task.memory >= 128.GB ? 'smp': task.time <= 20.m ? 'tiny' : task.time <= 48.h ? 'short' : task.time <= 168.h ? 'short' : 'long'} + queue = { task.memory >= 128.GB ? 'smp': task.time <= 20.m ? 'tiny' : task.time <= 48.h ? 'short' : task.time <= 168.h ? 'short' : 'long'} } params { From 0830203b705f21e0998219255a3a9fc37162dd6a Mon Sep 17 00:00:00 2001 From: marchoeppner Date: Fri, 7 Feb 2020 11:09:22 +0100 Subject: [PATCH 03/16] Adding new CCGA Med Cluster to profiles Updating README and fixing linting errors in CCGA_MED profile Fixing order in profile queue and removed leading slash from readme for ccga profile docs Fixing order in profile queue and removed leading slash from readme for ccga profile docs --- .github/workflows/main.yml | 2 +- README.md | 11 +++++++++-- conf/ccga_med.config | 39 ++++++++++++++++++++++++++++++++++++++ docs/ccga_med.md | 16 ++++++++++++++++ nfcore_custom.config | 1 + 5 files changed, 66 insertions(+), 3 deletions(-) create mode 100644 conf/ccga_med.config create mode 100644 docs/ccga_med.md diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 43c15cf..5fb2601 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -16,7 +16,7 @@ jobs: needs: test_all_profiles strategy: matrix: - profile: ['awsbatch', 'bigpurple', 'binac', 'cbe', 'ccga_dx', 'ccga', 'cfc', 'crick', 'denbi_qbic', 'genotoul', 'genouest', 'gis', 'hebbe', 'kraken', 'munin', 'pasteur', 'phoenix', 'prince', 'shh', 'uct_hex', 'uppmax', 'uzh'] + profile: ['awsbatch', 'bigpurple', 'binac', 'cbe', 'ccga_dx', 'ccga_med', 'ccga', 'cfc', 'crick', 'denbi_qbic', 'genotoul', 'genouest', 'gis', 'hebbe', 'kraken', 'munin', 'pasteur', 'phoenix', 'prince', 'shh', 'uct_hex', 'uppmax', 'uzh'] steps: - uses: actions/checkout@v1 - name: Install Nextflow diff --git a/README.md b/README.md index 7f2665e..19d40f6 100644 --- a/README.md +++ b/README.md @@ -99,7 +99,8 @@ Currently documentation is available for the following systems: * [BINAC](docs/binac.md) * [CBE](docs/cbe.md) * [CCGA](docs/ccga.md) -* [CCGA_DX](/docs/ccga_dx.md) +* [CCGA_DX](docs/ccga_dx.md) +* [CCGA_MED](docs/ccga_med.md) * [CFC](docs/binac.md) * [CRICK](docs/crick.md) * [CZBIOHUB_AWS](docs/czbiohub.md) @@ -126,7 +127,13 @@ Within the local clone of your fork add the custom config file to the [`conf/`]( You will also need to edit and add your custom profile to the [`nfcore_custom.config`](https://github.com/nf-core/configs/blob/master/nfcore_custom.config) file in the top-level directory of the clone. You will also need to edit and add your custom profile to the [`README.md`](https://github.com/nf-core/configs/blob/master/README.md) file in the top-level directory of the clone. -Afterwards, make sure to edit the `.github/main.yml` file and add your profile name to the alphabetically sorted `profile:` scope. This way, it will be tested automatically using GitHub Actions. If you forget to do this, tests will fail and complain about that. +In order to ensure that the config file is tested automatically with GitHub Actions please add your profile name to the `profile:` scope in [`.github/workflows/main.yml`](.github/workflows/main.yml). If you forget to do this the tests will fail with the error: +```bash +Run python ${GITHUB_WORKSPACE}/bin/cchecker.py ${GITHUB_WORKSPACE}/nfcore_custom.config ${GITHUB_WORKSPACE}/.github/workflows/main.yml +Tests don't seem to test these profiles properly. Please check whether you added the profile to the Github Actions testing YAML. +set(['']) +##[error]Process completed with exit code 1. +``` Commit and push these changes to your local clone on GitHub, and then [create a pull request](https://help.github.com/articles/creating-a-pull-request-from-a-fork/) on the `nf-core/configs` GitHub repo with the appropriate information. diff --git a/conf/ccga_med.config b/conf/ccga_med.config new file mode 100644 index 0000000..d55fde2 --- /dev/null +++ b/conf/ccga_med.config @@ -0,0 +1,39 @@ +//Profile config names for nf-core/configs +params { + config_profile_description = 'CCGA Med cluster profile provided by nf-core/configs.' + config_profile_contact = 'Marc Hoeppner (@marchoeppner)' + config_profile_url = 'https://www.ccga.uni-kiel.de/' +} + +/* + * ------------------------------------------------- + * Nextflow config file for CCGA cluster in Kiel + * ------------------------------------------------- + */ + +singularity { + enabled = true + runOptions = "-B /work_ifs -B /scratch" + cacheDir = "/work_ifs/ikmb_repository/singularity_cache/" +} + +executor { + queueSize=100 +} + +process { + + // Global process config + executor = 'slurm' + queue = 'all' + +} + +params { + // illumina iGenomes reference file paths on RZCluster + igenomes_base = '/work_ifs/ikmb_repository/references/iGenomes/references/' + saveReference = true + max_memory = 250.GB + max_cpus = 24 + max_time = 120.h +} diff --git a/docs/ccga_med.md b/docs/ccga_med.md new file mode 100644 index 0000000..9aa4236 --- /dev/null +++ b/docs/ccga_med.md @@ -0,0 +1,16 @@ +# nf-core/configs: CCGA Med Cluster Configuration + +Deployment and testing of nf-core pipelines at the CCGA Med cluster is on-going. + +To use, run the pipeline with `-profile ccga_med`. This will download and launch the [`ccga_med.config`](../conf/ccga_med.config) which has been pre-configured with a setup suitable for the CCGA 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 Nextflow and Singularity using the environment module system on the cluster. You can do this by issuing the commands below: + +```bash +## Load Nextflow and Singularity environment modules +module purge +module load nextflow +module load singularity +``` + +>NB: Access to the CCGA Med cluster is restricted to IKMB/CCGA employees. Please talk to Marc Hoeppner to get access (@marchoeppner). diff --git a/nfcore_custom.config b/nfcore_custom.config index 404d11e..8b4a3a9 100644 --- a/nfcore_custom.config +++ b/nfcore_custom.config @@ -19,6 +19,7 @@ profiles { cbe { includeConfig "${params.custom_config_base}/conf/cbe.config" } ccga { includeConfig "${params.custom_config_base}/conf/ccga.config" } ccga_dx { includeConfig "${params.custom_config_base}/conf/ccga_dx.config" } + ccga_med { includeConfig "${params.custom_config_base}/conf/ccga_med.config" } cfc { includeConfig "${params.custom_config_base}/conf/cfc.config" } crick { includeConfig "${params.custom_config_base}/conf/crick.config" } czbiohub_aws { includeConfig "${params.custom_config_base}/conf/czbiohub_aws.config" } From ef8534d481a569ac55283faf6b1baf515d6feb66 Mon Sep 17 00:00:00 2001 From: Harshil Patel Date: Tue, 11 Feb 2020 11:57:04 +0000 Subject: [PATCH 04/16] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 19d40f6..3011a00 100644 --- a/README.md +++ b/README.md @@ -128,6 +128,7 @@ You will also need to edit and add your custom profile to the [`nfcore_custom.co You will also need to edit and add your custom profile to the [`README.md`](https://github.com/nf-core/configs/blob/master/README.md) file in the top-level directory of the clone. In order to ensure that the config file is tested automatically with GitHub Actions please add your profile name to the `profile:` scope in [`.github/workflows/main.yml`](.github/workflows/main.yml). If you forget to do this the tests will fail with the error: + ```bash Run python ${GITHUB_WORKSPACE}/bin/cchecker.py ${GITHUB_WORKSPACE}/nfcore_custom.config ${GITHUB_WORKSPACE}/.github/workflows/main.yml Tests don't seem to test these profiles properly. Please check whether you added the profile to the Github Actions testing YAML. From f16c7408637f1f4ef061ea31db0bf513cd50b945 Mon Sep 17 00:00:00 2001 From: MaxUlysse Date: Tue, 11 Feb 2020 15:16:20 +0100 Subject: [PATCH 05/16] add social preview image --- assets/nf-core-configs_social_preview.png | Bin 0 -> 58712 bytes assets/nf-core-configs_social_preview.svg | 450 ++++++++++++++++++++++ 2 files changed, 450 insertions(+) create mode 100644 assets/nf-core-configs_social_preview.png create 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 new file mode 100644 index 0000000000000000000000000000000000000000..20b5bc4fdb7b12c6f28e6f3c77339c7ce9ca8dbd GIT binary patch literal 58712 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + Config files used to define parameters specific tocompute environments at different Institutions + configs + + + + + + + + + + + + + + + + + + + + + + + + + From 744db30da4a5d9a96229fbf26a7c6b749a2dc4b0 Mon Sep 17 00:00:00 2001 From: Daniel Straub <42973691+d4straub@users.noreply.github.com> Date: Wed, 19 Feb 2020 11:27:02 +0100 Subject: [PATCH 06/16] Update binac.config This is now close to optimal I think. --- conf/binac.config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/binac.config b/conf/binac.config index 21f2459..d3624df 100644 --- a/conf/binac.config +++ b/conf/binac.config @@ -13,14 +13,14 @@ singularity { process { beforeScript = 'module load devel/singularity/3.4.2' executor = 'pbs' - queue = { task.memory >= 128.GB ? 'smp': task.time <= 20.m ? 'tiny' : task.time <= 48.h ? 'short' : task.time <= 168.h ? 'short' : 'long'} + queue = { task.memory >= 128.GB ? 'smp': task.time <= 20.m ? 'tiny' : task.time > 48.h ? 'long' : 'short'} } params { igenomes_base = '/nfsmounts/igenomes' max_memory = 1000.GB max_cpus = 28 - max_time = 48.h + max_time = 168.h } weblog{ From aa905cd645f22ddfab1cb3a12afa3d3f1e9a7e5e Mon Sep 17 00:00:00 2001 From: MaxUlysse Date: Thu, 20 Feb 2020 17:14:18 +0100 Subject: [PATCH 07/16] add UPPMAX specific sarek config --- README.md | 98 +++++++++++++++---------------- conf/pipeline/sarek/uppmax.config | 17 ++++++ docs/pipeline/sarek/uppmax.md | 18 ++++++ pipeline/sarek.config | 1 + 4 files changed, 85 insertions(+), 49 deletions(-) create mode 100644 conf/pipeline/sarek/uppmax.config create mode 100644 docs/pipeline/sarek/uppmax.md diff --git a/README.md b/README.md index 7f2665e..8e1bbfd 100644 --- a/README.md +++ b/README.md @@ -4,22 +4,21 @@ A repository for hosting Nextflow configuration files containing custom parameters required to run nf-core pipelines at different Institutions. -## Table of contents +## Table of contents -* [Table of contents](#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 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 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 @@ -94,30 +93,30 @@ See [`nf-core/configs/docs`](https://github.com/nf-core/configs/tree/master/docs Currently documentation is available for the following systems: -* [AWSBATCH](docs/awsbatch.md) -* [BIGPURPLE](docs/bigpurple.md) -* [BINAC](docs/binac.md) -* [CBE](docs/cbe.md) -* [CCGA](docs/ccga.md) -* [CCGA_DX](/docs/ccga_dx.md) -* [CFC](docs/binac.md) -* [CRICK](docs/crick.md) -* [CZBIOHUB_AWS](docs/czbiohub.md) -* [CZBIOHUB_AWS_HIGHPRIORITY](docs/czbiohub.md) -* [DENBI_QBIC](docs/denbi_qbic.md) -* [GENOTOUL](docs/genotoul.md) -* [GENOUEST](docs/genouest.md) -* [GIS](docs/gis.md) -* [HEBBE](docs/hebbe.md) -* [KRAKEN](docs/kraken.md) -* [MUNIN](docs/munin.md) -* [PASTEUR](docs/pasteur.md) -* [PHOENIX](docs/phoenix.md) -* [PRINCE](docs/prince.md) -* [SHH](docs/shh.md) -* [UCT_HEX](docs/uct_hex.md) -* [UPPMAX](docs/uppmax.md) -* [UZH](docs/uzh.md) +- [AWSBATCH](docs/awsbatch.md) +- [BIGPURPLE](docs/bigpurple.md) +- [BINAC](docs/binac.md) +- [CBE](docs/cbe.md) +- [CCGA](docs/ccga.md) +- [CCGA_DX](/docs/ccga_dx.md) +- [CFC](docs/binac.md) +- [CRICK](docs/crick.md) +- [CZBIOHUB_AWS](docs/czbiohub.md) +- [CZBIOHUB_AWS_HIGHPRIORITY](docs/czbiohub.md) +- [DENBI_QBIC](docs/denbi_qbic.md) +- [GENOTOUL](docs/genotoul.md) +- [GENOUEST](docs/genouest.md) +- [GIS](docs/gis.md) +- [HEBBE](docs/hebbe.md) +- [KRAKEN](docs/kraken.md) +- [MUNIN](docs/munin.md) +- [PASTEUR](docs/pasteur.md) +- [PHOENIX](docs/phoenix.md) +- [PRINCE](docs/prince.md) +- [SHH](docs/shh.md) +- [UCT_HEX](docs/uct_hex.md) +- [UPPMAX](docs/uppmax.md) +- [UZH](docs/uzh.md) ### Uploading to `nf-core/configs` @@ -154,12 +153,13 @@ Note that pipeline-specific configs are not required and should only be added if Currently documentation is available for the following pipeline within the specific profile: -* ampliseq - * [BINAC](docs/pipeline/ampliseq/binac.md) -* sarek - * [MUNIN](docs/pipeline/sarek/munin.md) -* eager - * [SHH](docs/pipeline/eager/shh.md) +- ampliseq + - [BINAC](docs/pipeline/ampliseq/binac.md) +- sarek + - [MUNIN](docs/pipeline/sarek/munin.md) + - [UPPMAX](docs/pipeline/sarek/uppmax.md) +- eager + - [SHH](docs/pipeline/eager/shh.md) ### Enabling pipeline-specific configs within a pipeline @@ -188,7 +188,7 @@ We will be notified automatically when you have created your pull request, and p [Fork](https://help.github.com/articles/fork-a-repo/) the [`nf-core/configs`](https://github.com/nf-core/configs/) repository to your own GitHub account. And add or edit the following files in the local clone of your fork. -* `pipeline/.config` +- `pipeline/.config` If not already created, create the `pipeline/.config` file, and add your custom profile to the profile scope @@ -198,18 +198,18 @@ profiles { } ``` -* `conf/pipeline//.config` +- `conf/pipeline//.config` Add the custom configuration file to the `conf/pipeline//` directory. Make sure to add an extra `params` section with `params.config_profile_description`, `params.config_profile_contact` to the top of `pipeline/.config` and set to reasonable values. Users will get information on who wrote the pipeline-specific configuration profile then when executing the nf-core pipeline and can report back if there are things missing for example. -* `docs/pipeline//.md` +- `docs/pipeline//.md` Add the documentation file to the `docs/pipeline//` directory. You will also need to edit and add your custom profile to the [`README.md`](https://github.com/nf-core/configs/blob/master/README.md) file in the top-level directory of the clone. -* `README.md` +- `README.md` Edit this file, and add the new pipeline-specific institutional profile to the list in the section Pipeline specific documentation diff --git a/conf/pipeline/sarek/uppmax.config b/conf/pipeline/sarek/uppmax.config new file mode 100644 index 0000000..4a1a9fa --- /dev/null +++ b/conf/pipeline/sarek/uppmax.config @@ -0,0 +1,17 @@ +// sarek/uppmax specific profile config + +params { + config_profile_contact = 'Maxime Garcia (@MaxUlysse)' + config_profile_description = 'nf-core/sarek uppmax profile provided by nf-core/configs' +} + +if (hostname ==~ "i.*") { + singularity { + cacheDir = "${params.containers_path}" + } +} + +params { + igenomeIgnore = true + genomes_base = params.genome == 'GRCh37' ? '/sw/data/uppnex/ToolBox/ReferenceAssemblies/hg38make/bundle/2.8/b37' : '/sw/data/uppnex/ToolBox/hg38bundle' +} diff --git a/docs/pipeline/sarek/uppmax.md b/docs/pipeline/sarek/uppmax.md new file mode 100644 index 0000000..ab8d85e --- /dev/null +++ b/docs/pipeline/sarek/uppmax.md @@ -0,0 +1,18 @@ +# nf-core/configs: uppmax sarek specific configuration + +Extra specific configuration for sarek pipeline + +## Usage + +To use, run the pipeline with `-profile uppmax`. + +This will download and launch the sarek specific [`uppmax.config`](../conf/pipeline/sarek/uppmax.config) which has been pre-configured with a setup suitable for uppmax clusters. + +Example: `nextflow run nf-core/sarek -profile uppmax` + +## Sarek specific configurations for uppmax clusters + +Specific configurations for uppmax clusters has been made for sarek. + +* Set paths to reference genomes +* Set path to singularity containers for `irma` diff --git a/pipeline/sarek.config b/pipeline/sarek.config index 9457972..112aef7 100644 --- a/pipeline/sarek.config +++ b/pipeline/sarek.config @@ -10,4 +10,5 @@ profiles { munin { includeConfig "${params.custom_config_base}/conf/pipeline/sarek/munin.config" } + uppmax { includeConfig "${params.custom_config_base}/conf/pipeline/sarek/uppmax.config" } } \ No newline at end of file From 2144a1dc04ac5c8756c60ae053eed95e149ecfa7 Mon Sep 17 00:00:00 2001 From: Maxime Garcia Date: Thu, 20 Feb 2020 17:19:30 +0100 Subject: [PATCH 08/16] Apply suggestions from code review --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4d2f8bd..0e58b09 100644 --- a/README.md +++ b/README.md @@ -196,7 +196,7 @@ We will be notified automatically when you have created your pull request, and p [Fork](https://help.github.com/articles/fork-a-repo/) the [`nf-core/configs`](https://github.com/nf-core/configs/) repository to your own GitHub account. And add or edit the following files in the local clone of your fork. -- `pipeline/.config` +* `pipeline/.config` If not already created, create the `pipeline/.config` file, and add your custom profile to the profile scope From 9b897345da7cbffbd80f61337f3edad2aea70735 Mon Sep 17 00:00:00 2001 From: Maxime Garcia Date: Fri, 21 Feb 2020 08:16:31 +0100 Subject: [PATCH 09/16] Update conf/pipeline/sarek/uppmax.config Co-Authored-By: Phil Ewels --- conf/pipeline/sarek/uppmax.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/pipeline/sarek/uppmax.config b/conf/pipeline/sarek/uppmax.config index 4a1a9fa..4690f9e 100644 --- a/conf/pipeline/sarek/uppmax.config +++ b/conf/pipeline/sarek/uppmax.config @@ -7,7 +7,7 @@ params { if (hostname ==~ "i.*") { singularity { - cacheDir = "${params.containers_path}" + cacheDir = params.containers_path } } From 9f74e880417e667b35825b626647fe9b6d6cc247 Mon Sep 17 00:00:00 2001 From: MaxUlysse Date: Mon, 24 Feb 2020 14:36:45 +0100 Subject: [PATCH 10/16] update file --- conf/pipeline/sarek/uppmax.config | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/conf/pipeline/sarek/uppmax.config b/conf/pipeline/sarek/uppmax.config index 4a1a9fa..2096684 100644 --- a/conf/pipeline/sarek/uppmax.config +++ b/conf/pipeline/sarek/uppmax.config @@ -5,13 +5,8 @@ params { config_profile_description = 'nf-core/sarek uppmax profile provided by nf-core/configs' } -if (hostname ==~ "i.*") { - singularity { - cacheDir = "${params.containers_path}" - } -} - params { + // Just useful until iGenomes is updated on UPPMAX igenomeIgnore = true genomes_base = params.genome == 'GRCh37' ? '/sw/data/uppnex/ToolBox/ReferenceAssemblies/hg38make/bundle/2.8/b37' : '/sw/data/uppnex/ToolBox/hg38bundle' } From 46b08c82e288919c509226758c64fcbc09a1562e Mon Sep 17 00:00:00 2001 From: Phil Ewels Date: Thu, 27 Feb 2020 11:53:38 +0100 Subject: [PATCH 11/16] Remove params.custom_config_base from nf-core/configs --- nfcore_custom.config | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/nfcore_custom.config b/nfcore_custom.config index 8b4a3a9..72a4ee8 100644 --- a/nfcore_custom.config +++ b/nfcore_custom.config @@ -8,9 +8,6 @@ * name here. */ -params.custom_config_version = 'master' -params.custom_config_base = "https://raw.githubusercontent.com/nf-core/configs/${params.custom_config_version}" - //Please use a new line per include Config section to allow easier linting/parsing. Thank you. profiles { awsbatch { includeConfig "${params.custom_config_base}/conf/awsbatch.config" } @@ -23,8 +20,8 @@ profiles { cfc { includeConfig "${params.custom_config_base}/conf/cfc.config" } crick { includeConfig "${params.custom_config_base}/conf/crick.config" } czbiohub_aws { includeConfig "${params.custom_config_base}/conf/czbiohub_aws.config" } - czbiohub_aws_highpriority { - includeConfig "${params.custom_config_base}/conf/czbiohub_aws.config"; + czbiohub_aws_highpriority { + includeConfig "${params.custom_config_base}/conf/czbiohub_aws.config"; includeConfig "${params.custom_config_base}/conf/czbiohub_aws_highpriority.config"} genotoul { includeConfig "${params.custom_config_base}/conf/genotoul.config" } denbi_qbic { includeConfig "${params.custom_config_base}/conf/denbi_qbic.config" } From ab8998e12bd3739d060e52cedd50ab92e9b7bf16 Mon Sep 17 00:00:00 2001 From: Maxime Garcia Date: Thu, 27 Feb 2020 16:52:51 +0100 Subject: [PATCH 12/16] Update uppmax.config --- conf/pipeline/sarek/uppmax.config | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/conf/pipeline/sarek/uppmax.config b/conf/pipeline/sarek/uppmax.config index 2096684..84b65f8 100644 --- a/conf/pipeline/sarek/uppmax.config +++ b/conf/pipeline/sarek/uppmax.config @@ -3,10 +3,12 @@ params { config_profile_contact = 'Maxime Garcia (@MaxUlysse)' config_profile_description = 'nf-core/sarek uppmax profile provided by nf-core/configs' -} -params { - // Just useful until iGenomes is updated on UPPMAX +// Just useful until iGenomes is updated on UPPMAX igenomeIgnore = true genomes_base = params.genome == 'GRCh37' ? '/sw/data/uppnex/ToolBox/ReferenceAssemblies/hg38make/bundle/2.8/b37' : '/sw/data/uppnex/ToolBox/hg38bundle' } + +if (hostname ==~ "i.*") { + params.singleCPUmem = 15.GB +} From 17d6a7e922eca8170ae21c1aa80d483312270338 Mon Sep 17 00:00:00 2001 From: Maxime Garcia Date: Thu, 27 Feb 2020 17:02:13 +0100 Subject: [PATCH 13/16] Update conf/pipeline/sarek/uppmax.config --- conf/pipeline/sarek/uppmax.config | 1 + 1 file changed, 1 insertion(+) diff --git a/conf/pipeline/sarek/uppmax.config b/conf/pipeline/sarek/uppmax.config index 84b65f8..dc3a86a 100644 --- a/conf/pipeline/sarek/uppmax.config +++ b/conf/pipeline/sarek/uppmax.config @@ -4,6 +4,7 @@ params { config_profile_contact = 'Maxime Garcia (@MaxUlysse)' config_profile_description = 'nf-core/sarek uppmax profile provided by nf-core/configs' + singleCPUmem = 7.GB // Just useful until iGenomes is updated on UPPMAX igenomeIgnore = true genomes_base = params.genome == 'GRCh37' ? '/sw/data/uppnex/ToolBox/ReferenceAssemblies/hg38make/bundle/2.8/b37' : '/sw/data/uppnex/ToolBox/hg38bundle' From 09ff8f5790819b80aece23d135f5169d007ab967 Mon Sep 17 00:00:00 2001 From: Maxime Garcia Date: Thu, 27 Feb 2020 17:02:31 +0100 Subject: [PATCH 14/16] Update conf/pipeline/sarek/uppmax.config --- conf/pipeline/sarek/uppmax.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/pipeline/sarek/uppmax.config b/conf/pipeline/sarek/uppmax.config index dc3a86a..56878b6 100644 --- a/conf/pipeline/sarek/uppmax.config +++ b/conf/pipeline/sarek/uppmax.config @@ -4,7 +4,7 @@ params { config_profile_contact = 'Maxime Garcia (@MaxUlysse)' config_profile_description = 'nf-core/sarek uppmax profile provided by nf-core/configs' - singleCPUmem = 7.GB + singleCPUmem = 7.GB // Just useful until iGenomes is updated on UPPMAX igenomeIgnore = true genomes_base = params.genome == 'GRCh37' ? '/sw/data/uppnex/ToolBox/ReferenceAssemblies/hg38make/bundle/2.8/b37' : '/sw/data/uppnex/ToolBox/hg38bundle' From 8acbdacf0331f6fd61dfa7db822783c45e5d4014 Mon Sep 17 00:00:00 2001 From: Maxime Garcia Date: Thu, 27 Feb 2020 17:21:03 +0100 Subject: [PATCH 15/16] Update conf/pipeline/sarek/uppmax.config Co-Authored-By: Johannes Alneberg --- conf/pipeline/sarek/uppmax.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/pipeline/sarek/uppmax.config b/conf/pipeline/sarek/uppmax.config index 56878b6..78955bf 100644 --- a/conf/pipeline/sarek/uppmax.config +++ b/conf/pipeline/sarek/uppmax.config @@ -4,7 +4,7 @@ params { config_profile_contact = 'Maxime Garcia (@MaxUlysse)' config_profile_description = 'nf-core/sarek uppmax profile provided by nf-core/configs' - singleCPUmem = 7.GB + singleCPUmem = 7000.MB // Just useful until iGenomes is updated on UPPMAX igenomeIgnore = true genomes_base = params.genome == 'GRCh37' ? '/sw/data/uppnex/ToolBox/ReferenceAssemblies/hg38make/bundle/2.8/b37' : '/sw/data/uppnex/ToolBox/hg38bundle' From 9a8bb12020acd5eb5fdaa6b48426df7d3620ba21 Mon Sep 17 00:00:00 2001 From: Maxime Garcia Date: Thu, 27 Feb 2020 17:22:03 +0100 Subject: [PATCH 16/16] Update conf/pipeline/sarek/uppmax.config --- conf/pipeline/sarek/uppmax.config | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/conf/pipeline/sarek/uppmax.config b/conf/pipeline/sarek/uppmax.config index 78955bf..1e467dd 100644 --- a/conf/pipeline/sarek/uppmax.config +++ b/conf/pipeline/sarek/uppmax.config @@ -9,7 +9,9 @@ params { igenomeIgnore = true genomes_base = params.genome == 'GRCh37' ? '/sw/data/uppnex/ToolBox/ReferenceAssemblies/hg38make/bundle/2.8/b37' : '/sw/data/uppnex/ToolBox/hg38bundle' } - + if (hostname ==~ "r.*") { + params.singleCPUmem = 6400.MB +} if (hostname ==~ "i.*") { params.singleCPUmem = 15.GB }