From f70c88c64821d8cea21e148dd92e701e6091c8ca Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Wed, 18 Feb 2026 10:58:34 +0100 Subject: [PATCH 01/57] make vsc_kul_hasselt strict syntax compatible --- conf/vsc_kul_uhasselt.config | 163 +++++++++++++++++++---------------- 1 file changed, 89 insertions(+), 74 deletions(-) diff --git a/conf/vsc_kul_uhasselt.config b/conf/vsc_kul_uhasselt.config index 152e2028c..ecd5b2824 100644 --- a/conf/vsc_kul_uhasselt.config +++ b/conf/vsc_kul_uhasselt.config @@ -1,9 +1,26 @@ +// Ignore configuration parameters in validation +validation { + ignoreParams = [ + 'vsc_kul_hasselt_scratchdir', + 'vsc_kul_hasselt_tier2_project', + 'vsc_kul_hasselt_available_queues', + 'vsc_kul_hasselt_publish_location', + 'vsc_kul_hasselt_time_threshold', + 'vsc_kul_hasselt_memory_threshold_genius', + 'vsc_kul_hasselt_memory_threshold_wice', + 'vsc_kul_hasselt_limit_task_time_func', + 'vsc_kul_hasselt_determine_genius_queue_func', + 'vsc_kul_hasselt_determine_genius_gpu_queue_func', + 'vsc_kul_hasselt_determine_wice_queue_func', + 'vsc_kul_hasselt_determine_wice_gpu_queue_func' + ] +} + // Default to /tmp directory if $VSC_SCRATCH scratch env is not available, // see: https://github.com/nf-core/configs?tab=readme-ov-file#adding-a-new-config -def SCRATCH_DIR = System.getenv("VSC_SCRATCH") ?: "/tmp" -def TIER2_PROJECT = System.getenv("SLURM_ACCOUNT") ?: null -def DEDICATED_QUEUES = System.getenv("VSC_DEDICATED_QUEUES") ?: "" -def AVAILABLE_QUEUES = DEDICATED_QUEUES.toString().split(',') +params.vsc_kul_hasselt_scratchdir = System.getenv("VSC_SCRATCH") ?: "/tmp" +params.vsc_kul_hasselt_tier2_project = System.getenv("SLURM_ACCOUNT") ?: null +params.vsc_kul_hasselt_available_queues = (System.getenv("VSC_DEDICATED_QUEUES") ?: "").toString().split(',') // Perform work directory cleanup when the run has succesfully completed // cleanup = true @@ -29,7 +46,7 @@ process { singularity { enabled = true autoMounts = true - cacheDir = "$SCRATCH_DIR/.singularity" + cacheDir = "${params.vsc_kul_hasselt_scratchdir}/.singularity" pullTimeout = "30 min" } @@ -38,28 +55,28 @@ params { config_profile_url = 'https://docs.vscentrum.be/en/latest/index.html' } - -def publishLocation = params.get('outdir', "$launchDir") - -def co2_timestamp = new java.util.Date().format('yyyy-MM-dd_HH-mm-ss') +params.vsc_kul_hasselt_publish_location = params.get('outdir', "$launchDir") +params.vsc_kul_hasselt_co2_timestamp = params.containsKey('trace_report_suffix') ? params.trace_report_suffix : new java.util.Date().format('yyyy-MM-dd_HH-mm-ss') co2footprint { - traceFile = "${publishLocation}/pipeline_info/co2footprint_trace_${co2_timestamp}.txt" - summaryFile = "${publishLocation}/pipeline_info/co2footprint_summary_${co2_timestamp}.txt" - reportFile = "${publishLocation}/pipeline_info/co2footprint_report_${co2_timestamp}.html" + traceFile = "${params.vsc_kul_hasselt_publish_location}/pipeline_info/co2footprint_trace_${params.vsc_kul_hasselt_co2_timestamp}.txt" + summaryFile = "${params.vsc_kul_hasselt_publish_location}/pipeline_info/co2footprint_summary_${params.vsc_kul_hasselt_co2_timestamp}.txt" + reportFile = "${params.vsc_kul_hasselt_publish_location}/pipeline_info/co2footprint_report_${params.vsc_kul_hasselt_co2_timestamp}.html" location = 'BE' //pue = 1.33 // replace with PUE of your data center machineType = 'compute cluster' // set to 'compute cluster', 'local', or 'cloud' } env { - APPTAINER_TMPDIR="$SCRATCH_DIR/.apptainer/tmp" - APPTAINER_CACHEDIR="$SCRATCH_DIR/.apptainer/cache" + APPTAINER_TMPDIR="${params.vsc_kul_hasselt_scratchdir}/.apptainer/tmp" + APPTAINER_CACHEDIR="${params.vsc_kul_hasselt_scratchdir}/.apptainer/cache" } // AWS maximum retries for errors (This way the pipeline doesn't fail if the download fails one time) aws { - maxErrorRetry = 3 + client { + maxErrorRetry = 3 + } } /* @@ -72,13 +89,13 @@ aws { /* * Constants: * ---------- - * TIME_THRESHOLD: 72 hours - Threshold for determining long-running jobs - * MEMORY_THRESHOLD (GENIUS): 175GB - Memory threshold for bigmem queues - * MEMORY_THRESHOLD (WICE): 239GB - Memory threshold for high-memory queues + * params.vsc_kul_hasselt_time_threshold: 72 hours - Threshold for determining long-running jobs + * params.vsc_kul_hasselt_memory_threshold_genius: 175GB - Memory threshold for bigmem queues + * params.vsc_kul_hasselt_memory_threshold_wice: 239GB - Memory threshold for high-memory queues */ -def TIME_THRESHOLD = 72.h -def MEMORY_THRESHOLD_GENIUS = 175.GB -def MEMORY_THRESHOLD_WICE = 239.GB +params.vsc_kul_hasselt_time_threshold = 72.h +params.vsc_kul_hasselt_memory_threshold_genius = 175.GB +params.vsc_kul_hasselt_memory_threshold_wice = 239.GB /* * --------- @@ -91,26 +108,26 @@ def MEMORY_THRESHOLD_WICE = 239.GB */ /* - * limitTaskTime(time, maxTime) + * params.vsc_kul_hasselt_limit_task_time_func(time, maxTime) * Ensures task time doesn't exceed the maximum allowed time * @param time Current task time * @param maxTime Maximum allowed time * @return Limited task time */ -def limitTaskTime(time, maxTime) { +params.vsc_kul_hasselt_limit_task_time_func = { time, maxTime -> return time > maxTime ? maxTime : time } /* - * determineGeniusQueue(task) + * params.vsc_kul_hasselt_determine_genius_queue_func(task) * Selects appropriate CPU queue for GENIUS cluster * @param task Nextflow task object containing memory and time requirements * @return Queue name based on task requirements */ -def determineGeniusQueue = { task -> - def isHighMemory = task.memory >= MEMORY_THRESHOLD_GENIUS - def isLongRunning = task.time >= TIME_THRESHOLD - def hasDedicatedBigmem = AVAILABLE_QUEUES.contains('dedicated_big_bigmem') +params.vsc_kul_hasselt_determine_genius_queue_func = { task -> + def isHighMemory = task.memory >= params.vsc_kul_hasselt_memory_threshold_genius + def isLongRunning = task.time >= params.vsc_kul_hasselt_time_threshold + def hasDedicatedBigmem = params.vsc_kul_hasselt_available_queues.contains('dedicated_big_bigmem') if (isHighMemory) { return isLongRunning ? @@ -122,16 +139,16 @@ def determineGeniusQueue = { task -> } /* - * determineGeniusGpuQueue(task) + * params.vsc_kul_hasselt_determine_genius_gpu_queue_func(task) * Selects appropriate GPU queue for GENIUS cluster * @param task Nextflow task object containing memory and time requirements * @return GPU queue name based on task requirements */ -def determineGeniusGpuQueue = { task -> - def isHighMemory = task.memory >= MEMORY_THRESHOLD_GENIUS - def isLongRunning = task.time >= TIME_THRESHOLD - def hasDedicatedGpu = AVAILABLE_QUEUES.contains('dedicated_rega_gpu') - def hasAmdGpu = AVAILABLE_QUEUES.contains('amd') +params.vsc_kul_hasselt_determine_genius_gpu_queue_func = { task -> + def isHighMemory = task.memory >= params.vsc_kul_hasselt_memory_threshold_genius + def isLongRunning = task.time >= params.vsc_kul_hasselt_time_threshold + def hasDedicatedGpu = params.vsc_kul_hasselt_available_queues.contains('dedicated_rega_gpu') + def hasAmdGpu = params.vsc_kul_hasselt_available_queues.contains('amd') if (isHighMemory) { return isLongRunning ? 'gpu_v100_long' : 'gpu_v100' @@ -147,21 +164,21 @@ def determineGeniusGpuQueue = { task -> } /* - * determineWiceQueue(task) + * params.vsc_kul_hasselt_determine_wice_queue_func(task) * Selects appropriate CPU queue for WICE cluster * @param task Nextflow task object containing memory and time requirements * @return Queue name based on task requirements and availability */ -def determineWiceQueue = { task -> - def isHighMemory = task.memory >= MEMORY_THRESHOLD_WICE - def isLongRunning = task.time >= TIME_THRESHOLD - def hasDedicatedQueue = AVAILABLE_QUEUES.contains('dedicated_big_bigmem') +params.vsc_kul_hasselt_determine_wice_queue_func = { task -> + def isHighMemory = task.memory >= params.vsc_kul_hasselt_memory_threshold_wice + def isLongRunning = task.time >= params.vsc_kul_hasselt_time_threshold + def hasDedicatedQueue = params.vsc_kul_hasselt_available_queues.contains('dedicated_big_bigmem') if (isHighMemory) { if (isLongRunning && hasDedicatedQueue) { return 'dedicated_big_bigmem' } - task.time = limitTaskTime(task.time, TIME_THRESHOLD) + task.time = params.vsc_kul_hasselt_limit_task_time_func(task.time, params.vsc_kul_hasselt_time_threshold) return 'bigmem,hugemem' } @@ -171,20 +188,20 @@ def determineWiceQueue = { task -> } /* - * determineWiceGpuQueue(task) + * params.vsc_kul_hasselt_determine_wice_gpu_queue_func(task) * Selects appropriate GPU queue for WICE cluster * @param task Nextflow task object containing memory and time requirements * @return GPU queue name based on task requirements */ -def determineWiceGpuQueue = { task -> - def isHighMemory = task.memory >= MEMORY_THRESHOLD_WICE - def isLongRunning = task.time >= TIME_THRESHOLD +params.vsc_kul_hasselt_determine_wice_gpu_queue_func = { task -> + def isHighMemory = task.memory >= params.vsc_kul_hasselt_memory_threshold_wice + def isLongRunning = task.time >= params.vsc_kul_hasselt_time_threshold def hasDedicatedQueue = isHighMemory ? - AVAILABLE_QUEUES.contains('dedicated_big_gpu_h100') : - AVAILABLE_QUEUES.contains('dedicated_big_gpu') + params.vsc_kul_hasselt_available_queues.contains('dedicated_big_gpu_h100') : + params.vsc_kul_hasselt_available_queues.contains('dedicated_big_gpu') if (isLongRunning && !hasDedicatedQueue) { - task.time = limitTaskTime(task.time, TIME_THRESHOLD) + task.time = params.vsc_kul_hasselt_limit_task_time_func(task.time, params.vsc_kul_hasselt_time_threshold) } if (isHighMemory) { @@ -213,23 +230,22 @@ profiles { process { // 768 - 65 so 65GB for overhead, max is 720000MB resourceLimits = [ memory: 703.GB, cpus: 36, time: 168.h ] - beforeScript = { 'module load cluster/genius/' + determineGeniusQueue(task).toString().split(',')[0] } - queue = { determineGeniusQueue(task) } + beforeScript = { 'module load cluster/genius/' + params.vsc_kul_hasselt_determine_genius_queue_func(task).toString().split(',')[0] } + queue = { params.vsc_kul_hasselt_determine_genius_queue_func(task) } clusterOptions = { - determineGeniusQueue(task) =~ /dedicated/ ? + params.vsc_kul_hasselt_determine_genius_queue_func(task) =~ /dedicated/ ? "--clusters=genius --account=lp_big_genius_cpu" : - "--clusters=genius --account=$TIER2_PROJECT" + "--clusters=genius --account=${params.vsc_kul_hasselt_tier2_project}" } withLabel: '.*gpu.*'{ resourceLimits = [ memory: 703.GB, cpus: 36 , time: 168.h ] - beforeScript = { 'module load cluster/genius/' + determineGeniusGpuQueue(task).toString().split(',')[0] } - apptainer.runOptions = '--containall --cleanenv --nv' - singularity.runOptions = '--containall --cleanenv --nv' - queue = { determineGeniusGpuQueue(task) } + beforeScript = { 'module load cluster/genius/' + params.vsc_kul_hasselt_determine_genius_gpu_queue_func(task).toString().split(',')[0] } + containerOptions = '--containall --cleanenv --nv' + queue = { params.vsc_kul_hasselt_determine_genius_gpu_queue_func(task) } clusterOptions = { def gpus = task.accelerator?.request ?: Math.max(1, Math.floor((task.cpus ?:1)/9) as int) - "--gres=gpu:${gpus} --clusters=genius --account=$TIER2_PROJECT" + "--gres=gpu:${gpus} --clusters=genius --account=${params.vsc_kul_hasselt_tier2_project}" } } } @@ -243,11 +259,11 @@ profiles { process { // 768 - 65 so 65GB for overhead, max is 720000MB resourceLimits = [ memory: 703.GB, cpus: 36, time: 168.h] - beforeScript = { 'module load cluster/genius/' + determineGeniusGpuQueue(task).toString().split(',')[0] } - queue = { determineGeniusGpuQueue(task) } + beforeScript = { 'module load cluster/genius/' + params.vsc_kul_hasselt_determine_genius_gpu_queue_func(task).toString().split(',')[0] } + queue = { params.vsc_kul_hasselt_determine_genius_gpu_queue_func(task) } clusterOptions = { def gpus = task.accelerator?.request ?: Math.max(1, Math.floor((task.cpus ?:1)/9) as int) - "--gres=gpu:${gpus} --clusters=genius --account=$TIER2_PROJECT" + "--gres=gpu:${gpus} --clusters=genius --account=${params.vsc_kul_hasselt_tier2_project}" } } } @@ -258,26 +274,25 @@ profiles { process { // max is 2016000 resourceLimits = [ memory: 1968.GB, cpus: 72, time: 168.h ] - beforeScript = { 'module load cluster/wice/' + determineWiceQueue(task).toString().split(',')[0] } - queue = { determineWiceQueue(task) } + beforeScript = { 'module load cluster/wice/' + params.vsc_kul_hasselt_determine_wice_queue_func(task).toString().split(',')[0] } + queue = { params.vsc_kul_hasselt_determine_wice_queue_func(task) } clusterOptions = { - determineWiceQueue(task) =~ /dedicated/ ? + params.vsc_kul_hasselt_determine_wice_queue_func(task) =~ /dedicated/ ? "--clusters=wice --account=lp_big_wice_cpu" : - "--clusters=wice --account=$TIER2_PROJECT" + "--clusters=wice --account=${params.vsc_kul_hasselt_tier2_project}" } withLabel: '.*gpu.*' { resourceLimits = [ memory: 703.GB, cpus: 64, time: 168.h ] - apptainer.runOptions = '--containall --cleanenv --nv' - singularity.runOptions = '--containall --cleanenv --nv' - beforeScript = { 'module load cluster/wice/' + determineWiceGpuQueue(task).toString().split(',')[0] } - queue = { determineWiceGpuQueue(task) } + containerOptions = '--containall --cleanenv --nv' + beforeScript = { 'module load cluster/wice/' + params.vsc_kul_hasselt_determine_wice_gpu_queue_func(task).toString().split(',')[0] } + queue = { params.vsc_kul_hasselt_determine_wice_gpu_queue_func(task) } clusterOptions = { def gpus = task.accelerator?.request ?: Math.max(1, Math.floor((task.cpus ?:1)/16) as int) - def queueValue = determineWiceGpuQueue(task) + def queueValue = params.vsc_kul_hasselt_determine_wice_gpu_queue_func(task) queueValue =~ /dedicated_big_gpu_h100/ ? "--clusters=wice --account=lp_big_wice_gpu_h100 --gres=gpu:${gpus}" : queueValue =~ /dedicated_big_gpu/ ? "--clusters=wice --account=lp_big_wice_gpu --gres=gpu:${gpus}" : - "--clusters=wice --account=$TIER2_PROJECT --gres=gpu:${gpus}" + "--clusters=wice --account=${params.vsc_kul_hasselt_tier2_project} --gres=gpu:${gpus}" } } } @@ -290,15 +305,15 @@ profiles { process { // 768 - 65 so 65GB for overhead, max is 720000MB - beforeScript = { 'module load cluster/wice/' + determineWiceGpuQueue(task).toString().split(',')[0] } + beforeScript = { 'module load cluster/wice/' + params.vsc_kul_hasselt_determine_wice_gpu_queue_func(task).toString().split(',')[0] } resourceLimits = [ memory: 703.GB, cpus: 64, time: 168.h ] - queue = { determineWiceGpuQueue(task) } + queue = { params.vsc_kul_hasselt_determine_wice_gpu_queue_func(task) } clusterOptions = { def gpus = task.accelerator?.request ?: Math.max(1, Math.floor((task.cpus ?:1)/16) as int) - def queueValue = determineWiceGpuQueue(task) + def queueValue = params.vsc_kul_hasselt_determine_wice_gpu_queue_func(task) queueValue =~ /dedicated_big_gpu_h100/ ? "--clusters=wice --account=lp_big_wice_gpu_h100 --gres=gpu:${gpus}" : queueValue =~ /dedicated_big_gpu/ ? "--clusters=wice --account=lp_big_wice_gpu --gres=gpu:${gpus}" : - "--clusters=wice --account=$TIER2_PROJECT --gres=gpu:${gpus}" + "--clusters=wice --account=${params.vsc_kul_hasselt_tier2_project} --gres=gpu:${gpus}" } } } @@ -307,7 +322,7 @@ profiles { params.config_profile_description = 'superdome profile for use on the genius cluster of the VSC HPC.' process { - clusterOptions = {"--clusters=genius --account=$TIER2_PROJECT"} + clusterOptions = {"--clusters=genius --account=${params.vsc_kul_hasselt_tier2_project}"} beforeScript = 'module load cluster/genius/superdome' // 6000 - 228 so 228GB for overhead, max is 5910888MB resourceLimits = [ memory: 5772.GB, cpus: 14, time: 168.h] From cf61456a8c00f362d869cec50350a82c4d55a20f Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Wed, 18 Feb 2026 15:00:29 +0100 Subject: [PATCH 02/57] make pipeline configs strict syntax compatible --- conf/pipeline/deepmodeloptim/crg.config | 2 +- conf/pipeline/eager/eva.config | 141 +++++++++--------- conf/pipeline/eager/maestro.config | 90 +++++------ .../pipeline/methylseq/ku_sund_danhead.config | 2 +- .../pipeline/multiplesequencealign/crg.config | 2 +- conf/pipeline/proteinfold/nci_gadi.config | 8 +- conf/pipeline/sarek/cfc.config | 26 ++-- conf/pipeline/sarek/icr_davros.config | 4 - conf/pipeline/scflow/imperial.config | 8 +- 9 files changed, 143 insertions(+), 140 deletions(-) diff --git a/conf/pipeline/deepmodeloptim/crg.config b/conf/pipeline/deepmodeloptim/crg.config index cfa193dea..4efda6bff 100644 --- a/conf/pipeline/deepmodeloptim/crg.config +++ b/conf/pipeline/deepmodeloptim/crg.config @@ -15,7 +15,7 @@ profiles { singularity { enabled = true envWhitelist = "CUDA_VISIBLE_DEVICES,NVIDIA_VISIBLE_DEVICES" - if (params.use_gpu) { singularity.runOptions = '--nv' } + runOptions = params.get('use_gpu', false) ? '--nv' : '' pullTimeout = "60m" } } diff --git a/conf/pipeline/eager/eva.config b/conf/pipeline/eager/eva.config index d96b1306e..b9ca79489 100644 --- a/conf/pipeline/eager/eva.config +++ b/conf/pipeline/eager/eva.config @@ -1,5 +1,10 @@ // Profile config names for nf-core/configs +validation.ignoreParams = [ + 'eager_eva_check_max_func' +] + + params { // Specific nf-core/configs params config_profile_contact = 'James Fellows Yates (@jfy133)' @@ -21,44 +26,44 @@ process { clusterOptions = { "-S /bin/bash -V -j y -o output.log -l h_vmem=${task.memory.toGiga()}G" } withLabel: sc_tiny { - cpus = { check_max(1, 'cpus') } - memory = { check_max(1.GB * task.attempt, 'memory') } + cpus = { params.eager_eva_check_max_func(1, 'cpus') } + memory = { params.eager_eva_check_max_func(1.GB * task.attempt, 'memory') } time = '365.d' } withLabel: sc_small { - cpus = { check_max(1, 'cpus') } - memory = { check_max(4.GB * task.attempt, 'memory') } + cpus = { params.eager_eva_check_max_func(1, 'cpus') } + memory = { params.eager_eva_check_max_func(4.GB * task.attempt, 'memory') } time = '365.d' } withLabel: sc_medium { - cpus = { check_max(1, 'cpus') } - memory = { check_max(8.GB * task.attempt, 'memory') } + cpus = { params.eager_eva_check_max_func(1, 'cpus') } + memory = { params.eager_eva_check_max_func(8.GB * task.attempt, 'memory') } time = '365.d' } withLabel: mc_small { - cpus = { check_max(2, 'cpus') } - memory = { check_max(4.GB * task.attempt, 'memory') } + cpus = { params.eager_eva_check_max_func(2, 'cpus') } + memory = { params.eager_eva_check_max_func(4.GB * task.attempt, 'memory') } time = '365.d' } withLabel: mc_medium { - cpus = { check_max(4, 'cpus') } - memory = { check_max(8.GB * task.attempt, 'memory') } + cpus = { params.eager_eva_check_max_func(4, 'cpus') } + memory = { params.eager_eva_check_max_func(8.GB * task.attempt, 'memory') } time = '365.d' } withLabel: mc_large { - cpus = { check_max(8, 'cpus') } - memory = { check_max(16.GB * task.attempt, 'memory') } + cpus = { params.eager_eva_check_max_func(8, 'cpus') } + memory = { params.eager_eva_check_max_func(16.GB * task.attempt, 'memory') } time = '365.d' } withLabel: mc_huge { - cpus = { check_max(32, 'cpus') } - memory = { check_max(256.GB * task.attempt, 'memory') } + cpus = { params.eager_eva_check_max_func(32, 'cpus') } + memory = { params.eager_eva_check_max_func(256.GB * task.attempt, 'memory') } time = '365.d' } @@ -115,7 +120,7 @@ process { withName: markduplicates { clusterOptions = { "-S /bin/bash -V -l h_vmem=${(task.memory.toGiga() * 2)}G" } - memory = { check_max(20.GB * task.attempt, 'memory') } + memory = { params.eager_eva_check_max_func(20.GB * task.attempt, 'memory') } errorStrategy = { task.exitStatus in [1, 143, 137, 104, 134, 139, 140] ? 'retry' : 'finish' } } @@ -129,7 +134,7 @@ process { withName: additional_library_merge { clusterOptions = { "-S /bin/bash -V -l h_vmem=${(task.memory.toGiga() * 2)}G" } - memory = { check_max(4.GB * task.attempt, 'memory') } + memory = { params.eager_eva_check_max_func(4.GB * task.attempt, 'memory') } } withName: metagenomic_complexity_filter { @@ -138,8 +143,8 @@ process { withName: malt { clusterOptions = { "-S /bin/bash -V -l h_vmem=1000G" } - cpus = { check_max(32, 'cpus') } - memory = { check_max(955.GB * task.attempt, 'memory') } + cpus = { params.eager_eva_check_max_func(32, 'cpus') } + memory = { params.eager_eva_check_max_func(955.GB * task.attempt, 'memory') } } withName: maltextract { @@ -169,7 +174,7 @@ process { withName: damageprofiler { clusterOptions = { "-S /bin/bash -V -l h_vmem=${(task.memory.toGiga() * 2)}G" } - memory = { check_max(8.GB * task.attempt, 'memory') } + memory = { params.eager_eva_check_max_func(8.GB * task.attempt, 'memory') } errorStrategy = { task.exitStatus in [1, 143, 137, 104, 134, 139, 140] ? 'retry' : 'finish' } } @@ -237,38 +242,38 @@ profiles { clusterOptions = { "-S /bin/bash -V -j y -o output.log -l h_vmem=${task.memory.toGiga()}G" } withLabel: sc_tiny { - cpus = { check_max(1, 'cpus') } - memory = { check_max(1.5.GB * task.attempt, 'memory') } + cpus = { params.eager_eva_check_max_func(1, 'cpus') } + memory = { params.eager_eva_check_max_func(1.5.GB * task.attempt, 'memory') } } withLabel: sc_small { - cpus = { check_max(1, 'cpus') } - memory = { check_max(6.GB * task.attempt, 'memory') } + cpus = { params.eager_eva_check_max_func(1, 'cpus') } + memory = { params.eager_eva_check_max_func(6.GB * task.attempt, 'memory') } } withLabel: sc_medium { - cpus = { check_max(1, 'cpus') } - memory = { check_max(12.GB * task.attempt, 'memory') } + cpus = { params.eager_eva_check_max_func(1, 'cpus') } + memory = { params.eager_eva_check_max_func(12.GB * task.attempt, 'memory') } } withLabel: mc_small { - cpus = { check_max(2, 'cpus') } - memory = { check_max(6.GB * task.attempt, 'memory') } + cpus = { params.eager_eva_check_max_func(2, 'cpus') } + memory = { params.eager_eva_check_max_func(6.GB * task.attempt, 'memory') } } withLabel: mc_medium { - cpus = { check_max(4, 'cpus') } - memory = { check_max(12.GB * task.attempt, 'memory') } + cpus = { params.eager_eva_check_max_func(4, 'cpus') } + memory = { params.eager_eva_check_max_func(12.GB * task.attempt, 'memory') } } withLabel: mc_large { - cpus = { check_max(8, 'cpus') } - memory = { check_max(24.GB * task.attempt, 'memory') } + cpus = { params.eager_eva_check_max_func(8, 'cpus') } + memory = { params.eager_eva_check_max_func(24.GB * task.attempt, 'memory') } } withLabel: mc_huge { - cpus = { check_max(32, 'cpus') } - memory = { check_max(256.GB * task.attempt, 'memory') } + cpus = { params.eager_eva_check_max_func(32, 'cpus') } + memory = { params.eager_eva_check_max_func(256.GB * task.attempt, 'memory') } } // Fixes for SGE and Java incompatibility due to (and also some samtools?!) using more memory than you tell it to use @@ -308,7 +313,7 @@ profiles { withName: markduplicates { clusterOptions = { "-S /bin/bash -V -l h_vmem=${(task.memory.toGiga() * 3)}G" } - memory = { check_max(32.GB * task.attempt, 'memory') } + memory = { params.eager_eva_check_max_func(32.GB * task.attempt, 'memory') } errorStrategy = { task.exitStatus in [1, 143, 137, 104, 134, 139, 140] ? 'retry' : 'finish' } } @@ -322,7 +327,7 @@ profiles { withName: additional_library_merge { clusterOptions = { "-S /bin/bash -V -l h_vmem=${(task.memory.toGiga() * 3)}G" } - memory = { check_max(4.GB * task.attempt, 'memory') } + memory = { params.eager_eva_check_max_func(4.GB * task.attempt, 'memory') } } withName: metagenomic_complexity_filter { @@ -331,13 +336,13 @@ profiles { withName: malt { clusterOptions = { "-S /bin/bash -V -l h_vmem=1000G" } - cpus = { check_max(32, 'cpus') } - memory = { check_max(955.GB * task.attempt, 'memory') } + cpus = { params.eager_eva_check_max_func(32, 'cpus') } + memory = { params.eager_eva_check_max_func(955.GB * task.attempt, 'memory') } errorStrategy = { task.exitStatus in [1, 143, 137, 104, 134, 139, 140] ? 'retry' : 'finish' } } withName: hostremoval_input_fastq { - memory = { check_max(32.GB * task.attempt, 'memory') } + memory = { params.eager_eva_check_max_func(32.GB * task.attempt, 'memory') } } withName: maltextract { @@ -367,7 +372,7 @@ profiles { withName: damageprofiler { clusterOptions = { "-S /bin/bash -V -l h_vmem=${(task.memory.toGiga() * 3)}G" } - memory = { check_max(16.GB * task.attempt, 'memory') } + memory = { params.eager_eva_check_max_func(16.GB * task.attempt, 'memory') } errorStrategy = { task.exitStatus in [1, 143, 137, 104, 134, 139, 140] ? 'retry' : 'finish' } } @@ -418,38 +423,38 @@ profiles { clusterOptions = { "-S /bin/bash -V -j y -o output.log -l h_vmem=${task.memory.toGiga()}G" } withLabel: sc_tiny { - cpus = { check_max(1, 'cpus') } - memory = { check_max(2.GB * task.attempt, 'memory') } + cpus = { params.eager_eva_check_max_func(1, 'cpus') } + memory = { params.eager_eva_check_max_func(2.GB * task.attempt, 'memory') } } withLabel: sc_small { - cpus = { check_max(1, 'cpus') } - memory = { check_max(8.GB * task.attempt, 'memory') } + cpus = { params.eager_eva_check_max_func(1, 'cpus') } + memory = { params.eager_eva_check_max_func(8.GB * task.attempt, 'memory') } } withLabel: sc_medium { - cpus = { check_max(1, 'cpus') } - memory = { check_max(16.GB * task.attempt, 'memory') } + cpus = { params.eager_eva_check_max_func(1, 'cpus') } + memory = { params.eager_eva_check_max_func(16.GB * task.attempt, 'memory') } } withLabel: mc_small { - cpus = { check_max(2, 'cpus') } - memory = { check_max(8.GB * task.attempt, 'memory') } + cpus = { params.eager_eva_check_max_func(2, 'cpus') } + memory = { params.eager_eva_check_max_func(8.GB * task.attempt, 'memory') } } withLabel: mc_medium { - cpus = { check_max(4, 'cpus') } - memory = { check_max(16.GB * task.attempt, 'memory') } + cpus = { params.eager_eva_check_max_func(4, 'cpus') } + memory = { params.eager_eva_check_max_func(16.GB * task.attempt, 'memory') } } withLabel: mc_large { - cpus = { check_max(8, 'cpus') } - memory = { check_max(32.GB * task.attempt, 'memory') } + cpus = { params.eager_eva_check_max_func(8, 'cpus') } + memory = { params.eager_eva_check_max_func(32.GB * task.attempt, 'memory') } } withLabel: mc_huge { - cpus = { check_max(32, 'cpus') } - memory = { check_max(512.GB * task.attempt, 'memory') } + cpus = { params.eager_eva_check_max_func(32, 'cpus') } + memory = { params.eager_eva_check_max_func(512.GB * task.attempt, 'memory') } } // Fixes for SGE and Java incompatibility due to Java using more memory than you tell it to use @@ -489,13 +494,13 @@ profiles { withName: markduplicates { clusterOptions = { "-S /bin/bash -V -l h_vmem=${(task.memory.toGiga() * 6)}G" } - memory = { check_max(48.GB * task.attempt, 'memory') } + memory = { params.eager_eva_check_max_func(48.GB * task.attempt, 'memory') } errorStrategy = { task.exitStatus in [1, 143, 137, 104, 134, 139, 140] ? 'retry' : 'finish' } } withName: library_merge { clusterOptions = { "-S /bin/bash -V -l h_vmem=${(task.memory.toGiga() * 6)}G" } - memory = { check_max(6.GB * task.attempt, 'memory') } + memory = { params.eager_eva_check_max_func(6.GB * task.attempt, 'memory') } } withName: seqtype_merge { @@ -504,11 +509,11 @@ profiles { withName: additional_library_merge { clusterOptions = { "-S /bin/bash -V -l h_vmem=${(task.memory.toGiga() * 6)}G" } - memory = { check_max(6.GB * task.attempt, 'memory') } + memory = { params.eager_eva_check_max_func(6.GB * task.attempt, 'memory') } } withName: hostremoval_input_fastq { - memory = { check_max(32.GB * task.attempt, 'memory') } + memory = { params.eager_eva_check_max_func(32.GB * task.attempt, 'memory') } } withName: metagenomic_complexity_filter { @@ -517,8 +522,8 @@ profiles { withName: malt { clusterOptions = { "-S /bin/bash -V -l h_vmem=1000G" } - cpus = { check_max(32, 'cpus') } - memory = { check_max(955.GB * task.attempt, 'memory') } + cpus = { params.eager_eva_check_max_func(32, 'cpus') } + memory = { params.eager_eva_check_max_func(955.GB * task.attempt, 'memory') } errorStrategy = { task.exitStatus in [1, 143, 137, 104, 134, 139, 140] ? 'retry' : 'finish' } } @@ -549,7 +554,7 @@ profiles { withName: damageprofiler { clusterOptions = { "-S /bin/bash -V -l h_vmem=${(task.memory.toGiga() * 6)}G" } - memory = { check_max(32.GB * task.attempt, 'memory') } + memory = { params.eager_eva_check_max_func(32.GB * task.attempt, 'memory') } errorStrategy = { task.exitStatus in [1, 143, 137, 104, 134, 139, 140] ? 'retry' : 'finish' } } @@ -627,31 +632,31 @@ profiles { // Function to ensure that resource requirements don't go beyond // a maximum limit // FOR DSL1 PIPELINE ONLY! -def check_max(obj, type) { +params.eager_eva_check_max_func = { obj, type -> if (type == 'memory') { try { - if (obj.compareTo(params.max_memory as nextflow.util.MemoryUnit) == 1) - return params.max_memory as nextflow.util.MemoryUnit + if (obj.compareTo(params.max_memory as MemoryUnit) == 1) + return params.max_memory as MemoryUnit else return obj - } catch (all) { + } catch (_) { println " ### ERROR ### Max memory '${params.max_memory}' is not valid! Using default value: $obj" return obj } } else if (type == 'time') { try { - if (obj.compareTo(params.max_time as nextflow.util.Duration) == 1) - return params.max_time as nextflow.util.Duration + if (obj.compareTo(params.max_time as Duration) == 1) + return params.max_time as Duration else return obj - } catch (all) { + } catch (_) { println " ### ERROR ### Max time '${params.max_time}' is not valid! Using default value: $obj" return obj } } else if (type == 'cpus') { try { return Math.min( obj, params.max_cpus as int ) - } catch (all) { + } catch (_) { println " ### ERROR ### Max cpus '${params.max_cpus}' is not valid! Using default value: $obj" return obj } diff --git a/conf/pipeline/eager/maestro.config b/conf/pipeline/eager/maestro.config index 01dc96d7c..fd14b4e3e 100644 --- a/conf/pipeline/eager/maestro.config +++ b/conf/pipeline/eager/maestro.config @@ -5,6 +5,12 @@ * nextflow run nf-core/eager -profile maestro,,maestro, (where is long or normal and is nuclear, mitocondrial or unlimitedtime) */ +validation { + ignoreParams = [ + 'eager_maestro_check_max_func' + ] +} + params { config_profile_name = 'nf-core/eager nuclear/mitocondrial - human profiles' @@ -21,41 +27,41 @@ profiles { maxRetries = 2 withName: makeBWAIndex { - cpus = { check_max(8 * task.attempt, 'cpus') } - memory = { check_max(8.GB * task.attempt, 'memory') } - time = { check_max(12.h * task.attempt, 'time') } + cpus = { params.eager_maestro_check_max_func(8 * task.attempt, 'cpus') } + memory = { params.eager_maestro_check_max_func(8.GB * task.attempt, 'memory') } + time = { params.eager_maestro_check_max_func(12.h * task.attempt, 'time') } } withName: adapter_removal { - cpus = { check_max(8 * task.attempt, 'cpus') } - memory = { check_max(16.GB * task.attempt, 'memory') } - time = { check_max(12.h * task.attempt, 'time') } + cpus = { params.eager_maestro_check_max_func(8 * task.attempt, 'cpus') } + memory = { params.eager_maestro_check_max_func(16.GB * task.attempt, 'memory') } + time = { params.eager_maestro_check_max_func(12.h * task.attempt, 'time') } } withName: bwa { - cpus = { check_max(40 * task.attempt, 'cpus') } - memory = { check_max(40.GB * task.attempt, 'memory') } + cpus = { params.eager_maestro_check_max_func(40 * task.attempt, 'cpus') } + memory = { params.eager_maestro_check_max_func(40.GB * task.attempt, 'memory') } time = 24.h cache = 'deep' } withName: markduplicates { errorStrategy = { task.exitStatus in [143, 137, 104, 134, 139] ? 'retry' : 'finish' } - cpus = { check_max(16 * task.attempt, 'cpus') } - memory = { check_max(16.GB * task.attempt, 'memory') } - time = { check_max(12.h * task.attempt, 'time') } + cpus = { params.eager_maestro_check_max_func(16 * task.attempt, 'cpus') } + memory = { params.eager_maestro_check_max_func(16.GB * task.attempt, 'memory') } + time = { params.eager_maestro_check_max_func(12.h * task.attempt, 'time') } } withName: damageprofiler { cpus = 1 - memory = { check_max(8.GB * task.attempt, 'memory') } - time = { check_max(6.h * task.attempt, 'time') } + memory = { params.eager_maestro_check_max_func(8.GB * task.attempt, 'memory') } + time = { params.eager_maestro_check_max_func(6.h * task.attempt, 'time') } } withName: fastp { cpus = 8 - memory = { check_max(8.GB * task.attempt, 'memory') } - time = { check_max(6.h * task.attempt, 'time') } + memory = { params.eager_maestro_check_max_func(8.GB * task.attempt, 'memory') } + time = { params.eager_maestro_check_max_func(6.h * task.attempt, 'time') } } withName: fastqc { cpus = 2 - memory = { check_max(8.GB * task.attempt, 'memory') } - time = { check_max(6.h * task.attempt, 'time') } + memory = { params.eager_maestro_check_max_func(8.GB * task.attempt, 'memory') } + time = { params.eager_maestro_check_max_func(6.h * task.attempt, 'time') } } } } @@ -66,40 +72,40 @@ profiles { maxRetries = 2 withName: makeBWAIndex { - cpus = { check_max(8 * task.attempt, 'cpus') } - memory = { check_max(8.GB * task.attempt, 'memory') } - time = { check_max(12.h * task.attempt, 'time') } + cpus = { params.eager_maestro_check_max_func(8 * task.attempt, 'cpus') } + memory = { params.eager_maestro_check_max_func(8.GB * task.attempt, 'memory') } + time = { params.eager_maestro_check_max_func(12.h * task.attempt, 'time') } } withName: adapter_removal { - cpus = { check_max(8 * task.attempt, 'cpus') } - memory = { check_max(16.GB * task.attempt, 'memory') } - time = { check_max(12.h * task.attempt, 'time') } + cpus = { params.eager_maestro_check_max_func(8 * task.attempt, 'cpus') } + memory = { params.eager_maestro_check_max_func(16.GB * task.attempt, 'memory') } + time = { params.eager_maestro_check_max_func(12.h * task.attempt, 'time') } } withName: bwa { - cpus = { check_max(5 * task.attempt, 'cpus') } - memory = { check_max(5.GB * task.attempt, 'memory') } + cpus = { params.eager_maestro_check_max_func(5 * task.attempt, 'cpus') } + memory = { params.eager_maestro_check_max_func(5.GB * task.attempt, 'memory') } time = 24.h } withName: markduplicates { errorStrategy = { task.exitStatus in [143, 137, 104, 134, 139] ? 'retry' : 'finish' } - cpus = { check_max(5 * task.attempt, 'cpus') } - memory = { check_max(5.GB * task.attempt, 'memory') } - time = { check_max(6.h * task.attempt, 'time') } + cpus = { params.eager_maestro_check_max_func(5 * task.attempt, 'cpus') } + memory = { params.eager_maestro_check_max_func(5.GB * task.attempt, 'memory') } + time = { params.eager_maestro_check_max_func(6.h * task.attempt, 'time') } } withName: damageprofiler { cpus = 1 - memory = { check_max(5.GB * task.attempt, 'memory') } - time = { check_max(3.h * task.attempt, 'time') } + memory = { params.eager_maestro_check_max_func(5.GB * task.attempt, 'memory') } + time = { params.eager_maestro_check_max_func(3.h * task.attempt, 'time') } } withName: fastp { cpus = 8 - memory = { check_max(5.GB * task.attempt, 'memory') } - time = { check_max(3.h * task.attempt, 'time') } + memory = { params.eager_maestro_check_max_func(5.GB * task.attempt, 'memory') } + time = { params.eager_maestro_check_max_func(3.h * task.attempt, 'time') } } withName: fastqc { cpus = 2 - memory = { check_max(8.GB * task.attempt, 'memory') } - time = { check_max(6.h * task.attempt, 'time') } + memory = { params.eager_maestro_check_max_func(8.GB * task.attempt, 'memory') } + time = { params.eager_maestro_check_max_func(6.h * task.attempt, 'time') } } } } @@ -117,31 +123,31 @@ profiles { // Function to ensure that resource requirements don't go beyond // a maximum limit // FOR DSL1 PIPELINE ONLY! -def check_max(obj, type) { +params.eager_maestro_check_max_func = { obj, type -> if (type == 'memory') { try { - if (obj.compareTo(params.max_memory as nextflow.util.MemoryUnit) == 1) - return params.max_memory as nextflow.util.MemoryUnit + if (obj.compareTo(params.max_memory as MemoryUnit) == 1) + return params.max_memory as MemoryUnit else return obj - } catch (all) { + } catch (_) { println " ### ERROR ### Max memory '${params.max_memory}' is not valid! Using default value: $obj" return obj } } else if (type == 'time') { try { - if (obj.compareTo(params.max_time as nextflow.util.Duration) == 1) - return params.max_time as nextflow.util.Duration + if (obj.compareTo(params.max_time as Duration) == 1) + return params.max_time as Duration else return obj - } catch (all) { + } catch (_) { println " ### ERROR ### Max time '${params.max_time}' is not valid! Using default value: $obj" return obj } } else if (type == 'cpus') { try { return Math.min( obj, params.max_cpus as int ) - } catch (all) { + } catch (_) { println " ### ERROR ### Max cpus '${params.max_cpus}' is not valid! Using default value: $obj" return obj } diff --git a/conf/pipeline/methylseq/ku_sund_danhead.config b/conf/pipeline/methylseq/ku_sund_danhead.config index 872cab827..1e1ebd95e 100644 --- a/conf/pipeline/methylseq/ku_sund_danhead.config +++ b/conf/pipeline/methylseq/ku_sund_danhead.config @@ -11,6 +11,6 @@ process { stageInMode = 'copy' } withName: 'NFCORE_METHYLSEQ:METHYLSEQ:BISMARK:BISMARK_ALIGN' { - multicore = 1 + ext.args = '--multicore 1' } } diff --git a/conf/pipeline/multiplesequencealign/crg.config b/conf/pipeline/multiplesequencealign/crg.config index 791e56b2f..255e876bf 100644 --- a/conf/pipeline/multiplesequencealign/crg.config +++ b/conf/pipeline/multiplesequencealign/crg.config @@ -14,7 +14,7 @@ profiles { singularity { enabled = true envWhitelist = "CUDA_VISIBLE_DEVICES,NVIDIA_VISIBLE_DEVICES" - if (params.use_gpu) { singularity.runOptions = '--nv' } + runOptions = params.get('use_gpu', false) ? '--nv' : '' pullTimeout = "60m" } } diff --git a/conf/pipeline/proteinfold/nci_gadi.config b/conf/pipeline/proteinfold/nci_gadi.config index f07999c01..b82bb4620 100644 --- a/conf/pipeline/proteinfold/nci_gadi.config +++ b/conf/pipeline/proteinfold/nci_gadi.config @@ -12,8 +12,6 @@ profiles { // Define process resource limits process { executor = 'pbspro' - project = System.getenv("PROJECT") - storage = params.storage_account?.trim() ? params.storage_account : "scratch/${params.project}+gdata/${params.project}" module = 'singularity' cache = 'lenient' stageInMode = 'symlink' @@ -22,7 +20,6 @@ profiles { withName: 'RUN_ALPHAFOLD2|RUN_ALPHAFOLD2_PRED|RUN_ALPHAFOLD2_MSA' { queue = params.use_gpu ? 'gpuvolta' : 'normal' cpus = 48 - gpus = 4 time = '4h' memory = 380.GB } @@ -31,7 +28,6 @@ profiles { container = "nf-core/proteinfold_colabfold:1.1.1" queue = params.use_gpu ? 'gpuvolta' : 'normal' cpus = 48 - gpus = 4 time = '4h' memory = 380.GB } @@ -40,18 +36,16 @@ profiles { container = "nf-core/proteinfold_esmfold:1.1.1" queue = params.use_gpu ? 'gpuvolta' : 'normal' cpus = 48 - gpus = 4 time = '4h' memory = 380.GB } } // Write custom trace file with outputs required for SU calculation - def trace_timestamp = new java.util.Date().format('yyyy-MM-dd_HH-mm-ss') trace { enabled = true overwrite = false - file = "./gadi-nf-core-trace-${trace_timestamp}.txt" + file = "./gadi-nf-core-trace-${new java.util.Date().format('yyyy-MM-dd_HH-mm-ss')}.txt" fields = 'name,status,exit,duration,realtime,cpus,%cpu,memory,%mem,rss' } } diff --git a/conf/pipeline/sarek/cfc.config b/conf/pipeline/sarek/cfc.config index e43b81c2a..da6d0d997 100644 --- a/conf/pipeline/sarek/cfc.config +++ b/conf/pipeline/sarek/cfc.config @@ -1,5 +1,7 @@ // Profile config names for nf-core/configs +validation.ignoreParams = ['sarek_cfc_check_resource_func'] + params { // Specific nf-core/configs params config_profile_contact = 'Friederike Hanssen (@FriederikeHanssen)' @@ -9,34 +11,34 @@ params { // Specific nf-core/sarek process configuration process { withName:'StrelkaSingle|Strelka|StrelkaBP|MantaSingle|Manta' { - cpus = { check_resource( 20 * task.attempt) } - memory = { check_resource( 59.GB * task.attempt) } + cpus = { params.sarek_cfc_check_resource_func( 20 * task.attempt) } + memory = { params.sarek_cfc_check_resource_func( 59.GB * task.attempt) } } withName:'MSIsensor_scan|MSIsensor_msi' { - memory = { check_resource( 55.GB * task.attempt ) } + memory = { params.sarek_cfc_check_resource_func( 55.GB * task.attempt ) } } withName:BamQC { - memory = { check_resource( 372.GB * task.attempt) } + memory = { params.sarek_cfc_check_resource_func( 372.GB * task.attempt) } } withName:MapReads{ - cpus = { check_resource( 20 * task.attempt ) } - memory = { check_resource( 59.GB * task.attempt) } + cpus = { params.sarek_cfc_check_resource_func( 20 * task.attempt ) } + memory = { params.sarek_cfc_check_resource_func( 59.GB * task.attempt) } } } -def check_resource(obj) { +params.sarek_cfc_check_resource_func = { obj -> try { - if (obj.getClass() == nextflow.util.MemoryUnit && obj.compareTo(params.max_memory as nextflow.util.MemoryUnit) == 1) - return params.max_memory as nextflow.util.MemoryUnit - else if (obj.getClass() == nextflow.util.Duration && obj.compareTo(params.max_time as nextflow.util.Duration) == 1) - return params.max_time as nextflow.util.Duration + if (obj.getClass() == nextflow.util.MemoryUnit && obj.compareTo(params.max_memory as MemoryUnit) == 1) + return params.max_memory as MemoryUnit + else if (obj.getClass() == nextflow.util.Duration && obj.compareTo(params.max_time as Duration) == 1) + return params.max_time as Duration else if (obj.getClass() == java.lang.Integer) return Math.min(obj, params.max_cpus as int) else return obj - } catch (all) { + } catch (_) { println " ### ERROR ### Max params max_memory:'${params.max_memory}', max_time:'${params.max_time}' or max_cpus:'${params.max_cpus}' is not valid! Using default value: $obj" } } diff --git a/conf/pipeline/sarek/icr_davros.config b/conf/pipeline/sarek/icr_davros.config index c33486326..ec7e2772d 100644 --- a/conf/pipeline/sarek/icr_davros.config +++ b/conf/pipeline/sarek/icr_davros.config @@ -6,8 +6,4 @@ process { errorStrategy = { task.exitStatus in [104, 134, 137, 139, 141, 143, 255] ? 'retry' : 'finish' } maxRetries = 5 - withName: MapReads { - memory = { check_resource(12.GB) } - time = { check_resource(48.h * task.attempt) } - } } diff --git a/conf/pipeline/scflow/imperial.config b/conf/pipeline/scflow/imperial.config index e49f17608..39b514def 100644 --- a/conf/pipeline/scflow/imperial.config +++ b/conf/pipeline/scflow/imperial.config @@ -6,13 +6,13 @@ params { config_profile_contact = 'NA' // Analysis Resource Params - ctd_folder = "/rds/general/user/${USER}/projects/ukdrmultiomicsproject/live/Analyses/scFlowResources/refs/ctd" - ensembl_mappings = "/rds/general/user/${USER}/projects/ukdrmultiomicsproject/live/Analyses/scFlowResources/src/ensembl-ids/ensembl_mappings.tsv" + ctd_folder = "/rds/general/user/${System.getenv('USER')}/projects/ukdrmultiomicsproject/live/Analyses/scFlowResources/refs/ctd" + ensembl_mappings = "/rds/general/user/${System.getenv('USER')}/projects/ukdrmultiomicsproject/live/Analyses/scFlowResources/src/ensembl-ids/ensembl_mappings.tsv" } singularity { enabled = true autoMounts = true - cacheDir = "/rds/general/user/${USER}/projects/ukdrmultiomicsproject/live/.singularity-cache" - runOptions = "-B /rds/,/rdsgpfs/,/rds/general/user/${USER}/ephemeral/tmp/:/tmp,/rds/general/user/${USER}/ephemeral/tmp/:/var/tmp" + cacheDir = "/rds/general/user/${System.getenv('USER')}/projects/ukdrmultiomicsproject/live/.singularity-cache" + runOptions = "-B /rds/,/rdsgpfs/,/rds/general/user/${System.getenv('USER')}/ephemeral/tmp/:/tmp,/rds/general/user/${System.getenv('USER')}/ephemeral/tmp/:/var/tmp" } From df929f525f69b376b7a14d92f5b1b364dac8eaa1 Mon Sep 17 00:00:00 2001 From: "Maxime U. Garcia" Date: Tue, 24 Feb 2026 10:17:11 +0100 Subject: [PATCH 03/57] fix Alliance_canada --- conf/aliance_canada/narval.config | 13 +++++ conf/aliance_canada/nibi.config | 13 +++++ conf/aliance_canada/rorqual.config | 13 +++++ conf/aliance_canada/trillium.config | 15 ++++++ conf/alliance_canada.config | 80 +++++++++-------------------- 5 files changed, 77 insertions(+), 57 deletions(-) create mode 100644 conf/aliance_canada/narval.config create mode 100644 conf/aliance_canada/nibi.config create mode 100644 conf/aliance_canada/rorqual.config create mode 100644 conf/aliance_canada/trillium.config diff --git a/conf/aliance_canada/narval.config b/conf/aliance_canada/narval.config new file mode 100644 index 000000000..83ca6a42a --- /dev/null +++ b/conf/aliance_canada/narval.config @@ -0,0 +1,13 @@ +// Used by https://github.com/nf-core/configs/blob/master/conf/aliance_canada.config +// Updates settings for Narval + +params.config_profile_description = 'Alliance Canada (Narval) cluster profile provided by nf-core/configs.' +params.max_memory = 249.GB +params.max_cpus = 64 +process { + resourceLimits = [ + memory: 249.GB, + cpus: 64, + time: 168.h + ] +} diff --git a/conf/aliance_canada/nibi.config b/conf/aliance_canada/nibi.config new file mode 100644 index 000000000..721244e02 --- /dev/null +++ b/conf/aliance_canada/nibi.config @@ -0,0 +1,13 @@ +// Used by https://github.com/nf-core/configs/blob/master/conf/aliance_canada.config +// Updates settings for Nibi + +params.config_profile_description = 'Alliance Canada (Nibi) cluster profile provided by nf-core/configs.' +params.max_memory = 750.GB +params.max_cpus = 192 +process { + resourceLimits = [ + memory: 750.GB, + cpus: 192, + time: 168.h + ] +} diff --git a/conf/aliance_canada/rorqual.config b/conf/aliance_canada/rorqual.config new file mode 100644 index 000000000..ed703a1ef --- /dev/null +++ b/conf/aliance_canada/rorqual.config @@ -0,0 +1,13 @@ +// Used by https://github.com/nf-core/configs/blob/master/conf/aliance_canada.config +// Updates settings for Rorqual + +params.config_profile_description = 'Alliance Canada (Rorqual) cluster profile provided by nf-core/configs.' +params.max_memory = 750.GB +params.max_cpus = 192 +process { + resourceLimits = [ + memory: 750.GB, + cpus: 192, + time: 168.h + ] +} diff --git a/conf/aliance_canada/trillium.config b/conf/aliance_canada/trillium.config new file mode 100644 index 000000000..33d7478f4 --- /dev/null +++ b/conf/aliance_canada/trillium.config @@ -0,0 +1,15 @@ +// Used by https://github.com/nf-core/configs/blob/master/conf/aliance_canada.config +// Updates settings for Trillium + +params.config_profile_description = 'Alliance Canada (Trillium) cluster profile provided by nf-core/configs.' +params.max_memory = null +params.max_cpus = null +process { + clusterOptions = "--account=${System.getenv('SLURM_ACCOUNT')} --nodes=1" + resourceLimits = [ + time: 168.h + ] +} +executor { + queueSize = 500 +} diff --git a/conf/alliance_canada.config b/conf/alliance_canada.config index 3b963fcbe..56a41536a 100644 --- a/conf/alliance_canada.config +++ b/conf/alliance_canada.config @@ -41,70 +41,36 @@ executor { // Cluster name is available as environment variable // If not found, default to narval as it has the lowest limits -hostname = "narval" -try { - hostname = "${System.getenv('HOSTNAME')}" -} catch (java.io.IOException e) { - System.err.println("WARNING: Could not determine current cluster, defaulting to narval") -} - -// Cluster Narval -if (hostname.startsWith("narval")) { - params.config_profile_description = 'Alliance Canada (Narval) cluster profile provided by nf-core/configs.' - params.max_memory = 249.GB - params.max_cpus = 64 - process { - resourceLimits = [ - memory: 249.GB, - cpus: 64, - time: 168.h - ] +includeConfig ({ + def hostname = "narval" + try { + hostname = "${System.getenv('HOSTNAME')}" } -} - -// Cluster Rorqual -if (hostname.startsWith("rorqual")) { - params.config_profile_description = 'Alliance Canada (Rorqual) cluster profile provided by nf-core/configs.' - params.max_memory = 750.GB - params.max_cpus = 192 - process { - resourceLimits = [ - memory: 750.GB, - cpus: 192, - time: 168.h - ] + catch (IOException _e) { + System.err.println("WARNING: Could not determine current cluster, defaulting to narval") + } + // Cluster Narval + if (hostname.startsWith("narval")) { + return "alliance_canada/narval.config" } -} -// Cluster Trillium -if (hostname.startsWith("tri")) { - params.config_profile_description = 'Alliance Canada (Trillium) cluster profile provided by nf-core/configs.' - params.max_memory = null - params.max_cpus = null - process { - clusterOptions = "--account=${System.getenv('SLURM_ACCOUNT')} --nodes=1" - resourceLimits = [ - time: 168.h - ] + // Cluster Nibi + if (hostname.contains("nibi")) { + return "alliance_canada/nibi.config" } - executor { - queueSize = 500 + + // Cluster Rorqual + if (hostname.startsWith("rorqual")) { + return "alliance_canada/rorqual.config" } -} -// Cluster Nibi -if (hostname.contains("nibi")) { - params.config_profile_description = 'Alliance Canada (Nibi) cluster profile provided by nf-core/configs.' - params.max_memory = 750.GB - params.max_cpus = 192 - process { - resourceLimits = [ - memory: 750.GB, - cpus: 192, - time: 168.h - ] + // Cluster Trillium + if (hostname.startsWith("tri")) { + return "alliance_canada/trillium.config" } -} + + return "/dev/null" +}.call()) // Cluster Fir // not sure what the hostname is so set it as a profile From 0dfa7f28c012b7a11d18a4a1bbfa02db09e1b5cf Mon Sep 17 00:00:00 2001 From: "Maxime U. Garcia" Date: Tue, 24 Feb 2026 10:22:02 +0100 Subject: [PATCH 04/57] fix BI --- conf/bi.config | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/conf/bi.config b/conf/bi.config index b04251921..b080e8d43 100644 --- a/conf/bi.config +++ b/conf/bi.config @@ -5,10 +5,14 @@ params{ } params.globalConfig = System.getenv('NXF_GLOBAL_CONFIG') -if(params.globalConfig == null) -{ - def errorMessage = "WARNING: For bi.config requires NXF_GLOBAL_CONFIG env var to be set. Point it to global.config file if you want to use this profile." - System.err.println(errorMessage) -}else{ - includeConfig params.globalConfig -} + +includeConfig ({ + if(params.globalConfig == null) { + def errorMessage = "WARNING: For bi.config requires NXF_GLOBAL_CONFIG env var to be set. Point it to global.config file if you want to use this profile." + System.err.println(errorMessage) + } else { + return params.globalConfig + } + + return "/dev/null" +}.call()) From 620bcabc3d3ee4bf6c5146c0011671ac7fbed4a6 Mon Sep 17 00:00:00 2001 From: "Maxime U. Garcia" Date: Tue, 24 Feb 2026 10:27:16 +0100 Subject: [PATCH 05/57] fix bigpurple --- conf/bigpurple.config | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/conf/bigpurple.config b/conf/bigpurple.config index 094688e07..c99f57107 100644 --- a/conf/bigpurple.config +++ b/conf/bigpurple.config @@ -1,11 +1,12 @@ -singularityDir = "/gpfs/scratch/${USER}/singularity_images_nextflow" - params { config_profile_description = """ NYU School of Medicine BigPurple cluster profile provided by nf-core/configs. module load both singularity/3.1 and squashfs-tools/4.3 before running the pipeline with this profile!! Run from your scratch or lab directory - Nextflow makes a lot of files!! - Also consider running the pipeline on a compute node (srun --pty /bin/bash -t=01:00:00) the first time, as it will be pulling the docker image, which will be converted into a singularity image, which is heavy on the login node and will take some time. Subsequent runs can be done on the login node, as the docker image will only be pulled and converted once. By default the images will be stored in ${singularityDir} + Also consider running the pipeline on a compute node (srun --pty /bin/bash -t=01:00:00) the first time, as it will be pulling the docker image, + which will be converted into a singularity image, which is heavy on the login node and will take some time. + Subsequent runs can be done on the login node, as the docker image will only be pulled and converted once. + By default the images will be stored in /gpfs/scratch/${System.getenv('USER')}/singularity_images_nextflow """.stripIndent() config_profile_contact = 'Tobias Schraink (@tobsecret)' config_profile_url = 'https://github.com/nf-core/configs/blob/master/docs/bigpurple.md' @@ -14,7 +15,7 @@ params { singularity { enabled = true autoMounts = true - cacheDir = singularityDir + cacheDir = "/gpfs/scratch/${System.getenv('USER')}/singularity_images_nextflow" } process { From 6274be53568389b159bd3780cd2b947ed9b0d694 Mon Sep 17 00:00:00 2001 From: "Maxime U. Garcia" Date: Tue, 24 Feb 2026 10:29:55 +0100 Subject: [PATCH 06/57] fix bih --- conf/bih.config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/bih.config b/conf/bih.config index 2005e52f1..b7449bb17 100644 --- a/conf/bih.config +++ b/conf/bih.config @@ -23,11 +23,11 @@ process { apptainer { enabled = true autoMounts = true - cacheDir = "${params.scratch}/apptainer_img_${USER}" + cacheDir = "${params.scratch}/apptainer_img_${System.getenv('USER')}" } cleanup = true -workDir = "${params.scratch}/work_${USER}" +workDir = "${params.scratch}/work_${System.getenv('USER')}" profiles { debug { From e8ad0cabc7e2315b1281129401caccdc02a2f30f Mon Sep 17 00:00:00 2001 From: "Maxime U. Garcia" Date: Tue, 24 Feb 2026 10:32:06 +0100 Subject: [PATCH 07/57] {USER} -> {System.getenv('USER')} --- conf/binac.config | 2 +- conf/binac2.config | 2 +- conf/biowulf.config | 2 +- conf/dirac.config | 4 ++-- conf/einstein.config | 4 ++-- conf/imperial.config | 2 +- conf/lovelace.config | 4 ++-- conf/marjorie.config | 4 ++-- conf/pipeline/scflow/imperial.config | 8 ++++---- conf/ucl_cscluster.config | 2 +- conf/unsw_katana.config | 4 ++-- docs/dirac.md | 6 +++--- docs/lovelace.md | 6 +++--- docs/marjorie.md | 6 +++--- docs/mssm.md | 2 +- 15 files changed, 29 insertions(+), 29 deletions(-) diff --git a/conf/binac.config b/conf/binac.config index bca26c758..f69b43a10 100644 --- a/conf/binac.config +++ b/conf/binac.config @@ -9,7 +9,7 @@ params { singularity { enabled = true libraryDir = "/beegfs/work/container/apptainer_library" - cacheDir = "/beegfs/work/container/apptainer_cache/${USER}" + cacheDir = "/beegfs/work/container/apptainer_cache/${System.getenv('USER')}" } process { diff --git a/conf/binac2.config b/conf/binac2.config index 8fd4b5d74..1c7cfb477 100644 --- a/conf/binac2.config +++ b/conf/binac2.config @@ -22,7 +22,7 @@ profiles { enabled = true autoMounts = true pullTimeout = '120m' - cacheDir = "/pfs/10/project/apptainer_cache/${USER}" + cacheDir = "/pfs/10/project/apptainer_cache/${System.getenv('USER')}" envWhitelist = 'CUDA_VISIBLE_DEVICES' } diff --git a/conf/biowulf.config b/conf/biowulf.config index 7814a0333..774a4abea 100644 --- a/conf/biowulf.config +++ b/conf/biowulf.config @@ -25,7 +25,7 @@ report.enabled = true singularity { enabled = true autoMounts = true - cacheDir = "/data/${USER}/nxf_singularity_cache" + cacheDir = "/data/${System.getenv('USER')}/nxf_singularity_cache" libraryDir = "/fdb/nxf/singularity-images" envWhitelist = 'https_proxy,http_proxy,ftp_proxy,DISPLAY,SLURM_JOBID,SINGULARITY_BINDPATH' } diff --git a/conf/dirac.config b/conf/dirac.config index 00878c102..75e41d1b0 100644 --- a/conf/dirac.config +++ b/conf/dirac.config @@ -18,7 +18,7 @@ process { executor = 'slurm' queue = 'compute' maxRetries = 2 - scratch = "/scratch/${USER}" + scratch = "/scratch/${System.getenv('USER')}" } executor { @@ -30,7 +30,7 @@ apptainer { enabled = true autoMounts = true ociAutoPull = true - cacheDir = "/scratch/${USER}" + cacheDir = "/scratch/${System.getenv('USER')}" pullTimeout = '600 min' runOptions = "--no-mount hostfs" } diff --git a/conf/einstein.config b/conf/einstein.config index b2cda3677..167d1e096 100755 --- a/conf/einstein.config +++ b/conf/einstein.config @@ -21,7 +21,7 @@ process { executor = 'slurm' scratch = true maxRetries = 3 - scratch = "/scratch/users/${USER}" + scratch = "/scratch/users/${System.getenv('USER')}" } executor { @@ -32,6 +32,6 @@ executor { apptainer { enabled = true autoMounts = true - cacheDir = "/scratch/users/${USER}" + cacheDir = "/scratch/users/${System.getenv('USER')}" pullTimeout = '600 min' } diff --git a/conf/imperial.config b/conf/imperial.config index a311c48f2..59792ba9f 100644 --- a/conf/imperial.config +++ b/conf/imperial.config @@ -109,5 +109,5 @@ executor { singularity { enabled = true autoMounts = true - runOptions = "-B /rds/,/rds/general/user/${USER}/ephemeral/tmp/:/tmp,/rds/general/user/${USER}/ephemeral/tmp/:/var/tmp" + runOptions = "-B /rds/,/rds/general/user/${System.getenv('USER')}/ephemeral/tmp/:/tmp,/rds/general/user/${System.getenv('USER')}/ephemeral/tmp/:/var/tmp" } diff --git a/conf/lovelace.config b/conf/lovelace.config index 8e9357c40..ab6306cf2 100644 --- a/conf/lovelace.config +++ b/conf/lovelace.config @@ -18,7 +18,7 @@ process { executor = 'slurm' queue = 'compute' maxRetries = 2 - scratch = "/scratch/${USER}" + scratch = "/scratch/${System.getenv('USER')}" } executor { @@ -30,6 +30,6 @@ apptainer { enabled = true autoMounts = true ociAutoPull = true - cacheDir = "/scratch/${USER}" + cacheDir = "/scratch/${System.getenv('USER')}" pullTimeout = '600 min' } diff --git a/conf/marjorie.config b/conf/marjorie.config index e9f97ce32..d009881dc 100755 --- a/conf/marjorie.config +++ b/conf/marjorie.config @@ -18,7 +18,7 @@ process { executor = 'slurm' queue = 'compute' maxRetries = 2 - scratch = "/scratch/${USER}" + scratch = "/scratch/${System.getenv('USER')}" } executor { @@ -30,6 +30,6 @@ apptainer { enabled = true autoMounts = true ociAutoPull = true - cacheDir = "/scratch/${USER}" + cacheDir = "/scratch/${System.getenv('USER')}" pullTimeout = '600 min' } diff --git a/conf/pipeline/scflow/imperial.config b/conf/pipeline/scflow/imperial.config index e49f17608..39b514def 100644 --- a/conf/pipeline/scflow/imperial.config +++ b/conf/pipeline/scflow/imperial.config @@ -6,13 +6,13 @@ params { config_profile_contact = 'NA' // Analysis Resource Params - ctd_folder = "/rds/general/user/${USER}/projects/ukdrmultiomicsproject/live/Analyses/scFlowResources/refs/ctd" - ensembl_mappings = "/rds/general/user/${USER}/projects/ukdrmultiomicsproject/live/Analyses/scFlowResources/src/ensembl-ids/ensembl_mappings.tsv" + ctd_folder = "/rds/general/user/${System.getenv('USER')}/projects/ukdrmultiomicsproject/live/Analyses/scFlowResources/refs/ctd" + ensembl_mappings = "/rds/general/user/${System.getenv('USER')}/projects/ukdrmultiomicsproject/live/Analyses/scFlowResources/src/ensembl-ids/ensembl_mappings.tsv" } singularity { enabled = true autoMounts = true - cacheDir = "/rds/general/user/${USER}/projects/ukdrmultiomicsproject/live/.singularity-cache" - runOptions = "-B /rds/,/rdsgpfs/,/rds/general/user/${USER}/ephemeral/tmp/:/tmp,/rds/general/user/${USER}/ephemeral/tmp/:/var/tmp" + cacheDir = "/rds/general/user/${System.getenv('USER')}/projects/ukdrmultiomicsproject/live/.singularity-cache" + runOptions = "-B /rds/,/rdsgpfs/,/rds/general/user/${System.getenv('USER')}/ephemeral/tmp/:/tmp,/rds/general/user/${System.getenv('USER')}/ephemeral/tmp/:/var/tmp" } diff --git a/conf/ucl_cscluster.config b/conf/ucl_cscluster.config index c4da6ba1f..d28da747d 100644 --- a/conf/ucl_cscluster.config +++ b/conf/ucl_cscluster.config @@ -12,7 +12,7 @@ executor { singularity.runOptions = "-B ${HOME},${PWD}" process { - scratch = "/scratch0/${USER}/" + scratch = "/scratch0/${System.getenv('USER')}/" executor = 'sge' penv = { task.cpus > 1 ? 'smp' : '' } clusterOptions = { diff --git a/conf/unsw_katana.config b/conf/unsw_katana.config index 8a4993206..c03b52202 100644 --- a/conf/unsw_katana.config +++ b/conf/unsw_katana.config @@ -63,12 +63,12 @@ process { // Set the cache directory for Singularity and Apptainer singularity { autoMounts = true - cacheDir = "/srv/scratch/${USER}/.images" + cacheDir = "/srv/scratch/${System.getenv('USER')}/.images" } apptainer { enabled = true autoMounts = true - cacheDir = "/srv/scratch/${USER}/.images" + cacheDir = "/srv/scratch/${System.getenv('USER')}/.images" } // Docker is not supported on this cluster diff --git a/docs/dirac.md b/docs/dirac.md index 387c2a3fc..d8a474f9b 100644 --- a/docs/dirac.md +++ b/docs/dirac.md @@ -28,8 +28,8 @@ It is best practices to set the environment variables when running on the HPC, by adding the following to your `~./bashrc` profile: ```bash -export NXF_CACHE_DIR=/scratch/${USER} -export NXF_WORK=/scratch/${USER} -export APPTAINER_CACHEDIR=/scratch/${USER} +export NXF_CACHE_DIR=/scratch/${System.getenv('USER')} +export NXF_WORK=/scratch/${System.getenv('USER')} +export APPTAINER_CACHEDIR=/scratch/${System.getenv('USER')} export NXF_APPTAINER_CACHEDIR=$APPTAINER_CACHEDIR ``` diff --git a/docs/lovelace.md b/docs/lovelace.md index 67a6ceaf1..bf4459bc4 100644 --- a/docs/lovelace.md +++ b/docs/lovelace.md @@ -28,8 +28,8 @@ It is best practices to set the environment variables when running on the HPC, by adding the following to your `~./bashrc` profile: ```bash -export NXF_CACHE_DIR=/scratch/${USER} -export NXF_WORK=/scratch/${USER} -export APPTAINER_CACHEDIR=/scratch/${USER} +export NXF_CACHE_DIR=/scratch/${System.getenv('USER')} +export NXF_WORK=/scratch/${System.getenv('USER')} +export APPTAINER_CACHEDIR=/scratch/${System.getenv('USER')} export NXF_APPTAINER_CACHEDIR=$APPTAINER_CACHEDIR ``` diff --git a/docs/marjorie.md b/docs/marjorie.md index 328ef3688..8af7a5928 100644 --- a/docs/marjorie.md +++ b/docs/marjorie.md @@ -28,8 +28,8 @@ It is best practices to set the environment variables when running on the HPC, by adding the following to your `~./bashrc` profile: ```bash -export NXF_CACHE_DIR=/scratch/${USER} -export NXF_WORK=/scratch/${USER} -export APPTAINER_CACHEDIR=/scratch/${USER} +export NXF_CACHE_DIR=/scratch/${System.getenv('USER')} +export NXF_WORK=/scratch/${System.getenv('USER')} +export APPTAINER_CACHEDIR=/scratch/${System.getenv('USER')} export NXF_APPTAINER_CACHEDIR=$APPTAINER_CACHEDIR ``` diff --git a/docs/mssm.md b/docs/mssm.md index 77c37c998..752e2bdd0 100644 --- a/docs/mssm.md +++ b/docs/mssm.md @@ -105,7 +105,7 @@ cd $PROJ_DIR nextflow run $NFC_PIPE \ -r $NFC_VER \ -profile $NFC_PROFILE \ - -w /sc/arion/scratch/${USER}/work \ + -w /sc/arion/scratch/${System.getenv('USER')}/work \ -c $PROJ_DIR/custom.config \ --input $SAMPLESHEET \ --outdir $OUTDIR \ From 4c988865e5cfcf93586ed5acacbfb11e5ef5decc Mon Sep 17 00:00:00 2001 From: "Maxime U. Garcia" Date: Tue, 24 Feb 2026 10:36:24 +0100 Subject: [PATCH 08/57] USER -> {System.getenv('USER')} --- conf/biowulf.config | 2 +- conf/janelia.config | 2 +- conf/kaust.config | 2 +- conf/maestro.config | 2 +- conf/qmul_apocrita.config | 2 +- conf/seadragon.config | 8 ++++---- conf/utd_ganymede.config | 4 ++-- conf/utd_juno.config | 4 ++-- 8 files changed, 13 insertions(+), 13 deletions(-) diff --git a/conf/biowulf.config b/conf/biowulf.config index 774a4abea..9912c7b44 100644 --- a/conf/biowulf.config +++ b/conf/biowulf.config @@ -31,7 +31,7 @@ singularity { } env { - SINGULARITY_CACHEDIR = "/data/$USER/.singularity" + SINGULARITY_CACHEDIR = "/data/${System.getenv('USER')}/.singularity" PYTHONNOUSERSITE = 1 OMP_NUM_THREADS = 1 OPENBLAS_NUM_THREADS = 1 diff --git a/conf/janelia.config b/conf/janelia.config index f742fd25b..6a5129804 100644 --- a/conf/janelia.config +++ b/conf/janelia.config @@ -27,7 +27,7 @@ process { time: 720.h ] executor = 'lsf' - scratch = '/scratch/$USER' + scratch = '/scratch/${System.getenv('USER')}' clusterOptions = params.lsf_opts } diff --git a/conf/kaust.config b/conf/kaust.config index ba84b531c..c9a37050f 100755 --- a/conf/kaust.config +++ b/conf/kaust.config @@ -17,7 +17,7 @@ singularity { // Use existing images from the centralized library, if available libraryDir = "/biocorelab/BIX/resources/singularity/images/" // Download images that are missing from the library to user space - cacheDir = "/ibex/user/$USER/.singularity/nf_images/" + cacheDir = "/ibex/user/${System.getenv('USER')}/.singularity/nf_images/" } process { diff --git a/conf/maestro.config b/conf/maestro.config index 4492fe506..b1a5300ad 100644 --- a/conf/maestro.config +++ b/conf/maestro.config @@ -7,7 +7,7 @@ params { singularity { enabled = true autoMounts = true - runOptions = '--home $HOME:/home/$USER --bind /pasteur' + runOptions = '--home $HOME:/home/${System.getenv('USER')} --bind /pasteur' } profiles { diff --git a/conf/qmul_apocrita.config b/conf/qmul_apocrita.config index 950004165..0b064d177 100644 --- a/conf/qmul_apocrita.config +++ b/conf/qmul_apocrita.config @@ -33,5 +33,5 @@ process { singularity { enabled = true autoMounts = true - cacheDir = "/data/scratch/$USER/.apptainer/pull" + cacheDir = "/data/scratch/${System.getenv('USER')}/.apptainer/pull" } diff --git a/conf/seadragon.config b/conf/seadragon.config index 074bfb73f..48d921335 100644 --- a/conf/seadragon.config +++ b/conf/seadragon.config @@ -8,9 +8,9 @@ params { } env { - SINGULARITY_CACHEDIR="/home/$USER/.singularity/cache" - APPTAINER_TMPDIR="/home/$USER/.apptainer/tmp" - APPTAINER_CACHEDIR="/home/$USER/.apptainer/cache" + SINGULARITY_CACHEDIR="/home/${System.getenv('USER')}/.singularity/cache" + APPTAINER_TMPDIR="/home/${System.getenv('USER')}/.apptainer/tmp" + APPTAINER_CACHEDIR="/home/${System.getenv('USER')}/.apptainer/cache" } singularity { @@ -18,7 +18,7 @@ singularity { envWhitelist='APPTAINERENV_NXF_TASK_WORKDIR,APPTAINERENV_NXF_DEBUG,APPTAINERENV_LD_LIBRARY_PATH,SINGULARITY_BINDPATH,LD_LIBRARY_PATH,TMPDIR,SINGULARITY_TMPDIR' autoMounts = true runOptions = '-B ${TMPDIR:-/tmp}' - cacheDir = "/home/$USER/.singularity/cache" + cacheDir = "/home/${System.getenv('USER')}/.singularity/cache" } def membership = "groups".execute().text diff --git a/conf/utd_ganymede.config b/conf/utd_ganymede.config index 5869eba65..ea95c0912 100644 --- a/conf/utd_ganymede.config +++ b/conf/utd_ganymede.config @@ -8,14 +8,14 @@ params { } env { - SINGULARITY_CACHEDIR="/home/$USER/scratch/singularity" + SINGULARITY_CACHEDIR="/home/${System.getenv('USER')}/scratch/singularity" } singularity { enabled = true envWhitelist='SINGULARITY_BINDPATH,LD_LIBRARY_PATH' autoMounts = true - cacheDir = "/home/$USER/scratch/singularity" + cacheDir = "/home/${System.getenv('USER')}/scratch/singularity" } def membership = "groups".execute().text diff --git a/conf/utd_juno.config b/conf/utd_juno.config index 373e5f6f1..8360b886a 100644 --- a/conf/utd_juno.config +++ b/conf/utd_juno.config @@ -7,7 +7,7 @@ params { } env { - SINGULARITY_CACHEDIR="/home/$USER/scratch/singularity" + SINGULARITY_CACHEDIR="/home/${System.getenv('USER')}/scratch/singularity" } @@ -67,7 +67,7 @@ executor { singularity { enabled = true autoMounts = true - cacheDir = "/home/$USER/scratch/singularity" + cacheDir = "/home/${System.getenv('USER')}/scratch/singularity" } process { From 2862ea45c8d1a5930e4422b4a90a90a2772ef6f4 Mon Sep 17 00:00:00 2001 From: "Maxime U. Garcia" Date: Tue, 24 Feb 2026 10:39:56 +0100 Subject: [PATCH 09/57] fix bluebear --- conf/bluebear.config | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/conf/bluebear.config b/conf/bluebear.config index 656f59b71..6f963a411 100644 --- a/conf/bluebear.config +++ b/conf/bluebear.config @@ -1,5 +1,3 @@ -def scratch_dir = "/scratch/${System.getenv("USER")}" - params { // Profile config config_profile_description = 'BlueBEAR cluster profile' @@ -16,13 +14,13 @@ params { cleanup = true // Ensure TMPDIR is set to the node-specific scratch directory -env.TMPDIR = "${scratch_dir}" +env.TMPDIR = "/scratch/${System.getenv('USER')}" // Enable Singularity (via Apptainer) for all processes singularity { enabled = true autoMount = true - runOptions = "-B ${scratch_dir}" + runOptions = "-B /scratch/${System.getenv('USER')}" } process { @@ -37,7 +35,7 @@ process { clusterOptions = "--account ${System.getenv("SLURM_JOB_ACCOUNT")}" // Ensure scratch directory exists - beforeScript = "mkdir -p ${scratch_dir}" + beforeScript = "mkdir -p /scratch/${System.getenv('USER')}" } executor { From 946aa69bc03e9a6cc5a8953bfaed5fd6a9fc26e4 Mon Sep 17 00:00:00 2001 From: "Maxime U. Garcia" Date: Tue, 24 Feb 2026 10:44:18 +0100 Subject: [PATCH 10/57] fix cannon --- conf/cannon.config | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/conf/cannon.config b/conf/cannon.config index 2331b81ea..1ffcacca3 100644 --- a/conf/cannon.config +++ b/conf/cannon.config @@ -23,19 +23,16 @@ process { ] scratch = true queue = { - switch (true) { - case { task.memory >= 1000.GB && task.time >= 3.d }: - return 'bigmem_intermediate' - case { task.memory >= 1000.GB }: - return 'bigmem' - case { task.memory >= 184.GB && task.time >= 3.d }: - return 'intermediate' - case { task.memory >= 184.GB }: - return 'sapphire' - case { task.time >= 3.d }: - return 'intermediate' - default: - return 'shared' - } + if (task.memory >= 1000.GB && task.time >= 3.d) { + return 'bigmem_intermediate' + } else if (task.memory >= 1000.GB) { + return 'bigmem' + } else if (task.memory >= 184.GB && task.time >= 3.d) { + return 'intermediate' + } else if (task.memory >= 184.GB) { + return 'sapphire' + } else if (task.time >= 3.d) { + return 'intermediate' + } else return 'shared' } } From 75417a0579bf0704eee1a2b38ba435d39cb00920 Mon Sep 17 00:00:00 2001 From: "Maxime U. Garcia" Date: Tue, 24 Feb 2026 10:46:03 +0100 Subject: [PATCH 11/57] HOME -> {System.getenv('HOME')} --- conf/ceci_dragon2.config | 2 +- conf/ceci_nic5.config | 2 +- conf/maestro.config | 2 +- conf/mana.config | 2 +- conf/nygc.config | 2 +- conf/pe2.config | 2 +- conf/qmul_apocrita.config | 2 +- conf/ucl_cscluster.config | 2 +- conf/ucl_myriad.config | 4 ++-- conf/vsc_calcua.config | 2 +- 10 files changed, 11 insertions(+), 11 deletions(-) diff --git a/conf/ceci_dragon2.config b/conf/ceci_dragon2.config index 4bfbcc610..86c0c406a 100644 --- a/conf/ceci_dragon2.config +++ b/conf/ceci_dragon2.config @@ -37,7 +37,7 @@ params { */ singularity { autoMounts = true - cacheDir = "${HOME}/.cache/singularity" + cacheDir = "${System.getenv('HOME')}/.cache/singularity" enabled = true pullTimeout = 3.hours } diff --git a/conf/ceci_nic5.config b/conf/ceci_nic5.config index 049ec0900..c19285c13 100644 --- a/conf/ceci_nic5.config +++ b/conf/ceci_nic5.config @@ -37,7 +37,7 @@ params { */ singularity { autoMounts = true - cacheDir = "${HOME}/.cache/singularity" + cacheDir = "${System.getenv('HOME')}/.cache/singularity" enabled = true pullTimeout = 3.hours } diff --git a/conf/maestro.config b/conf/maestro.config index b1a5300ad..fb0f295b6 100644 --- a/conf/maestro.config +++ b/conf/maestro.config @@ -7,7 +7,7 @@ params { singularity { enabled = true autoMounts = true - runOptions = '--home $HOME:/home/${System.getenv('USER')} --bind /pasteur' + runOptions = '--home ${System.getenv('HOME')}:/home/${System.getenv('USER')} --bind /pasteur' } profiles { diff --git a/conf/mana.config b/conf/mana.config index 1555b4b17..e6e07e94b 100644 --- a/conf/mana.config +++ b/conf/mana.config @@ -21,6 +21,6 @@ process { singularity { enabled = true - cacheDir = "${HOME}/.singularity_images_cache" + cacheDir = "${System.getenv('HOME')}/.singularity_images_cache" autoMounts = true } diff --git a/conf/nygc.config b/conf/nygc.config index b36e11f89..9f14af319 100644 --- a/conf/nygc.config +++ b/conf/nygc.config @@ -1,4 +1,4 @@ -singularityDir = "${HOME}/.singularity/singularity_images_nextflow" +singularityDir = "${System.getenv('HOME')}/.singularity/singularity_images_nextflow" singularity { diff --git a/conf/pe2.config b/conf/pe2.config index 05ceab01f..88c7b26c2 100644 --- a/conf/pe2.config +++ b/conf/pe2.config @@ -1,4 +1,4 @@ -singularityDir = "${HOME}/.singularity/singularity_images_nextflow" +singularityDir = "${System.getenv('HOME')}/.singularity/singularity_images_nextflow" singularity { diff --git a/conf/qmul_apocrita.config b/conf/qmul_apocrita.config index 0b064d177..9a13a2ef4 100644 --- a/conf/qmul_apocrita.config +++ b/conf/qmul_apocrita.config @@ -9,7 +9,7 @@ executor { name = 'sge' } -apptainer.runOptions = "-B ${HOME},${PWD}" +apptainer.runOptions = "-B ${System.getenv('HOME')},${PWD}" process { diff --git a/conf/ucl_cscluster.config b/conf/ucl_cscluster.config index d28da747d..8554ac8e9 100644 --- a/conf/ucl_cscluster.config +++ b/conf/ucl_cscluster.config @@ -9,7 +9,7 @@ executor { name = 'sge' } -singularity.runOptions = "-B ${HOME},${PWD}" +singularity.runOptions = "-B ${System.getenv('HOME')},${PWD}" process { scratch = "/scratch0/${System.getenv('USER')}/" diff --git a/conf/ucl_myriad.config b/conf/ucl_myriad.config index 39f4ae6b1..a727440f6 100644 --- a/conf/ucl_myriad.config +++ b/conf/ucl_myriad.config @@ -26,6 +26,6 @@ process { singularity { enabled = true autoMounts = true - cacheDir = "${HOME}/Scratch/.apptainer/pull" - runOptions = "-B ${HOME},${PWD} --no-mount /scratch --writable-tmpfs" + cacheDir = "${System.getenv('HOME')}/Scratch/.apptainer/pull" + runOptions = "-B ${System.getenv('HOME')},${PWD} --no-mount /scratch --writable-tmpfs" } diff --git a/conf/vsc_calcua.config b/conf/vsc_calcua.config index cd3310efa..41c2dcca6 100644 --- a/conf/vsc_calcua.config +++ b/conf/vsc_calcua.config @@ -12,7 +12,7 @@ cleanup = true // Check if environment variables for singularity/apptainer/nextflow cache and tmp dirs are set: // - APPTAINER_TMPDIR/SINGULARITY_TMPDIR (warn if missing, apptainer defaults to $TMPDIR or /tmp) -// - APPTAINER_CACHEDIR/SINGULARITY_CACHEDIR (exit with error if missing, apptainer would default to $HOME otherwise) +// - APPTAINER_CACHEDIR/SINGULARITY_CACHEDIR (exit with error if missing, apptainer would default to ${System.getenv('HOME')} otherwise) // - NXF_APPTAINER_CACHEDIR/NXF_SINGULARITY_CACHEDIR (warn and set to $scratch_dir/apptainer/nextflow_cache if missing) // Note that only the third env var can be set inside of this config file (cacheDir), because // the env scope only provides env vars to tasks, not to the launch environment. From e4d2a4654c6d226d778a6322a2a7db1f864f3a57 Mon Sep 17 00:00:00 2001 From: "Maxime U. Garcia" Date: Tue, 24 Feb 2026 10:47:59 +0100 Subject: [PATCH 12/57] fix ceres --- conf/ceres.config | 35 ++++++++++++++++------------------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/conf/ceres.config b/conf/ceres.config index 21acd48c1..8d3446e64 100644 --- a/conf/ceres.config +++ b/conf/ceres.config @@ -22,25 +22,22 @@ process { executor = 'slurm' scratch = true queue = { - switch (task.memory) { - case { it >= 216.GB }: - switch (task.time) { - case { it >= 7.d }: - return 'longmem' - default: - return 'mem' - } - default: - switch (task.time) { - case { it >= 21.d }: - return 'long60' - case { it >= 7.d }: - return 'long' - case { it >= 48.h }: - return 'medium' - default: - return 'short' - } + if (task.memory >= 216.GB) { + if (task.time >= 7.d) { + return 'longmem' + } else { + return 'mem' + } + } else { + if (task.time >= 21.d) { + return 'long60' + } else if (task.time >= 7.d) { + return 'long' + } else if (task.time >= 48.h) { + return 'medium' + } else { + return 'short' + } } } } From de82424f66102ea22eb376f21498cff7ddc1265c Mon Sep 17 00:00:00 2001 From: "Maxime U. Garcia" Date: Tue, 24 Feb 2026 11:02:33 +0100 Subject: [PATCH 13/57] fix cfc --- conf/cfc.config | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/conf/cfc.config b/conf/cfc.config index 453ff977c..22441c780 100644 --- a/conf/cfc.config +++ b/conf/cfc.config @@ -39,18 +39,12 @@ params { * `-plugins nf-co2footprint@` parameter in your nextflow call. */ co2footprint { - String co2Timestamp = new java.util.Date().format( 'yyyy-MM-dd_HH-mm-ss') - - // Determine timestamp suffix - String timestampSuffix = params.get('trace_report_suffix') ?: (this.hasProperty('trace_timestamp') ? this.trace_timestamp : co2Timestamp) + params.timestampSuffix = params.trace_report_suffix ?: params.trace_timestamp ?: new java.util.Date().format('yyyy-MM-dd_HH-mm-ss') // File parameters - if (params.containsKey('outdir')) { - String infoDir = "${params.outdir}/pipeline_info" - traceFile = "${infoDir}/co2footprint_trace_${timestampSuffix}.txt" - reportFile = "${infoDir}/co2footprint_report_${timestampSuffix}.html" - summaryFile = "${infoDir}/co2footprint_summary_${timestampSuffix}.txt" - } + traceFile = { params.outdir ? "${params.outdir}/pipeline_info/co2footprint_trace_${params.timestampSuffix}.txt" : null } + reportFile = { params.outdir ? "${params.outdir}/pipeline_info/co2footprint_report_${params.timestampSuffix}.txt" : null } + summaryFile = { params.outdir ? "${params.outdir}/pipeline_info/co2footprint_summary_${params.timestampSuffix}.txt" : null } // Standard parameters location = 'DE' From 0003b5d46bfe6da8ac183bc2991159af44eb78c0 Mon Sep 17 00:00:00 2001 From: "Maxime U. Garcia" Date: Tue, 24 Feb 2026 11:03:19 +0100 Subject: [PATCH 14/57] fix cfc_dev --- conf/cfc_dev.config | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/conf/cfc_dev.config b/conf/cfc_dev.config index ca43ddb67..bae73b20b 100644 --- a/conf/cfc_dev.config +++ b/conf/cfc_dev.config @@ -38,18 +38,12 @@ params { * `-plugins nf-co2footprint@` parameter in your nextflow call. */ co2footprint { - String co2Timestamp = new java.util.Date().format( 'yyyy-MM-dd_HH-mm-ss') - - // Determine timestamp suffix - String timestampSuffix = params.get('trace_report_suffix') ?: (this.hasProperty('trace_timestamp') ? this.trace_timestamp : co2Timestamp) + params.timestampSuffix = params.trace_report_suffix ?: params.trace_timestamp ?: new java.util.Date().format('yyyy-MM-dd_HH-mm-ss') // File parameters - if (params.containsKey('outdir')) { - String infoDir = "${params.outdir}/pipeline_info" - traceFile = "${infoDir}/co2footprint_trace_${timestampSuffix}.txt" - reportFile = "${infoDir}/co2footprint_report_${timestampSuffix}.html" - summaryFile = "${infoDir}/co2footprint_summary_${timestampSuffix}.txt" - } + traceFile = { params.outdir ? "${params.outdir}/pipeline_info/co2footprint_trace_${params.timestampSuffix}.txt" : null } + reportFile = { params.outdir ? "${params.outdir}/pipeline_info/co2footprint_report_${params.timestampSuffix}.txt" : null } + summaryFile = { params.outdir ? "${params.outdir}/pipeline_info/co2footprint_summary_${params.timestampSuffix}.txt" : null } // Standard parameters location = 'DE' From 358f1e47ed409d05e69fe7b8826f731cae0763a4 Mon Sep 17 00:00:00 2001 From: "Maxime U. Garcia" Date: Tue, 24 Feb 2026 11:11:56 +0100 Subject: [PATCH 15/57] fix cheaha --- conf/cheaha.config | 59 ++++++++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 33 deletions(-) diff --git a/conf/cheaha.config b/conf/cheaha.config index e2e7dfd4f..cf4f19cea 100644 --- a/conf/cheaha.config +++ b/conf/cheaha.config @@ -1,6 +1,3 @@ -// Define the Scratch directory -def scratch_dir = System.getenv("USER_SCRATCH") ?: "/tmp" - params { config_profile_name = 'cheaha' config_profile_description = 'University of Alabama at Birmingham Cheaha HPC' @@ -9,40 +6,14 @@ params { } env { - TMPDIR="$scratch_dir" - SINGULARITY_TMPDIR="$scratch_dir" + TMPDIR = System.getenv("USER_SCRATCH") ?: "/tmp" + SINGULARITY_TMPDIR = System.getenv("USER_SCRATCH") ?: "/tmp" } singularity { enabled = true autoMounts = true - runOptions = "--contain --workdir $scratch_dir -B /scratch" -} - -def getQueues = { time, memory -> - def queue_list = ["long"] - - if (time <= 2.h) { - queue_list.add("express") - } - - if (time <= 12.h) { - queue_list.add("short") - } - - if (time <= 50.h) { - queue_list.add("medium") - } - - if (memory >= 300.GB) { - queue_list.add("largemem-long") - - if (time <= 50.h) { - queue_list.add("largemem") - } - } - - return queue_list.join(",") + runOptions = "--contain --workdir ${System.getenv("USER_SCRATCH") ?: "/tmp"} -B /scratch" } process { @@ -54,5 +25,27 @@ process { executor = 'slurm' maxRetries = 3 beforeScript = 'module load Singularity/3.5.2-GCC-5.4.0-2.26' - queue = { getQueues( task.time, task.memory ) } + queue = { + def queue_list = ["long"] + if (time <= 2.h) { + queue_list.add("express") + } + + if (time <= 12.h) { + queue_list.add("short") + } + + if (time <= 50.h) { + queue_list.add("medium") + } + + if (memory >= 300.GB) { + queue_list.add("largemem-long") + + if (time <= 50.h) { + queue_list.add("largemem") + } + } + return queue_list.join(",") + } } From 0dc019805ff03ada034443a405572f707cc63816 Mon Sep 17 00:00:00 2001 From: "Maxime U. Garcia" Date: Tue, 24 Feb 2026 11:21:14 +0100 Subject: [PATCH 16/57] fix embl_hd --- conf/embl_hd.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/embl_hd.config b/conf/embl_hd.config index 397b5a82f..ad6b2c60a 100644 --- a/conf/embl_hd.config +++ b/conf/embl_hd.config @@ -14,7 +14,7 @@ apptainer { } process { - def scratch_dir = System.getenv("SCRATCHDIR") + params.scratch_dir = System.getenv("SCRATCHDIR") maxRetries = 3 cache = 'lenient' afterScript = 'sleep 10' From b32c1baa5689c4b7f73e3ba8e30408c45b00a2d0 Mon Sep 17 00:00:00 2001 From: "Maxime U. Garcia" Date: Tue, 24 Feb 2026 11:25:57 +0100 Subject: [PATCH 17/57] fix fub_curta --- conf/fub_curta.config | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/conf/fub_curta.config b/conf/fub_curta.config index 4cca7f0ab..495e54f0f 100644 --- a/conf/fub_curta.config +++ b/conf/fub_curta.config @@ -12,8 +12,6 @@ params { max_time = 14.d } -def membership = ['/bin/bash', '-c', 'groups'].execute().text.trim() - // Slurm configuration parameters process { resourceLimits = [ @@ -23,7 +21,7 @@ process { ] executor = 'slurm' maxRetries = 3 - clusterOptions = { (membership.startsWith("b") ? '--partition=begendiv,main ' : '--partition=main ') << ( task.time <= 3.h ? '--qos=hiprio' : ( task.time <= 3.d ? '--qos=prio' : '--qos=standard' ) ) } + clusterOptions = { (['/bin/bash', '-c', 'groups'].execute().text.trim().startsWith("b") ? '--partition=begendiv,main ' : '--partition=main ') << ( task.time <= 3.h ? '--qos=hiprio' : ( task.time <= 3.d ? '--qos=prio' : '--qos=standard' ) ) } } // Singularity parameters From bdf9e3945bfa522775df86accaa44e67ed3c7908 Mon Sep 17 00:00:00 2001 From: "Maxime U. Garcia" Date: Tue, 24 Feb 2026 11:38:25 +0100 Subject: [PATCH 18/57] fix cheaha --- conf/cheaha.config | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/conf/cheaha.config b/conf/cheaha.config index cf4f19cea..3741a7238 100644 --- a/conf/cheaha.config +++ b/conf/cheaha.config @@ -27,22 +27,22 @@ process { beforeScript = 'module load Singularity/3.5.2-GCC-5.4.0-2.26' queue = { def queue_list = ["long"] - if (time <= 2.h) { + if (task.time <= 2.h) { queue_list.add("express") } - if (time <= 12.h) { + if (task.time <= 12.h) { queue_list.add("short") } - if (time <= 50.h) { + if (task.time <= 50.h) { queue_list.add("medium") } - if (memory >= 300.GB) { + if (task.memory >= 300.GB) { queue_list.add("largemem-long") - if (time <= 50.h) { + if (task.time <= 50.h) { queue_list.add("largemem") } } From 9f06b1e6b938064ea0b228a1291e099586d65e86 Mon Sep 17 00:00:00 2001 From: Nicolas Vannieuwkerke Date: Mon, 30 Mar 2026 13:58:00 +0200 Subject: [PATCH 19/57] use ext variables to hold the queue functions --- conf/vsc_kul_uhasselt.config | 251 ++++++++++++++++------------------- 1 file changed, 116 insertions(+), 135 deletions(-) diff --git a/conf/vsc_kul_uhasselt.config b/conf/vsc_kul_uhasselt.config index ecd5b2824..9ccd2b059 100644 --- a/conf/vsc_kul_uhasselt.config +++ b/conf/vsc_kul_uhasselt.config @@ -8,11 +8,6 @@ validation { 'vsc_kul_hasselt_time_threshold', 'vsc_kul_hasselt_memory_threshold_genius', 'vsc_kul_hasselt_memory_threshold_wice', - 'vsc_kul_hasselt_limit_task_time_func', - 'vsc_kul_hasselt_determine_genius_queue_func', - 'vsc_kul_hasselt_determine_genius_gpu_queue_func', - 'vsc_kul_hasselt_determine_wice_queue_func', - 'vsc_kul_hasselt_determine_wice_gpu_queue_func' ] } @@ -97,120 +92,6 @@ params.vsc_kul_hasselt_time_threshold = 72.h params.vsc_kul_hasselt_memory_threshold_genius = 175.GB params.vsc_kul_hasselt_memory_threshold_wice = 239.GB -/* - * --------- - * Functions: - * ---------- - * These functions are designed to select the appropriate HPC queues of - * VSC_KUL_UHASSELT based on task requirements. They handle both standard - * and GPU queues, considering memory requirements, execution time, and - * queue availability. -*/ - -/* - * params.vsc_kul_hasselt_limit_task_time_func(time, maxTime) - * Ensures task time doesn't exceed the maximum allowed time - * @param time Current task time - * @param maxTime Maximum allowed time - * @return Limited task time -*/ -params.vsc_kul_hasselt_limit_task_time_func = { time, maxTime -> - return time > maxTime ? maxTime : time -} - -/* - * params.vsc_kul_hasselt_determine_genius_queue_func(task) - * Selects appropriate CPU queue for GENIUS cluster - * @param task Nextflow task object containing memory and time requirements - * @return Queue name based on task requirements -*/ -params.vsc_kul_hasselt_determine_genius_queue_func = { task -> - def isHighMemory = task.memory >= params.vsc_kul_hasselt_memory_threshold_genius - def isLongRunning = task.time >= params.vsc_kul_hasselt_time_threshold - def hasDedicatedBigmem = params.vsc_kul_hasselt_available_queues.contains('dedicated_big_bigmem') - - if (isHighMemory) { - return isLongRunning ? - (hasDedicatedBigmem ? 'dedicated_big_bigmem' : 'bigmem_long') : - 'bigmem' - } - - return isLongRunning ? 'batch_long' : 'batch' -} - -/* - * params.vsc_kul_hasselt_determine_genius_gpu_queue_func(task) - * Selects appropriate GPU queue for GENIUS cluster - * @param task Nextflow task object containing memory and time requirements - * @return GPU queue name based on task requirements -*/ -params.vsc_kul_hasselt_determine_genius_gpu_queue_func = { task -> - def isHighMemory = task.memory >= params.vsc_kul_hasselt_memory_threshold_genius - def isLongRunning = task.time >= params.vsc_kul_hasselt_time_threshold - def hasDedicatedGpu = params.vsc_kul_hasselt_available_queues.contains('dedicated_rega_gpu') - def hasAmdGpu = params.vsc_kul_hasselt_available_queues.contains('amd') - - if (isHighMemory) { - return isLongRunning ? 'gpu_v100_long' : 'gpu_v100' - } - - if (isLongRunning) { - if (hasDedicatedGpu) return 'dedicated_rega_gpu' - if (hasAmdGpu) return 'amd_long' - return 'gpu_p100_long' - } - - return hasAmdGpu ? 'amd' : 'gpu_p100' -} - -/* - * params.vsc_kul_hasselt_determine_wice_queue_func(task) - * Selects appropriate CPU queue for WICE cluster - * @param task Nextflow task object containing memory and time requirements - * @return Queue name based on task requirements and availability -*/ -params.vsc_kul_hasselt_determine_wice_queue_func = { task -> - def isHighMemory = task.memory >= params.vsc_kul_hasselt_memory_threshold_wice - def isLongRunning = task.time >= params.vsc_kul_hasselt_time_threshold - def hasDedicatedQueue = params.vsc_kul_hasselt_available_queues.contains('dedicated_big_bigmem') - - if (isHighMemory) { - if (isLongRunning && hasDedicatedQueue) { - return 'dedicated_big_bigmem' - } - task.time = params.vsc_kul_hasselt_limit_task_time_func(task.time, params.vsc_kul_hasselt_time_threshold) - return 'bigmem,hugemem' - } - - return isLongRunning ? - 'batch_long,batch_icelake_long,batch_sapphirerapids_long' : - 'batch,batch_sapphirerapids,batch_icelake' -} - -/* - * params.vsc_kul_hasselt_determine_wice_gpu_queue_func(task) - * Selects appropriate GPU queue for WICE cluster - * @param task Nextflow task object containing memory and time requirements - * @return GPU queue name based on task requirements -*/ -params.vsc_kul_hasselt_determine_wice_gpu_queue_func = { task -> - def isHighMemory = task.memory >= params.vsc_kul_hasselt_memory_threshold_wice - def isLongRunning = task.time >= params.vsc_kul_hasselt_time_threshold - def hasDedicatedQueue = isHighMemory ? - params.vsc_kul_hasselt_available_queues.contains('dedicated_big_gpu_h100') : - params.vsc_kul_hasselt_available_queues.contains('dedicated_big_gpu') - - if (isLongRunning && !hasDedicatedQueue) { - task.time = params.vsc_kul_hasselt_limit_task_time_func(task.time, params.vsc_kul_hasselt_time_threshold) - } - - if (isHighMemory) { - return (isLongRunning && hasDedicatedQueue) ? 'dedicated_big_gpu_h100' : 'gpu_h100' - } - - return (isLongRunning && hasDedicatedQueue) ? 'dedicated_big_gpu' : 'gpu_a100,gpu' -} - /* * ======== * Profiles @@ -229,20 +110,51 @@ profiles { process { // 768 - 65 so 65GB for overhead, max is 720000MB + ext.vsc_kul_hasselt_queue = { + def isHighMemory = task.memory >= params.vsc_kul_hasselt_memory_threshold_genius + def isLongRunning = task.time >= params.vsc_kul_hasselt_time_threshold + def hasDedicatedBigmem = params.vsc_kul_hasselt_available_queues.contains('dedicated_big_bigmem') + + if (isHighMemory) { + return isLongRunning ? + (hasDedicatedBigmem ? 'dedicated_big_bigmem' : 'bigmem_long') : + 'bigmem' + } + + return isLongRunning ? 'batch_long' : 'batch' + } resourceLimits = [ memory: 703.GB, cpus: 36, time: 168.h ] - beforeScript = { 'module load cluster/genius/' + params.vsc_kul_hasselt_determine_genius_queue_func(task).toString().split(',')[0] } - queue = { params.vsc_kul_hasselt_determine_genius_queue_func(task) } + beforeScript = { 'module load cluster/genius/' + task.ext.vsc_kul_hasselt_queue.toString().split(',')[0] } + queue = { task.ext.vsc_kul_hasselt_queue } clusterOptions = { - params.vsc_kul_hasselt_determine_genius_queue_func(task) =~ /dedicated/ ? + task.ext.vsc_kul_hasselt_queue =~ /dedicated/ ? "--clusters=genius --account=lp_big_genius_cpu" : "--clusters=genius --account=${params.vsc_kul_hasselt_tier2_project}" } withLabel: '.*gpu.*'{ + ext.vsc_kul_hasselt_queue = { + def isHighMemory = task.memory >= params.vsc_kul_hasselt_memory_threshold_genius + def isLongRunning = task.time >= params.vsc_kul_hasselt_time_threshold + def hasDedicatedGpu = params.vsc_kul_hasselt_available_queues.contains('dedicated_rega_gpu') + def hasAmdGpu = params.vsc_kul_hasselt_available_queues.contains('amd') + + if (isHighMemory) { + return isLongRunning ? 'gpu_v100_long' : 'gpu_v100' + } + + if (isLongRunning) { + if (hasDedicatedGpu) return 'dedicated_rega_gpu' + if (hasAmdGpu) return 'amd_long' + return 'gpu_p100_long' + } + + return hasAmdGpu ? 'amd' : 'gpu_p100' + } resourceLimits = [ memory: 703.GB, cpus: 36 , time: 168.h ] - beforeScript = { 'module load cluster/genius/' + params.vsc_kul_hasselt_determine_genius_gpu_queue_func(task).toString().split(',')[0] } + beforeScript = { 'module load cluster/genius/' + task.ext.vsc_kul_hasselt_queue.toString().split(',')[0] } containerOptions = '--containall --cleanenv --nv' - queue = { params.vsc_kul_hasselt_determine_genius_gpu_queue_func(task) } + queue = { task.ext.vsc_kul_hasselt_queue } clusterOptions = { def gpus = task.accelerator?.request ?: Math.max(1, Math.floor((task.cpus ?:1)/9) as int) "--gres=gpu:${gpus} --clusters=genius --account=${params.vsc_kul_hasselt_tier2_project}" @@ -258,9 +170,27 @@ profiles { process { // 768 - 65 so 65GB for overhead, max is 720000MB + ext.vsc_kul_hasselt_queue = { + def isHighMemory = task.memory >= params.vsc_kul_hasselt_memory_threshold_genius + def isLongRunning = task.time >= params.vsc_kul_hasselt_time_threshold + def hasDedicatedGpu = params.vsc_kul_hasselt_available_queues.contains('dedicated_rega_gpu') + def hasAmdGpu = params.vsc_kul_hasselt_available_queues.contains('amd') + + if (isHighMemory) { + return isLongRunning ? 'gpu_v100_long' : 'gpu_v100' + } + + if (isLongRunning) { + if (hasDedicatedGpu) return 'dedicated_rega_gpu' + if (hasAmdGpu) return 'amd_long' + return 'gpu_p100_long' + } + + return hasAmdGpu ? 'amd' : 'gpu_p100' + } resourceLimits = [ memory: 703.GB, cpus: 36, time: 168.h] - beforeScript = { 'module load cluster/genius/' + params.vsc_kul_hasselt_determine_genius_gpu_queue_func(task).toString().split(',')[0] } - queue = { params.vsc_kul_hasselt_determine_genius_gpu_queue_func(task) } + beforeScript = { 'module load cluster/genius/' + task.ext.vsc_kul_hasselt_queue.toString().split(',')[0] } + queue = { task.ext.vsc_kul_hasselt_queue } clusterOptions = { def gpus = task.accelerator?.request ?: Math.max(1, Math.floor((task.cpus ?:1)/9) as int) "--gres=gpu:${gpus} --clusters=genius --account=${params.vsc_kul_hasselt_tier2_project}" @@ -273,23 +203,57 @@ profiles { process { // max is 2016000 + ext.vsc_kul_hasselt_queue = { + def isHighMemory = task.memory >= params.vsc_kul_hasselt_memory_threshold_wice + def isLongRunning = task.time >= params.vsc_kul_hasselt_time_threshold + def hasDedicatedQueue = params.vsc_kul_hasselt_available_queues.contains('dedicated_big_bigmem') + + if (isHighMemory) { + if (isLongRunning && hasDedicatedQueue) { + return 'dedicated_big_bigmem' + } + task.time = { task.time > params.vsc_kul_hasselt_time_threshold ? params.vsc_kul_hasselt_time_threshold : task.time } + return 'bigmem,hugemem' + } + + return isLongRunning ? + 'batch_long,batch_icelake_long,batch_sapphirerapids_long' : + 'batch,batch_sapphirerapids,batch_icelake' + } resourceLimits = [ memory: 1968.GB, cpus: 72, time: 168.h ] - beforeScript = { 'module load cluster/wice/' + params.vsc_kul_hasselt_determine_wice_queue_func(task).toString().split(',')[0] } - queue = { params.vsc_kul_hasselt_determine_wice_queue_func(task) } + beforeScript = { 'module load cluster/wice/' + task.ext.vsc_kul_hasselt_queue.toString().split(',')[0] } + queue = { task.ext.vsc_kul_hasselt_queue } clusterOptions = { - params.vsc_kul_hasselt_determine_wice_queue_func(task) =~ /dedicated/ ? + task.ext.vsc_kul_hasselt_queue =~ /dedicated/ ? "--clusters=wice --account=lp_big_wice_cpu" : "--clusters=wice --account=${params.vsc_kul_hasselt_tier2_project}" } withLabel: '.*gpu.*' { + ext.vsc_kul_hasselt_queue = { + def isHighMemory = task.memory >= params.vsc_kul_hasselt_memory_threshold_wice + def isLongRunning = task.time >= params.vsc_kul_hasselt_time_threshold + def hasDedicatedQueue = isHighMemory ? + params.vsc_kul_hasselt_available_queues.contains('dedicated_big_gpu_h100') : + params.vsc_kul_hasselt_available_queues.contains('dedicated_big_gpu') + + if (isLongRunning && !hasDedicatedQueue) { + task.time = { task.time > params.vsc_kul_hasselt_time_threshold ? params.vsc_kul_hasselt_time_threshold : task.time } + } + + if (isHighMemory) { + return (isLongRunning && hasDedicatedQueue) ? 'dedicated_big_gpu_h100' : 'gpu_h100' + } + + return (isLongRunning && hasDedicatedQueue) ? 'dedicated_big_gpu' : 'gpu_a100,gpu' + } resourceLimits = [ memory: 703.GB, cpus: 64, time: 168.h ] containerOptions = '--containall --cleanenv --nv' - beforeScript = { 'module load cluster/wice/' + params.vsc_kul_hasselt_determine_wice_gpu_queue_func(task).toString().split(',')[0] } - queue = { params.vsc_kul_hasselt_determine_wice_gpu_queue_func(task) } + beforeScript = { 'module load cluster/wice/' + task.ext.vsc_kul_hasselt_queue.toString().split(',')[0] } + queue = { task.ext.vsc_kul_hasselt_queue } clusterOptions = { def gpus = task.accelerator?.request ?: Math.max(1, Math.floor((task.cpus ?:1)/16) as int) - def queueValue = params.vsc_kul_hasselt_determine_wice_gpu_queue_func(task) + def queueValue = task.ext.vsc_kul_hasselt_queue queueValue =~ /dedicated_big_gpu_h100/ ? "--clusters=wice --account=lp_big_wice_gpu_h100 --gres=gpu:${gpus}" : queueValue =~ /dedicated_big_gpu/ ? "--clusters=wice --account=lp_big_wice_gpu --gres=gpu:${gpus}" : "--clusters=wice --account=${params.vsc_kul_hasselt_tier2_project} --gres=gpu:${gpus}" @@ -305,12 +269,29 @@ profiles { process { // 768 - 65 so 65GB for overhead, max is 720000MB - beforeScript = { 'module load cluster/wice/' + params.vsc_kul_hasselt_determine_wice_gpu_queue_func(task).toString().split(',')[0] } + ext.vsc_kul_hasselt_queue = { + def isHighMemory = task.memory >= params.vsc_kul_hasselt_memory_threshold_wice + def isLongRunning = task.time >= params.vsc_kul_hasselt_time_threshold + def hasDedicatedQueue = isHighMemory ? + params.vsc_kul_hasselt_available_queues.contains('dedicated_big_gpu_h100') : + params.vsc_kul_hasselt_available_queues.contains('dedicated_big_gpu') + + if (isLongRunning && !hasDedicatedQueue) { + task.time = { task.time > params.vsc_kul_hasselt_time_threshold ? params.vsc_kul_hasselt_time_threshold : task.time } + } + + if (isHighMemory) { + return (isLongRunning && hasDedicatedQueue) ? 'dedicated_big_gpu_h100' : 'gpu_h100' + } + + return (isLongRunning && hasDedicatedQueue) ? 'dedicated_big_gpu' : 'gpu_a100,gpu' + } + beforeScript = { 'module load cluster/wice/' + task.ext.vsc_kul_hasselt_queue.toString().split(',')[0] } resourceLimits = [ memory: 703.GB, cpus: 64, time: 168.h ] - queue = { params.vsc_kul_hasselt_determine_wice_gpu_queue_func(task) } + queue = { task.ext.vsc_kul_hasselt_queue } clusterOptions = { def gpus = task.accelerator?.request ?: Math.max(1, Math.floor((task.cpus ?:1)/16) as int) - def queueValue = params.vsc_kul_hasselt_determine_wice_gpu_queue_func(task) + def queueValue = task.ext.vsc_kul_hasselt_queue queueValue =~ /dedicated_big_gpu_h100/ ? "--clusters=wice --account=lp_big_wice_gpu_h100 --gres=gpu:${gpus}" : queueValue =~ /dedicated_big_gpu/ ? "--clusters=wice --account=lp_big_wice_gpu --gres=gpu:${gpus}" : "--clusters=wice --account=${params.vsc_kul_hasselt_tier2_project} --gres=gpu:${gpus}" From abf65830150092109c043f41331975f5c163112a Mon Sep 17 00:00:00 2001 From: Maxime U Garcia Date: Thu, 2 Apr 2026 13:40:17 +0200 Subject: [PATCH 20/57] Apply suggestion from @maxulysse --- conf/qmul_apocrita.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/qmul_apocrita.config b/conf/qmul_apocrita.config index 9a13a2ef4..4e6a7fc32 100644 --- a/conf/qmul_apocrita.config +++ b/conf/qmul_apocrita.config @@ -9,7 +9,7 @@ executor { name = 'sge' } -apptainer.runOptions = "-B ${System.getenv('HOME')},${PWD}" +apptainer.runOptions = "-B ${System.getenv('HOME')},${System.getenv('PWD')}" process { From adb66ebfc13dfc1c117bea86ccfc4f10c68d7fb5 Mon Sep 17 00:00:00 2001 From: Maxime U Garcia Date: Thu, 2 Apr 2026 13:40:55 +0200 Subject: [PATCH 21/57] Apply suggestion from @maxulysse --- conf/vsc_calcua.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/vsc_calcua.config b/conf/vsc_calcua.config index 41c2dcca6..cd3310efa 100644 --- a/conf/vsc_calcua.config +++ b/conf/vsc_calcua.config @@ -12,7 +12,7 @@ cleanup = true // Check if environment variables for singularity/apptainer/nextflow cache and tmp dirs are set: // - APPTAINER_TMPDIR/SINGULARITY_TMPDIR (warn if missing, apptainer defaults to $TMPDIR or /tmp) -// - APPTAINER_CACHEDIR/SINGULARITY_CACHEDIR (exit with error if missing, apptainer would default to ${System.getenv('HOME')} otherwise) +// - APPTAINER_CACHEDIR/SINGULARITY_CACHEDIR (exit with error if missing, apptainer would default to $HOME otherwise) // - NXF_APPTAINER_CACHEDIR/NXF_SINGULARITY_CACHEDIR (warn and set to $scratch_dir/apptainer/nextflow_cache if missing) // Note that only the third env var can be set inside of this config file (cacheDir), because // the env scope only provides env vars to tasks, not to the launch environment. From 333ce0c16f296b9ce759a6a82ad30c6afab060eb Mon Sep 17 00:00:00 2001 From: "Maxime U. Garcia" Date: Thu, 2 Apr 2026 14:05:14 +0200 Subject: [PATCH 22/57] bi --- conf/bi.config | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/conf/bi.config b/conf/bi.config index 839bd9608..e785714fb 100644 --- a/conf/bi.config +++ b/conf/bi.config @@ -7,11 +7,9 @@ params { config_profile_description = 'Boehringer Ingelheim internal profile provided by nf-core/configs.' config_profile_contact = 'Alexander Peltzer (@apeltzer)' config_profile_url = 'https://www.boehringer-ingelheim.com/' + bi_globalConfig = System.getenv('NXF_GLOBAL_CONFIG') ?: + System.err.println("WARNING: For bi.config requires NXF_GLOBAL_CONFIG env var to be set. Point it to global.config file if you want to use this profile.") } -params.bi_globalConfig = System.getenv('NXF_GLOBAL_CONFIG') -if (params.bi_globalConfig == null) { - System.err.println("WARNING: For bi.config requires NXF_GLOBAL_CONFIG env var to be set. Point it to global.config file if you want to use this profile.") -} else { - includeConfig params.bi_globalConfig -} +// Include the global config if set +includeConfig(params.bi_globalConfig ?: '/dev/null') From c5d2674eb2e23240d32629a6754af0b35d24a6e4 Mon Sep 17 00:00:00 2001 From: "Maxime U. Garcia" Date: Thu, 2 Apr 2026 14:05:34 +0200 Subject: [PATCH 23/57] configtest.nf --- configtest.nf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/configtest.nf b/configtest.nf index a865b25ca..1917375d0 100644 --- a/configtest.nf +++ b/configtest.nf @@ -5,8 +5,8 @@ workflow { print("${separator}\n") print("Parameter scope for config \'${workflow.profile}\'\n") print("${separator}\n") - params.each { - assert it - print("\t${it}\n") + params.each { param -> + assert param + print("\t${param}\n") } } From 834d13ef496bc3a6910ffd02645a2224673f03dc Mon Sep 17 00:00:00 2001 From: "Maxime U. Garcia" Date: Thu, 2 Apr 2026 14:05:59 +0200 Subject: [PATCH 24/57] ucl_myriad --- conf/ucl_myriad.config | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/conf/ucl_myriad.config b/conf/ucl_myriad.config index 9b0ad3fab..18802a66f 100644 --- a/conf/ucl_myriad.config +++ b/conf/ucl_myriad.config @@ -15,7 +15,8 @@ process { clusterOptions = { def mem = task.memory.mega def cpus = task.cpus - def memoryPerCpu = mem / task.cpus // We need memory per cpu, as is not possible to request memory per job + // We need memory per cpu, as is not possible to request memory per job + def memoryPerCpu = mem/cpus def baseOpts = "-S /bin/bash -l mem=${memoryPerCpu}M " return baseOpts } From 648c20d032030140cea45090d193f4a40146a092 Mon Sep 17 00:00:00 2001 From: "Maxime U. Garcia" Date: Thu, 2 Apr 2026 14:08:29 +0200 Subject: [PATCH 25/57] incliva --- conf/incliva.config | 57 ++++++++++----------------------------------- 1 file changed, 12 insertions(+), 45 deletions(-) diff --git a/conf/incliva.config b/conf/incliva.config index 0d964f4d6..713a3fc33 100644 --- a/conf/incliva.config +++ b/conf/incliva.config @@ -3,55 +3,18 @@ params { config_profile_description = 'INCLIVA Health Research Institute profile for nf-core.' config_profile_contact = 'Sheila Zúñiga Trejos - bioinfo@incliva.es' config_profile_url = 'https://www.incliva.es/en/services/platforms/bioinformatics-unit/' -} - -// Function to get hostname -def getHostname() { - def process = 'hostname'.execute() - process.waitFor() - return process.text.trim() -} - -// Function to set singularity path according to which host nextflow is running on - -def hostname = { getHostname() } - -if (hostname == 'vlinuxcervantes3srv') { - System.out.println("\nINFO: working on ${hostname}\n") - - // Resources details - params.max_memory = 60.GB - params.max_cpus = 15 - singularity.cacheDir = "/nfs/home/software/singularity/nf_cacheDir" - - process { - resourceLimits = [ - memory: 60.GB, - cpus: 15, - ] - } - -} else if (hostname == 'vlinuxcervantes4srv') { - System.out.println("\nINFO: working on ${hostname}.\n") - - // Resources details - params.max_memory = 120.GB - params.max_cpus = 19 - singularity.cacheDir = "/nfs/home/software/singularity/nf_cacheDir" - - process { - resourceLimits = [ - memory: 120.GB, - cpus: 19, - ] - } - -} else { - System.err.println("\nERROR: unknown machine. Update incliva.config on nf-core/configs if you are working on another host.\n") + hostname = 'hostname'.execute().text.trim() ?: 'unknown' + max_memory = params.hostname == 'vlinuxcervantes3srv' ? 60.GB + : params.hostname == 'vlinuxcervantes4srv' ? 120.GB + : System.err.println("\nERROR: unknown machine. Update incliva.config on nf-core/configs if you are working on another host.\n") + max_cpus = params.hostname == 'vlinuxcervantes3srv' ? 15 + : params.hostname == 'vlinuxcervantes4srv' ? 19 + : System.err.println("\nERROR: unknown machine. Update incliva.config on nf-core/configs if you are working on another host.\n") } // Singularity details singularity { + cacheDir = "/nfs/home/software/singularity/nf_cacheDir" enabled = true autoMounts = true } @@ -60,4 +23,8 @@ singularity { process { executor = 'local' maxRetries = 2 + resourceLimits = params.max_memory && params.max_cpus ? [ + memory: params.max_memory, + cpus: params.max_cpus + ] : System.err.println("\nERROR: unknown machine. Update incliva.config on nf-core/configs if you are working on another host.\n") } From 36319d2a6195060999ce6e6bbfd1db73d2b955f2 Mon Sep 17 00:00:00 2001 From: "Maxime U. Garcia" Date: Thu, 2 Apr 2026 14:51:21 +0200 Subject: [PATCH 26/57] pre-commit --- .github/workflows/main.yml | 14 +++++++------- docs/nyu_hpc.md | 2 +- docs/tufts.md | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index a577465a3..51e060a38 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -31,13 +31,13 @@ jobs: - 25.04.0 - latest-everything steps: - - uses: actions/checkout@v4 - - name: Set up Nextflow - uses: nf-core/setup-nextflow@v2 - with: - version: ${{ matrix.NXF_VER }} - - run: nextflow config -show-profiles ${GITHUB_WORKSPACE} - - run: nextflow lint ${GITHUB_WORKSPACE} + - uses: actions/checkout@v4 + - name: Set up Nextflow + uses: nf-core/setup-nextflow@v2 + with: + version: ${{ matrix.NXF_VER }} + - run: nextflow config -show-profiles ${GITHUB_WORKSPACE} + - run: nextflow lint ${GITHUB_WORKSPACE} profile_test: runs-on: ubuntu-latest diff --git a/docs/nyu_hpc.md b/docs/nyu_hpc.md index 2c254f133..58889685b 100644 --- a/docs/nyu_hpc.md +++ b/docs/nyu_hpc.md @@ -4,7 +4,7 @@ All nf-core pipelines have been successfully configured for use on the HPC Clust To use, run the pipeline with `-profile nyu_hpc`. This will download and launch the [`nyu_hpc.config`](../conf/nyu_hpc.config) which has been pre-configured with a setup suitable for the NYU HPC cluster. -Before running the pipeline you will need to load Nextflow using the environment module system on NYU HPC. +Before running the pipeline you will need to load Nextflow using the environment module system on NYU HPC. ```bash ## See available nextflow versions diff --git a/docs/tufts.md b/docs/tufts.md index 802142ee9..f4aae139e 100644 --- a/docs/tufts.md +++ b/docs/tufts.md @@ -54,4 +54,4 @@ Before running the pipeline, you will need to load the Nextflow module by: ```bash module purge ## Optional but recommended module load nextflow singularity -``` \ No newline at end of file +``` From fd41955d7e814d87cd262b45d2d7686307eefc76 Mon Sep 17 00:00:00 2001 From: "Maxime U. Garcia" Date: Thu, 2 Apr 2026 14:53:38 +0200 Subject: [PATCH 27/57] janelia --- conf/janelia.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/janelia.config b/conf/janelia.config index 6a5129804..aa3a681c4 100644 --- a/conf/janelia.config +++ b/conf/janelia.config @@ -27,7 +27,7 @@ process { time: 720.h ] executor = 'lsf' - scratch = '/scratch/${System.getenv('USER')}' + scratch = "/scratch/${System.getenv('USER')}" clusterOptions = params.lsf_opts } From 56d78a2c5242abdd068b7d4156aa5ec88032f2cd Mon Sep 17 00:00:00 2001 From: "Maxime U. Garcia" Date: Thu, 2 Apr 2026 14:56:24 +0200 Subject: [PATCH 28/57] maestro --- conf/maestro.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/maestro.config b/conf/maestro.config index fb0f295b6..5c9d81958 100644 --- a/conf/maestro.config +++ b/conf/maestro.config @@ -7,7 +7,7 @@ params { singularity { enabled = true autoMounts = true - runOptions = '--home ${System.getenv('HOME')}:/home/${System.getenv('USER')} --bind /pasteur' + runOptions = "--home ${System.getenv('HOME')}:/home/${System.getenv('USER')} --bind /pasteur" } profiles { From 4f11282c290ff7d58138b44fffdee5115fcfc325 Mon Sep 17 00:00:00 2001 From: "Maxime U. Garcia" Date: Thu, 2 Apr 2026 15:01:40 +0200 Subject: [PATCH 29/57] nfi_gabi --- conf/nci_gadi.config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/nci_gadi.config b/conf/nci_gadi.config index bf3e1b08d..1b09d241b 100644 --- a/conf/nci_gadi.config +++ b/conf/nci_gadi.config @@ -4,6 +4,7 @@ params { config_profile_contact = 'Georgie Samaha (@georgiesamaha), Matthew Downton (@mattdton)' config_profile_url = 'https://opus.nci.org.au/display/Help/Gadi+User+Guide' project = System.getenv("PROJECT") + trace_timestamp = new java.util.Date().format('yyyy-MM-dd_HH-mm-ss') } // Enable use of Singularity to run containers @@ -34,10 +35,9 @@ process { } // Write custom trace file with outputs required for SU calculation -def trace_timestamp = new java.util.Date().format('yyyy-MM-dd_HH-mm-ss') trace { enabled = true overwrite = false - file = "./gadi-nf-core-trace-${trace_timestamp}.txt" + file = "./gadi-nf-core-trace-${params.trace_timestamp}.txt" fields = 'name,status,exit,duration,realtime,cpus,%cpu,memory,%mem,rss' } From 94759f383cc946dbf71fd7ffe8ed7134c9bc04d0 Mon Sep 17 00:00:00 2001 From: "Maxime U. Garcia" Date: Thu, 2 Apr 2026 15:27:25 +0200 Subject: [PATCH 30/57] sage --- conf/sage.config | 48 +++++++++++++++++++++--------------------------- 1 file changed, 21 insertions(+), 27 deletions(-) diff --git a/conf/sage.config b/conf/sage.config index 1874911b1..ebd7ca5b3 100644 --- a/conf/sage.config +++ b/conf/sage.config @@ -11,6 +11,9 @@ params { max_memory = 128.GB max_time = 240.h single_cpu_mem = 6.GB + + // Define dynamic scaling factors + exit_status_scaling = [143,137,104,134,139,247] } // Increase time limit to allow file transfers to finish @@ -46,47 +49,38 @@ process { // Enable retries globally for certain exit codes errorStrategy = { task.attempt <= 5 ? 'retry' : 'finish' } - cpus = { 1 * factor(task, 2) } - memory = { 6.GB * factor(task, 1) } - time = { 24.h * factor(task, 1) } + cpus = { task.exitStatus in params.exit_status_scaling ? Math.ceil(task.attempt/2) : 1 } + memory = { 6.GB * (task.exitStatus in params.exit_status_scaling ? task.attempt : 1) } + time = { 24.h * (task.exitStatus in params.exit_status_scaling ? task.attempt : 1) } // Process-specific resource requirements withLabel: process_single { - cpus = { 1 * factor(task, 2) } - memory = { 6.GB * factor(task, 1) } - time = { 24.h * factor(task, 1) } + cpus = { task.exitStatus in params.exit_status_scaling ? Math.ceil(task.attempt/2) : 1 } + memory = { 6.GB * (task.exitStatus in params.exit_status_scaling ? task.attempt : 1) } + time = { 24.h * (task.exitStatus in params.exit_status_scaling ? task.attempt : 1) } } withLabel: process_low { - cpus = { 2 * factor(task, 2) } - memory = { 12.GB * factor(task, 1) } - time = { 24.h * factor(task, 1) } + cpus = { 2 * (task.exitStatus in params.exit_status_scaling ? Math.ceil(task.attempt/2) : 1) } + memory = { 12.GB * (task.exitStatus in params.exit_status_scaling ? task.attempt : 1) } + time = { 24.h * (task.exitStatus in params.exit_status_scaling ? task.attempt : 1) } } withLabel: process_medium { - cpus = { 8 * factor(task, 2) } - memory = { 32.GB * factor(task, 1) } - time = { 48.h * factor(task, 1) } + cpus = { 8 * (task.exitStatus in params.exit_status_scaling ? Math.ceil(task.attempt/2) : 1) } + memory = { 32.GB * (task.exitStatus in params.exit_status_scaling ? task.attempt : 1) } + time = { 48.h * (task.exitStatus in params.exit_status_scaling ? task.attempt : 1) } } withLabel: process_high { - cpus = { 16 * factor(task, 2) } - memory = { 64.GB * factor(task, 1) } - time = { 96.h * factor(task, 1) } + cpus = { 16 * (task.exitStatus in params.exit_status_scaling ? Math.ceil(task.attempt/2) : 1) } + memory = { 64.GB * (task.exitStatus in params.exit_status_scaling ? task.attempt : 1) } + time = { 96.h * (task.exitStatus in params.exit_status_scaling ? task.attempt : 1) } } withLabel: process_long { - time = { 96.h * factor(task, 1) } + time = { 96.h * (task.exitStatus in params.exit_status_scaling ? task.attempt : 1) } } withLabel: 'process_high_memory|memory_max' { - memory = { 128.GB * factor(task, 1) } + memory = { 128.GB * (task.exitStatus in params.exit_status_scaling ? task.attempt : 1) } } withLabel: cpus_max { - cpus = { 32 * factor(task, 2) } - } -} - -// Function to finely control the increase of the resource allocation -def factor(task, slow_factor = 1) { - if ( task.exitStatus in [143,137,104,134,139,247] ) { - return Math.ceil( task.attempt / slow_factor) as int - } else { - return 1 as int + cpus = { 32 * (task.exitStatus in params.exit_status_scaling ? Math.ceil(task.attempt/2) : 1) } } } From d41d38dbbcfaac548545be6f326d183376796c2d Mon Sep 17 00:00:00 2001 From: "Maxime U. Garcia" Date: Thu, 2 Apr 2026 15:40:51 +0200 Subject: [PATCH 31/57] seadragon --- conf/seadragon.config | 48 +++++++++++++++---------------------------- 1 file changed, 17 insertions(+), 31 deletions(-) diff --git a/conf/seadragon.config b/conf/seadragon.config index 48d921335..0dfc3e459 100644 --- a/conf/seadragon.config +++ b/conf/seadragon.config @@ -1,10 +1,16 @@ -//Profile config names for nf-core/configs +// Profile config names for nf-core/configs params { config_profile_description = 'University of Texas at MD Anderson HPC cluster profile provided by nf-core/configs' config_profile_contact = 'Jiawei Gu' config_profile_contact_github = '@jiawku' config_profile_contact_email = 'jiawei.gu@mdanderson.org' config_profile_url = 'https://hpcweb.mdanderson.edu/' + + // Define dynamic scaling factors + max_memory = 3900.GB // Maximum memory based on evhighmem nodes + max_cpus = 80 // Maximum CPUs based on E80 nodes + max_time = 504.h // Maximum runtime for evlong queues + igenomes_base = '/rsrch3/scratch/reflib/REFLIB_data/AWS-iGenomes' } env { @@ -21,25 +27,6 @@ singularity { cacheDir = "/home/${System.getenv('USER')}/.singularity/cache" } -def membership = "groups".execute().text - -def select_queue = { memory, cpu, walltime -> - if (memory <= 950.GB && cpu <= 80) { - if (walltime <= 3.h) return 'short' - if (walltime <= 24.h) return 'medium' - if (walltime <= 240.h) return 'long' - if (walltime <= 504.h) return 'vlong' - } - - // High memory queues - if (memory <= 3900.GB && cpu <= 80 && walltime <= 504.h) { - if (walltime <= 240.h) return 'evhighmem' - } - - throw new IllegalArgumentException("No matching queue for memory=${memory}, cpu=${cpu}, time=${time}") - -} - // Submit up to 100 concurrent jobs // pollInterval and queueStatInterval of every 5 minutes // submitRateLimit of 20 per minute @@ -52,12 +39,11 @@ executor { jobName = { "${task.process.split(':').last()}" } } - process { resourceLimits = [ memory: 3900.GB, // Max memory based on vhighmem node - cpus: 80, // Max CPUs based on E80 node - time: 504.h // Max time for long queues + cpus: 80, // Max CPUs based on E80 node + time: 504.h // Max time for long queues ] executor = 'lsf' // Use LSF executor @@ -68,7 +54,14 @@ process { maxRetries = 3 afterScript = 'sleep 10' // Prevent abrupt re-submissions after retries - queue = { select_queue(task.memory, task.cpus, task.time) } // Use the updated select_queue function + queue = { + if (task.memory <= 950.GB && task.cpus <= 80 && task.time <= 3.h) return 'short' + if (task.memory <= 950.GB && task.cpus <= 80 && task.time <= 24.h) return 'medium' + if (task.memory <= 950.GB && task.cpus <= 80 && task.time <= 240.h) return 'long' + if (task.memory <= 950.GB && task.cpus <= 80 && task.time <= 504.h) return 'vlong' + if (task.memory <= 3900.GB && task.cpus <= 80 && task.time <= 240.h) return 'evhighmem' + throw new IllegalArgumentException("No matching queue for memory=${task.memory}, cpu=${task.cpus}, time=${task.time}") + } withLabel:process_gpu { cpus = { 40 } // Use Gdragon nodes @@ -77,11 +70,4 @@ process { } } -params { - max_memory = 3900.GB // Maximum memory based on evhighmem nodes - max_cpus = 80 // Maximum CPUs based on E80 nodes - max_time = 504.h // Maximum runtime for evlong queues - igenomes_base = '/rsrch3/scratch/reflib/REFLIB_data/AWS-iGenomes' -} - cleanup = true From bbbb3810258eacf953e09551d499642d7d5670d9 Mon Sep 17 00:00:00 2001 From: "Maxime U. Garcia" Date: Thu, 2 Apr 2026 15:44:24 +0200 Subject: [PATCH 32/57] software_license --- conf/software_license.config | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/conf/software_license.config b/conf/software_license.config index 1c9767316..da8cb2cc9 100755 --- a/conf/software_license.config +++ b/conf/software_license.config @@ -8,11 +8,9 @@ params { validationSchemaIgnoreParams = "cf_ploidy,genomes,sentieon_extension,test_data" } -if (params.sentieon_extension) { - process { - withLabel: 'sentieon' { - ext.sentieon_auth_mech_base64 = secrets.SENTIEON_AUTH_MECH_BASE64 ?: '' - ext.sentieon_auth_data_base64 = secrets.SENTIEON_AUTH_DATA_BASE64 ?: '' - } +process { + withLabel: 'sentieon' { + ext.sentieon_auth_mech_base64 = params.sentieon_extension ? secrets.SENTIEON_AUTH_MECH_BASE64 : '' + ext.sentieon_auth_data_base64 = params.sentieon_extension ? secrets.SENTIEON_AUTH_DATA_BASE64 : '' } } From b60c7e7d87a2f09732b71ff8b0c9a9118865bcaf Mon Sep 17 00:00:00 2001 From: "Maxime U. Garcia" Date: Thu, 2 Apr 2026 15:52:52 +0200 Subject: [PATCH 33/57] utd_ganymede --- conf/utd_ganymede.config | 28 ++++++++-------------------- 1 file changed, 8 insertions(+), 20 deletions(-) diff --git a/conf/utd_ganymede.config b/conf/utd_ganymede.config index ea95c0912..ad4a319bb 100644 --- a/conf/utd_ganymede.config +++ b/conf/utd_ganymede.config @@ -1,4 +1,4 @@ -//Profile config names for nf-core/configs +// 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' @@ -18,24 +18,6 @@ singularity { cacheDir = "/home/${System.getenv('USER')}/scratch/singularity" } -def membership = "groups".execute().text -def genomics_queue_memory = 28.GB - -def select_queue = { memory, cpu -> - if (memory <= genomics_queue_memory && cpu <= 16 && membership.contains('genomics')) { - return 'genomics,normal' - } - if (memory > genomics_queue_memory && memory <= 125.GB && cpu <= 12 && membership.contains('kim')) { - return 'Kim,128s' - } - if (memory > genomics_queue_memory && memory <= 125.GB && cpu <= 16) { - return '128s' - } - if (memory <= 250.GB && cpu <= 28) { - return '256i,256h' - } -} - // Submit up to 100 concurrent jobs // pollInterval and queueStatInterval of every 5 minutes // submitRateLimit of 20 per minute @@ -54,7 +36,13 @@ process { ] beforeScript = 'module load singularity/3.2.1' executor = 'slurm' - queue = { select_queue(task.memory, task.cpu) } + queue = { + if (task.memory <= 28.GB && task.cpus <= 16 && "groups".execute().text.contains('genomics')) return 'genomics,normal' + if (task.memory > 28.GB && task.memory <= 125.GB && task.cpus <= 12 && "groups".execute().text.contains('kim')) return 'Kim,128s' + if (task.memory > 28.GB && task.memory <= params.queue_128s.memory && task.cpus <= 16) return '128s' + if (task.memory <= params.queue_256.memory && task.cpus <= 28) return '256i,256h' + throw new IllegalArgumentException("No matching queue for memory=${task.memory}, cpu=${task.cpus}") + } withLabel:process_medium { cpus = 16 From 2927bd1f991de93add7b4ce730f046b36598c3ba Mon Sep 17 00:00:00 2001 From: "Maxime U. Garcia" Date: Thu, 2 Apr 2026 16:02:47 +0200 Subject: [PATCH 34/57] wustl_htcf --- conf/wustl_htcf.config | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/conf/wustl_htcf.config b/conf/wustl_htcf.config index f82033439..dad28a9dd 100644 --- a/conf/wustl_htcf.config +++ b/conf/wustl_htcf.config @@ -1,22 +1,10 @@ // Forked from https://github.com/nf-core/configs/blob/master/conf/prince.config -def labEnvVar = System.getenv("LAB") - -if (labEnvVar) { - System.out.println("Lab: " + labEnvVar) - singularityDir = "/ref/$LAB/data/singularity_images_nextflow" // If $LAB is set, use that -} else { - def id = "id -nG".execute().text - def labAutodetect = id.split(" ").last() - System.out.println("Lab: " + labAutodetect) - singularityDir = "/ref/" + labAutodetect + "/data/singularity_images_nextflow" -} - params { config_profile_description = """ WUSTL High Throughput Computing Facility cluster profile provided by nf-core/configs. Run from your scratch directory, the output files may be large! - Please consider running the pipeline on a compute node the first time, as it will be pulling the docker image, which will be converted into a singularity image, which is heavy on the login node. Subsequent runs can be done on the login node, as the docker image will only be pulled and converted once. By default, the images will be stored in $singularityDir + Please consider running the pipeline on a compute node the first time, as it will be pulling the docker image, which will be converted into a singularity image, which is heavy on the login node. Subsequent runs can be done on the login node, as the docker image will only be pulled and converted once. By default, the images will be stored in ${params.singularityDir} """.stripIndent() config_profile_contact = "Gavin John " config_profile_url = "https://github.com/nf-core/configs/blob/master/docs/wustl_htcf.md" @@ -24,6 +12,10 @@ params { max_cpus = 24 max_memory = 750.GB max_time = 168.h + + // Define singularity directory based on LAB environment variable or group membership + lab_env = System.getenv("LAB") ?: "id -nG".execute().text.split(" ").last() + singularityDir = "/ref/${params.lab_env}/data/singularity_images_nextflow" } spack { @@ -32,7 +24,7 @@ spack { singularity { enabled = true - cacheDir = singularityDir + cacheDir = params.singularityDir } process { From 20bc0c2ea055513eb196cee5d5845592f7b46c2b Mon Sep 17 00:00:00 2001 From: "Maxime U. Garcia" Date: Thu, 2 Apr 2026 16:04:43 +0200 Subject: [PATCH 35/57] nci_gadi --- conf/pipeline/proteinfold/nci_gadi.config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/pipeline/proteinfold/nci_gadi.config b/conf/pipeline/proteinfold/nci_gadi.config index f07999c01..9a76d3bea 100644 --- a/conf/pipeline/proteinfold/nci_gadi.config +++ b/conf/pipeline/proteinfold/nci_gadi.config @@ -7,6 +7,7 @@ profiles { config_profile_url = 'https://opus.nci.org.au/display/Help/Gadi+User+Guide' project = System.getenv("PROJECT") storage_account = '' + trace_timestamp = new java.util.Date().format('yyyy-MM-dd_HH-mm-ss') } // Define process resource limits @@ -47,11 +48,10 @@ profiles { } // Write custom trace file with outputs required for SU calculation - def trace_timestamp = new java.util.Date().format('yyyy-MM-dd_HH-mm-ss') trace { enabled = true overwrite = false - file = "./gadi-nf-core-trace-${trace_timestamp}.txt" + file = "./gadi-nf-core-trace-${params.trace_timestamp}.txt" fields = 'name,status,exit,duration,realtime,cpus,%cpu,memory,%mem,rss' } } From d428e0053677fae9a7278c38eab6c54e137e30e2 Mon Sep 17 00:00:00 2001 From: "Maxime U. Garcia" Date: Thu, 2 Apr 2026 16:06:14 +0200 Subject: [PATCH 36/57] icr_davros --- conf/pipeline/sarek/icr_davros.config | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/conf/pipeline/sarek/icr_davros.config b/conf/pipeline/sarek/icr_davros.config index c33486326..91e5946a6 100644 --- a/conf/pipeline/sarek/icr_davros.config +++ b/conf/pipeline/sarek/icr_davros.config @@ -7,7 +7,10 @@ process { errorStrategy = { task.exitStatus in [104, 134, 137, 139, 141, 143, 255] ? 'retry' : 'finish' } maxRetries = 5 withName: MapReads { - memory = { check_resource(12.GB) } - time = { check_resource(48.h * task.attempt) } + resourceLimits = [ + memory: 12.GB, + cpus: 200, + time: { 48.h * task.attempt } + ] } } From 81e8e2e4aa8a503cccf5949fd9b9b0a2a4c8a1df Mon Sep 17 00:00:00 2001 From: "Maxime U. Garcia" Date: Thu, 2 Apr 2026 16:07:26 +0200 Subject: [PATCH 37/57] crg --- conf/pipeline/multiplesequencealign/crg.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/pipeline/multiplesequencealign/crg.config b/conf/pipeline/multiplesequencealign/crg.config index 791e56b2f..ca75f617e 100644 --- a/conf/pipeline/multiplesequencealign/crg.config +++ b/conf/pipeline/multiplesequencealign/crg.config @@ -14,7 +14,7 @@ profiles { singularity { enabled = true envWhitelist = "CUDA_VISIBLE_DEVICES,NVIDIA_VISIBLE_DEVICES" - if (params.use_gpu) { singularity.runOptions = '--nv' } + runOptions = params.use_gpu ? '--nv' : '' pullTimeout = "60m" } } From b44fac1dca1f5fb46c9f3d03f4ba93b948a211b3 Mon Sep 17 00:00:00 2001 From: "Maxime U. Garcia" Date: Thu, 2 Apr 2026 16:09:21 +0200 Subject: [PATCH 38/57] crg --- conf/pipeline/deepmodeloptim/crg.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/pipeline/deepmodeloptim/crg.config b/conf/pipeline/deepmodeloptim/crg.config index cfa193dea..983e1a03b 100644 --- a/conf/pipeline/deepmodeloptim/crg.config +++ b/conf/pipeline/deepmodeloptim/crg.config @@ -15,7 +15,7 @@ profiles { singularity { enabled = true envWhitelist = "CUDA_VISIBLE_DEVICES,NVIDIA_VISIBLE_DEVICES" - if (params.use_gpu) { singularity.runOptions = '--nv' } + runOptions = params.use_gpu ? '--nv' : '' pullTimeout = "60m" } } From b75aa586134c2bbb36a78b34ff40b2169eec93ca Mon Sep 17 00:00:00 2001 From: "Maxime U. Garcia" Date: Thu, 2 Apr 2026 16:11:08 +0200 Subject: [PATCH 39/57] pre-commit --- conf/nyu_hpc.config | 6 +++--- conf/tufts.config | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/conf/nyu_hpc.config b/conf/nyu_hpc.config index 39ce8e542..fb02d1f59 100644 --- a/conf/nyu_hpc.config +++ b/conf/nyu_hpc.config @@ -16,13 +16,13 @@ singularity { process { resourceLimits = [ - memory: params.max_memory, + memory: params.max_memory, cpus: params.max_cpus, time: params.max_time ] executor = 'slurm' - clusterOptions = { - "--account=${System.getenv('SLURM_JOB_ACCOUNT')} --export=NONE" + clusterOptions = { + "--account=${System.getenv('SLURM_JOB_ACCOUNT')} --export=NONE" } maxRetries = 3 errorStrategy = { task.attempt <= 3 ? 'retry' : 'finish' } diff --git a/conf/tufts.config b/conf/tufts.config index 2fbe9b07a..413b2fe65 100644 --- a/conf/tufts.config +++ b/conf/tufts.config @@ -76,4 +76,4 @@ dag { } // On a successful completion of a Nextflow run, automatically delete all intermediate files stored in the work/ directory -cleanup = !params.disable_cleanup \ No newline at end of file +cleanup = !params.disable_cleanup From f25ceba054a8ed45054b9635f8b3ec028bd1c5ee Mon Sep 17 00:00:00 2001 From: "Maxime U. Garcia" Date: Thu, 2 Apr 2026 16:34:32 +0200 Subject: [PATCH 40/57] utd_juno --- conf/utd_juno.config | 79 +++++++++++++++----------------------------- 1 file changed, 26 insertions(+), 53 deletions(-) diff --git a/conf/utd_juno.config b/conf/utd_juno.config index 8360b886a..3b1caf0c8 100644 --- a/conf/utd_juno.config +++ b/conf/utd_juno.config @@ -10,51 +10,10 @@ env { SINGULARITY_CACHEDIR="/home/${System.getenv('USER')}/scratch/singularity" } - -def select_queue_and_flags = { cpus, memory, time, accelerator -> - var accelerator_count = 0; - var accelerator_ty = null; - if (accelerator != null) { - if (accelerator instanceof Number) { - accelerator_count = accelerator; - } else if (accelerator instanceof Map) { - accelerator_ty = accelerator.type; - accelerator_count = accelerator.limit; - } else { - throw new IllegalArgumentException("Invalid `accelerator` directive value: $accelerator [${accelerator.getClass().getName()}]") - } - } - - if (accelerator_count > 0) { - if (["h100", "nvidia_h100", "nvidia-h100", "nvidia_h100_80gb_hbm3"].contains(accelerator_ty)) { - // if this is a long task with a single accelarator, probably need the whole GPU - if (accelerator_count == 1 && time >= 2.h) { - return ['queue': 'h100', 'flags': "--gres=nvidia_h100_80gb_hbm3=${accelerator_count}"]; - } else { - return ['queue': 'h100-2.40gb', 'flags': "--gres=nvidia_h100_80gb_hbm3=${accelerator_count}"]; - } - } - - if (["a30", "nvidia_a30", "nvidia-a30", "nvidia_a30_2g", "nvidia_a30_4g"].contains(accelerator_ty)) { - if (accelerator_count >= 4) { - return ['queue': 'a30-4.6gb', 'flags': "--gres=nvidia_a30=${accelerator_count}"]; - } else if (accelerator_count >= 2) { - return ['queue': 'a30-2.12gb', 'flags': "--gres=nvidia_a30_2g=${accelerator_count}"]; - } else if (accelerator_count >= 1) { - return ['queue': 'a30', 'flags': "--gres=nvidia_a30_1g=${accelerator_count}"]; - } - } - } - - if (memory >= 384.GB && memory <= 512.GB) { - return ['queue': 'h100', 'flags': ""]; - } - - if (memory >= 512.GB) { - return ['queue': 'a30', 'flags': ""]; - } - - return ['queue': 'normal', 'flags': '']; +singularity { + enabled = true + autoMounts = true + cacheDir = "/home/${System.getenv('USER')}/scratch/singularity" } executor { @@ -64,19 +23,33 @@ executor { jobName = { "${task.process.split(':').last()}" } } -singularity { - enabled = true - autoMounts = true - cacheDir = "/home/${System.getenv('USER')}/scratch/singularity" -} - process { executor = 'slurm' queue = { - select_queue_and_flags(task.cpus, task.memory, task.time, task.get('accelerator')).queue + if (task.get('accelerator')?.type in ['h100', 'nvidia_h100', 'nvidia-h100', 'nvidia_h100_80gb_hbm3']) { + if (task.get('accelerator')?.limit == 1 && task.time >= 2.h) return 'h100' + return 'h100-2.40gb' + } + if (task.get('accelerator')?.type in ['a30', 'nvidia_a30', 'nvidia-a30', 'nvidia_a30_2g', 'nvidia_a30_4g']) { + if (task.get('accelerator')?.limit >= 4) return 'a30-4.6gb' + if (task.get('accelerator')?.limit >= 2) return 'a30-2.12gb' + return 'a30' + } + if (task.memory >= 384.GB && task.memory <= 512.GB) return 'h100' + if (task.memory >= 512.GB) return 'a30' + return 'normal' } clusterOptions = { - select_queue_and_flags(task.cpus, task.memory, task.time, task.get('accelerator')).flags + if (task.get('accelerator')?.type in ['h100', 'nvidia_h100', 'nvidia-h100', 'nvidia_h100_80gb_hbm3']) { + if (task.get('accelerator')?.limit == 1 && task.time >= 2.h) return "--gres=nvidia_h100_80gb_hbm3=${task.get('accelerator')?.limit}" + return "--gres=nvidia_h100_80gb_hbm3=${task.get('accelerator')?.limit}" + } + if (task.get('accelerator')?.type in ['a30', 'nvidia_a30', 'nvidia-a30', 'nvidia_a30_2g', 'nvidia_a30_4g']) { + if (task.get('accelerator')?.limit >= 4) return "--gres=nvidia_a30=${task.get('accelerator')?.limit}" + if (task.get('accelerator')?.limit >= 2) return "--gres=nvidia_a30_2g=${task.get('accelerator')?.limit}" + return "--gres=nvidia_a30_1g=${task.get('accelerator')?.limit}" + } + return '' } withLabel: gpu { containerOptions = '--nv' From 612c17b9f51153746f16b74e06caa557339f8d57 Mon Sep 17 00:00:00 2001 From: "Maxime U. Garcia" Date: Thu, 2 Apr 2026 16:49:58 +0200 Subject: [PATCH 41/57] utd_juno --- conf/utd_juno.config | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/conf/utd_juno.config b/conf/utd_juno.config index 3b1caf0c8..d9588b6eb 100644 --- a/conf/utd_juno.config +++ b/conf/utd_juno.config @@ -1,3 +1,4 @@ +// 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 = 'Anne Fu' @@ -27,26 +28,42 @@ process { executor = 'slurm' queue = { if (task.get('accelerator')?.type in ['h100', 'nvidia_h100', 'nvidia-h100', 'nvidia_h100_80gb_hbm3']) { - if (task.get('accelerator')?.limit == 1 && task.time >= 2.h) return 'h100' + if (task.get('accelerator')?.limit == 1 && task.time >= 2.h) { + return 'h100' + } return 'h100-2.40gb' } if (task.get('accelerator')?.type in ['a30', 'nvidia_a30', 'nvidia-a30', 'nvidia_a30_2g', 'nvidia_a30_4g']) { - if (task.get('accelerator')?.limit >= 4) return 'a30-4.6gb' - if (task.get('accelerator')?.limit >= 2) return 'a30-2.12gb' + if (task.get('accelerator')?.limit >= 4) { + return 'a30-4.6gb' + } + if (task.get('accelerator')?.limit >= 2) { + return 'a30-2.12gb' + } + return 'a30' + } + if (task.memory >= 384.GB && task.memory <= 512.GB) { + return 'h100' + } + if (task.memory >= 512.GB) { return 'a30' } - if (task.memory >= 384.GB && task.memory <= 512.GB) return 'h100' - if (task.memory >= 512.GB) return 'a30' return 'normal' } clusterOptions = { if (task.get('accelerator')?.type in ['h100', 'nvidia_h100', 'nvidia-h100', 'nvidia_h100_80gb_hbm3']) { - if (task.get('accelerator')?.limit == 1 && task.time >= 2.h) return "--gres=nvidia_h100_80gb_hbm3=${task.get('accelerator')?.limit}" + if (task.get('accelerator')?.limit == 1 && task.time >= 2.h) { + return "--gres=nvidia_h100_80gb_hbm3=${task.get('accelerator')?.limit}" + } return "--gres=nvidia_h100_80gb_hbm3=${task.get('accelerator')?.limit}" } if (task.get('accelerator')?.type in ['a30', 'nvidia_a30', 'nvidia-a30', 'nvidia_a30_2g', 'nvidia_a30_4g']) { - if (task.get('accelerator')?.limit >= 4) return "--gres=nvidia_a30=${task.get('accelerator')?.limit}" - if (task.get('accelerator')?.limit >= 2) return "--gres=nvidia_a30_2g=${task.get('accelerator')?.limit}" + if (task.get('accelerator')?.limit >= 4) { + return "--gres=nvidia_a30=${task.get('accelerator')?.limit}" + } + if (task.get('accelerator')?.limit >= 2) { + return "--gres=nvidia_a30_2g=${task.get('accelerator')?.limit}" + } return "--gres=nvidia_a30_1g=${task.get('accelerator')?.limit}" } return '' From a8adce2444249ee2bc556c4651a51fdb52860b8e Mon Sep 17 00:00:00 2001 From: "Maxime U. Garcia" Date: Thu, 2 Apr 2026 17:22:38 +0200 Subject: [PATCH 42/57] iris.config --- conf/iris.config | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/conf/iris.config b/conf/iris.config index e861cbf19..8fafc8360 100644 --- a/conf/iris.config +++ b/conf/iris.config @@ -13,20 +13,31 @@ params { isolated = false // Set to true when you can only use the provided paritition group = '' // IRIS group for the job work default path (e.g. /scratch/my_group) qos = '' // Set Quality of Service specification for SLURM jobs (e.g. priority) - partition = '' // SLURM partition (uses $NXF_SLURM_PARTITION or 'cpu' if not set) // Path config scratch_path = '/localscratch' work_path = '/scratch' singularity_library = '/data1/core006/resources/singularity_image_library' + // Derived Parameters + scratch_dir = new File(params.scratch_path) + work_base = params.group ? new File(params.work_path + "/${params.group}") : System.getenv('PWD')+ "/.work" + partition = System.getenv('NXF_SLURM_PARTITION') ?: 'cpu' + scratch = params.scratch_dir ? params.scratch_dir.getPath() : "${System.getenv('PWD')}/scratch" + workDir = params.work_base && params.work_base.getPath() != '/scratch' ? params.work_base + '/work' : "${System.getenv('PWD')}/work" + cleanup = params.workDir.startsWith('/scratch') + singularity_scratch = System.getenv('NXF_SINGULARITY_CACHEDIR') ?: params.workDir + '/singularity_scratch' + singularity_library = System.getenv('NXF_SINGULARITY_LIBRARYDIR') ?: '/data1/core006/resources/singularity_image_library' + // Validation Parameters ignore_params_list = [ 'max_cpus', 'max_memory', 'max_time', + 'scratch_dir', 'work_base', 'workDir', 'preemptable', 'scratch_path', 'work_path', 'singularity_library', 'isolated', 'group', 'qos', 'partition', 'scratch', 'ignore_params_list', - 'schema_ignore_params', 'validationSchemaIgnoreParams' + 'schema_ignore_params', 'validationSchemaIgnoreParams', + 'cleanup', 'singularity_scratch', 'singularity_library' ] schema_ignore_params = params.ignore_params_list.join(',') validationSchemaIgnoreParams = params.ignore_params_list.join(',') @@ -36,16 +47,6 @@ validation { ignoreParams = params.ignore_params_list } -// Set sensible defaults -def scratch_dir = new File(params.scratch_path) -def work_base = new File(params.work_path + "/${params.group}") -params.partition = params.partition ?: System.getenv('NXF_SLURM_PARTITION') ?: 'cpu' -params.scratch = scratch_dir.exists() ? scratch_dir.getPath() : "${PWD}/scratch" -workDir = work_base.exists() && work_base.getPath() != '/scratch' ? work_base.getPath() + '/work' : "${PWD}/work" -cleanup = workDir.startsWith('/scratch') ? true : false -def singularity_scratch = System.getenv('NXF_SINGULARITY_CACHEDIR') ?: workDir + '/singularity_scratch' -def singularity_library = System.getenv('NXF_SINGULARITY_LIBRARYDIR') ?: params.singularity_library - executor { name = 'slurm' pollInterval = 45.s @@ -59,8 +60,8 @@ executor { singularity { enabled = true autoMounts = true - cacheDir = singularity_scratch - libraryDir = singularity_library + cacheDir = params.singularity_scratch + libraryDir = params.singularity_library pullTimeout = 1.hour } From 7bd7451e0d182fe3ac853caa61b57c51cc7f5d9d Mon Sep 17 00:00:00 2001 From: "Maxime U. Garcia" Date: Thu, 2 Apr 2026 17:44:28 +0200 Subject: [PATCH 43/57] iris.config --- conf/iris.config | 19 ++++++++----------- trace-20260402-62983977.txt | 1 + trace-20260402-63067130.txt | 1 + trace-20260402-63081680.txt | 1 + trace-20260402-63096673.txt | 1 + trace-20260402-63111658.txt | 1 + trace-20260402-63126372.txt | 1 + trace-20260402-63166225.txt | 1 + trace-20260402-63854988.txt | 1 + 9 files changed, 16 insertions(+), 11 deletions(-) create mode 100644 trace-20260402-62983977.txt create mode 100644 trace-20260402-63067130.txt create mode 100644 trace-20260402-63081680.txt create mode 100644 trace-20260402-63096673.txt create mode 100644 trace-20260402-63111658.txt create mode 100644 trace-20260402-63126372.txt create mode 100644 trace-20260402-63166225.txt create mode 100644 trace-20260402-63854988.txt diff --git a/conf/iris.config b/conf/iris.config index 8fafc8360..4cc8a0e3f 100644 --- a/conf/iris.config +++ b/conf/iris.config @@ -17,14 +17,12 @@ params { // Path config scratch_path = '/localscratch' work_path = '/scratch' - singularity_library = '/data1/core006/resources/singularity_image_library' // Derived Parameters - scratch_dir = new File(params.scratch_path) - work_base = params.group ? new File(params.work_path + "/${params.group}") : System.getenv('PWD')+ "/.work" + work_base = params.group ? "${params.work_path}/${params.group}" : "${System.getenv('PWD')}/.work" partition = System.getenv('NXF_SLURM_PARTITION') ?: 'cpu' - scratch = params.scratch_dir ? params.scratch_dir.getPath() : "${System.getenv('PWD')}/scratch" - workDir = params.work_base && params.work_base.getPath() != '/scratch' ? params.work_base + '/work' : "${System.getenv('PWD')}/work" + scratch = params.scratch_path ?: "${System.getenv('PWD')}/scratch" + workDir = params.work_base != '/scratch' ? params.work_base + '/work' : "${System.getenv('PWD')}/work" cleanup = params.workDir.startsWith('/scratch') singularity_scratch = System.getenv('NXF_SINGULARITY_CACHEDIR') ?: params.workDir + '/singularity_scratch' singularity_library = System.getenv('NXF_SINGULARITY_LIBRARYDIR') ?: '/data1/core006/resources/singularity_image_library' @@ -32,12 +30,11 @@ params { // Validation Parameters ignore_params_list = [ 'max_cpus', 'max_memory', 'max_time', - 'scratch_dir', 'work_base', 'workDir', - 'preemptable', 'scratch_path', 'work_path', - 'singularity_library', 'isolated', 'group', - 'qos', 'partition', 'scratch', 'ignore_params_list', - 'schema_ignore_params', 'validationSchemaIgnoreParams', - 'cleanup', 'singularity_scratch', 'singularity_library' + 'preemptable', 'isolated', 'group', 'qos', + 'scratch_path', 'work_path', + 'work_base', 'partition', 'scratch', 'workDir', + 'cleanup', 'singularity_scratch', 'singularity_library', + 'ignore_params_list', 'schema_ignore_params', 'validationSchemaIgnoreParams' ] schema_ignore_params = params.ignore_params_list.join(',') validationSchemaIgnoreParams = params.ignore_params_list.join(',') diff --git a/trace-20260402-62983977.txt b/trace-20260402-62983977.txt new file mode 100644 index 000000000..6b739acdf --- /dev/null +++ b/trace-20260402-62983977.txt @@ -0,0 +1 @@ +task_id hash native_id name status exit submit duration realtime %cpu peak_rss peak_vmem rchar wchar diff --git a/trace-20260402-63067130.txt b/trace-20260402-63067130.txt new file mode 100644 index 000000000..6b739acdf --- /dev/null +++ b/trace-20260402-63067130.txt @@ -0,0 +1 @@ +task_id hash native_id name status exit submit duration realtime %cpu peak_rss peak_vmem rchar wchar diff --git a/trace-20260402-63081680.txt b/trace-20260402-63081680.txt new file mode 100644 index 000000000..6b739acdf --- /dev/null +++ b/trace-20260402-63081680.txt @@ -0,0 +1 @@ +task_id hash native_id name status exit submit duration realtime %cpu peak_rss peak_vmem rchar wchar diff --git a/trace-20260402-63096673.txt b/trace-20260402-63096673.txt new file mode 100644 index 000000000..6b739acdf --- /dev/null +++ b/trace-20260402-63096673.txt @@ -0,0 +1 @@ +task_id hash native_id name status exit submit duration realtime %cpu peak_rss peak_vmem rchar wchar diff --git a/trace-20260402-63111658.txt b/trace-20260402-63111658.txt new file mode 100644 index 000000000..6b739acdf --- /dev/null +++ b/trace-20260402-63111658.txt @@ -0,0 +1 @@ +task_id hash native_id name status exit submit duration realtime %cpu peak_rss peak_vmem rchar wchar diff --git a/trace-20260402-63126372.txt b/trace-20260402-63126372.txt new file mode 100644 index 000000000..6b739acdf --- /dev/null +++ b/trace-20260402-63126372.txt @@ -0,0 +1 @@ +task_id hash native_id name status exit submit duration realtime %cpu peak_rss peak_vmem rchar wchar diff --git a/trace-20260402-63166225.txt b/trace-20260402-63166225.txt new file mode 100644 index 000000000..6b739acdf --- /dev/null +++ b/trace-20260402-63166225.txt @@ -0,0 +1 @@ +task_id hash native_id name status exit submit duration realtime %cpu peak_rss peak_vmem rchar wchar diff --git a/trace-20260402-63854988.txt b/trace-20260402-63854988.txt new file mode 100644 index 000000000..6b739acdf --- /dev/null +++ b/trace-20260402-63854988.txt @@ -0,0 +1 @@ +task_id hash native_id name status exit submit duration realtime %cpu peak_rss peak_vmem rchar wchar From bae4878bb3574ced39ff0410aff777d6ee39f3a1 Mon Sep 17 00:00:00 2001 From: "Maxime U. Garcia" Date: Thu, 2 Apr 2026 17:45:35 +0200 Subject: [PATCH 44/57] no trace files --- trace-20260402-62983977.txt | 1 - trace-20260402-63067130.txt | 1 - trace-20260402-63081680.txt | 1 - trace-20260402-63096673.txt | 1 - trace-20260402-63111658.txt | 1 - trace-20260402-63126372.txt | 1 - trace-20260402-63166225.txt | 1 - trace-20260402-63854988.txt | 1 - 8 files changed, 8 deletions(-) delete mode 100644 trace-20260402-62983977.txt delete mode 100644 trace-20260402-63067130.txt delete mode 100644 trace-20260402-63081680.txt delete mode 100644 trace-20260402-63096673.txt delete mode 100644 trace-20260402-63111658.txt delete mode 100644 trace-20260402-63126372.txt delete mode 100644 trace-20260402-63166225.txt delete mode 100644 trace-20260402-63854988.txt diff --git a/trace-20260402-62983977.txt b/trace-20260402-62983977.txt deleted file mode 100644 index 6b739acdf..000000000 --- a/trace-20260402-62983977.txt +++ /dev/null @@ -1 +0,0 @@ -task_id hash native_id name status exit submit duration realtime %cpu peak_rss peak_vmem rchar wchar diff --git a/trace-20260402-63067130.txt b/trace-20260402-63067130.txt deleted file mode 100644 index 6b739acdf..000000000 --- a/trace-20260402-63067130.txt +++ /dev/null @@ -1 +0,0 @@ -task_id hash native_id name status exit submit duration realtime %cpu peak_rss peak_vmem rchar wchar diff --git a/trace-20260402-63081680.txt b/trace-20260402-63081680.txt deleted file mode 100644 index 6b739acdf..000000000 --- a/trace-20260402-63081680.txt +++ /dev/null @@ -1 +0,0 @@ -task_id hash native_id name status exit submit duration realtime %cpu peak_rss peak_vmem rchar wchar diff --git a/trace-20260402-63096673.txt b/trace-20260402-63096673.txt deleted file mode 100644 index 6b739acdf..000000000 --- a/trace-20260402-63096673.txt +++ /dev/null @@ -1 +0,0 @@ -task_id hash native_id name status exit submit duration realtime %cpu peak_rss peak_vmem rchar wchar diff --git a/trace-20260402-63111658.txt b/trace-20260402-63111658.txt deleted file mode 100644 index 6b739acdf..000000000 --- a/trace-20260402-63111658.txt +++ /dev/null @@ -1 +0,0 @@ -task_id hash native_id name status exit submit duration realtime %cpu peak_rss peak_vmem rchar wchar diff --git a/trace-20260402-63126372.txt b/trace-20260402-63126372.txt deleted file mode 100644 index 6b739acdf..000000000 --- a/trace-20260402-63126372.txt +++ /dev/null @@ -1 +0,0 @@ -task_id hash native_id name status exit submit duration realtime %cpu peak_rss peak_vmem rchar wchar diff --git a/trace-20260402-63166225.txt b/trace-20260402-63166225.txt deleted file mode 100644 index 6b739acdf..000000000 --- a/trace-20260402-63166225.txt +++ /dev/null @@ -1 +0,0 @@ -task_id hash native_id name status exit submit duration realtime %cpu peak_rss peak_vmem rchar wchar diff --git a/trace-20260402-63854988.txt b/trace-20260402-63854988.txt deleted file mode 100644 index 6b739acdf..000000000 --- a/trace-20260402-63854988.txt +++ /dev/null @@ -1 +0,0 @@ -task_id hash native_id name status exit submit duration realtime %cpu peak_rss peak_vmem rchar wchar From fa35b24875102a5034c6a81aa3fdded19e2c99d7 Mon Sep 17 00:00:00 2001 From: "Maxime U. Garcia" Date: Thu, 2 Apr 2026 17:53:39 +0200 Subject: [PATCH 45/57] pre-commit --- conf/vsc_calcua.config | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/conf/vsc_calcua.config b/conf/vsc_calcua.config index 67a4d9941..89246796e 100644 --- a/conf/vsc_calcua.config +++ b/conf/vsc_calcua.config @@ -175,12 +175,12 @@ profiles { params.max_memory = { // Set default node memory as fallback def node_max_mem = params.vsc_calcua_partition == 'zen2' ? 240 : - params.vsc_calcua_partition == 'zen3' ? 240 : - params.vsc_calcua_partition == 'zen3_512' ? 496 : - params.vsc_calcua_partition == 'broadwell' ? 112 : - params.vsc_calcua_partition == 'broadwell_256' ? 240 : - params.vsc_calcua_partition == 'skylake' ? 176 : - null + params.vsc_calcua_partition == 'zen3' ? 240 : + params.vsc_calcua_partition == 'zen3_512' ? 496 : + params.vsc_calcua_partition == 'broadwell' ? 112 : + params.vsc_calcua_partition == 'broadwell_256' ? 240 : + params.vsc_calcua_partition == 'skylake' ? 176 : + null def int max_mem = node_max_mem // Single node execution only: @@ -201,19 +201,19 @@ params.max_memory = { params.max_cpus = { // Set default node cpu as fallback def node_max_cpu = params.vsc_calcua_partition == 'zen2' ? 64 : - params.vsc_calcua_partition == 'zen3' ? 64 : - params.vsc_calcua_partition == 'zen3_512' ? 64 : - params.vsc_calcua_partition == 'broadwell' ? 28 : - params.vsc_calcua_partition == 'broadwell_256' ? 28 : - params.vsc_calcua_partition == 'skylake' ? 28 : - null + params.vsc_calcua_partition == 'zen3' ? 64 : + params.vsc_calcua_partition == 'zen3_512' ? 64 : + params.vsc_calcua_partition == 'broadwell' ? 28 : + params.vsc_calcua_partition == 'broadwell_256' ? 28 : + params.vsc_calcua_partition == 'skylake' ? 28 : + null def int max_cpus = node_max_cpu // Single node execution only: // Attempt to retrieve SLURM resources from environment variables in job environment if(!params.vsc_calcua_slurm_scheduling) { - max_cpus = System.getenv("SLURM_CPUS_PER_TASK").toInteger() ?: System.getenv("SLURM_JOB_CPUS_PER_NODE").toInteger ?: node_max_cpu + max_cpus = System.getenv("SLURM_CPUS_PER_TASK").toInteger() ?: System.getenv("SLURM_JOB_CPUS_PER_NODE").toInteger ?: node_max_cpu } return max_cpus }.call() From 785426761557a6871aa661d121e4243e9972aca5 Mon Sep 17 00:00:00 2001 From: "Maxime U. Garcia" Date: Thu, 2 Apr 2026 18:46:47 +0200 Subject: [PATCH 46/57] kaust --- conf/kaust.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/kaust.config b/conf/kaust.config index c9a37050f..66fd35f88 100755 --- a/conf/kaust.config +++ b/conf/kaust.config @@ -8,7 +8,7 @@ params { } // Load genome resources and assets hosted by the Bioinformatics team on IBEX cluster -includeConfig 'https://raw.githubusercontent.com/bioinfo-kaust/references/refs/heads/main/configs/genomes.config' +includeConfig (!System.getenv('NXF_OFFLINE')) ? "'https://raw.githubusercontent.com/bioinfo-kaust/references/refs/heads/main/configs/genomes.config" : "/dev/null" singularity { enabled = true From d14c5f598ee2c9a0afcf7b740891c14e678d3599 Mon Sep 17 00:00:00 2001 From: "Maxime U. Garcia" Date: Thu, 2 Apr 2026 18:49:36 +0200 Subject: [PATCH 47/57] kaust --- conf/kaust.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/kaust.config b/conf/kaust.config index 66fd35f88..bd0c39128 100755 --- a/conf/kaust.config +++ b/conf/kaust.config @@ -8,7 +8,7 @@ params { } // Load genome resources and assets hosted by the Bioinformatics team on IBEX cluster -includeConfig (!System.getenv('NXF_OFFLINE')) ? "'https://raw.githubusercontent.com/bioinfo-kaust/references/refs/heads/main/configs/genomes.config" : "/dev/null" +includeConfig (!System.getenv('NXF_OFFLINE') ? "https://raw.githubusercontent.com/bioinfo-kaust/references/refs/heads/main/configs/genomes.config" : "/dev/null") singularity { enabled = true From 01d63e9ad52403df05ec05c92bd10f6f11198483 Mon Sep 17 00:00:00 2001 From: "Maxime U. Garcia" Date: Thu, 2 Apr 2026 19:03:51 +0200 Subject: [PATCH 48/57] update GHA --- .github/workflows/main.yml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 51e060a38..825b183ba 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -37,6 +37,22 @@ jobs: with: version: ${{ matrix.NXF_VER }} - run: nextflow config -show-profiles ${GITHUB_WORKSPACE} + + lint_nextflow_config: + name: Check if nextflow config runs in repository root + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + NXF_VER: + - 25.04.0 + - latest-everything + steps: + - uses: actions/checkout@v4 + - name: Set up Nextflow + uses: nf-core/setup-nextflow@v2 + with: + version: ${{ matrix.NXF_VER }} - run: nextflow lint ${GITHUB_WORKSPACE} profile_test: From c1cac76514fec83518d6059aa89bb020b21558d9 Mon Sep 17 00:00:00 2001 From: "Maxime U. Garcia" Date: Thu, 2 Apr 2026 19:08:28 +0200 Subject: [PATCH 49/57] update GHA --- .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 825b183ba..77df75027 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -39,7 +39,7 @@ jobs: - run: nextflow config -show-profiles ${GITHUB_WORKSPACE} lint_nextflow_config: - name: Check if nextflow config runs in repository root + name: Check if nextflow files are valid with nextflow lint runs-on: ubuntu-latest strategy: fail-fast: false From 35d081638bddd0a9359e6b29434f1b79ea462f99 Mon Sep 17 00:00:00 2001 From: "Maxime U. Garcia" Date: Thu, 2 Apr 2026 19:14:18 +0200 Subject: [PATCH 50/57] update GHA --- .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 77df75027..dc90421d2 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -226,7 +226,7 @@ jobs: uses: nf-core/setup-nextflow@v2 with: version: "latest-everything" - - name: Check ${{ matrix.profile }} profile + - name: Check ${{ matrix.profile }} profile env: SCRATCH: "~" NXF_GLOBAL_CONFIG: awsbatch.config From 8de6d8405771d35c6126bedb83aba001cbbee9c4 Mon Sep 17 00:00:00 2001 From: "Maxime U. Garcia" Date: Tue, 7 Apr 2026 10:14:10 +0200 Subject: [PATCH 51/57] pre-commit --- conf/seadragon.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/seadragon.config b/conf/seadragon.config index 956411655..946655393 100644 --- a/conf/seadragon.config +++ b/conf/seadragon.config @@ -69,7 +69,7 @@ process { withLabel:process_gpu { cpus = { 10 * task.attempt } // Conservative fit for egpu nodes (80 cores/node) memory = { 237.GB * task.attempt } // Sized for egpu nodes (950 GB/node) - time = { 24.h * task.attempt } // egpu allows up to 504 h + time = { 24.h * task.attempt } // egpu allows up to 504 h queue = 'egpu' // Prioritize egpu because gpu has few older nodes clusterOptions = '-gpu "num=1:j_exclusive=yes"' containerOptions = '--nv' From 8a8bc018481973d6fffcddb0c659b73b46d61864 Mon Sep 17 00:00:00 2001 From: Maxime U Garcia Date: Tue, 7 Apr 2026 10:21:26 +0200 Subject: [PATCH 52/57] Apply suggestions from code review Co-authored-by: Maxime U Garcia --- docs/dirac.md | 6 +++--- docs/marjorie.md | 6 +++--- docs/mssm.md | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/dirac.md b/docs/dirac.md index d8a474f9b..387c2a3fc 100644 --- a/docs/dirac.md +++ b/docs/dirac.md @@ -28,8 +28,8 @@ It is best practices to set the environment variables when running on the HPC, by adding the following to your `~./bashrc` profile: ```bash -export NXF_CACHE_DIR=/scratch/${System.getenv('USER')} -export NXF_WORK=/scratch/${System.getenv('USER')} -export APPTAINER_CACHEDIR=/scratch/${System.getenv('USER')} +export NXF_CACHE_DIR=/scratch/${USER} +export NXF_WORK=/scratch/${USER} +export APPTAINER_CACHEDIR=/scratch/${USER} export NXF_APPTAINER_CACHEDIR=$APPTAINER_CACHEDIR ``` diff --git a/docs/marjorie.md b/docs/marjorie.md index 8af7a5928..328ef3688 100644 --- a/docs/marjorie.md +++ b/docs/marjorie.md @@ -28,8 +28,8 @@ It is best practices to set the environment variables when running on the HPC, by adding the following to your `~./bashrc` profile: ```bash -export NXF_CACHE_DIR=/scratch/${System.getenv('USER')} -export NXF_WORK=/scratch/${System.getenv('USER')} -export APPTAINER_CACHEDIR=/scratch/${System.getenv('USER')} +export NXF_CACHE_DIR=/scratch/${USER} +export NXF_WORK=/scratch/${USER} +export APPTAINER_CACHEDIR=/scratch/${USER} export NXF_APPTAINER_CACHEDIR=$APPTAINER_CACHEDIR ``` diff --git a/docs/mssm.md b/docs/mssm.md index 752e2bdd0..77c37c998 100644 --- a/docs/mssm.md +++ b/docs/mssm.md @@ -105,7 +105,7 @@ cd $PROJ_DIR nextflow run $NFC_PIPE \ -r $NFC_VER \ -profile $NFC_PROFILE \ - -w /sc/arion/scratch/${System.getenv('USER')}/work \ + -w /sc/arion/scratch/${USER}/work \ -c $PROJ_DIR/custom.config \ --input $SAMPLESHEET \ --outdir $OUTDIR \ From d8b774ca76de0dbfb69ca1a0226e10fdf1bc77f4 Mon Sep 17 00:00:00 2001 From: Maxime U Garcia Date: Tue, 7 Apr 2026 10:22:14 +0200 Subject: [PATCH 53/57] Apply suggestion from @maxulysse --- docs/lovelace.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/lovelace.md b/docs/lovelace.md index bf4459bc4..67a6ceaf1 100644 --- a/docs/lovelace.md +++ b/docs/lovelace.md @@ -28,8 +28,8 @@ It is best practices to set the environment variables when running on the HPC, by adding the following to your `~./bashrc` profile: ```bash -export NXF_CACHE_DIR=/scratch/${System.getenv('USER')} -export NXF_WORK=/scratch/${System.getenv('USER')} -export APPTAINER_CACHEDIR=/scratch/${System.getenv('USER')} +export NXF_CACHE_DIR=/scratch/${USER} +export NXF_WORK=/scratch/${USER} +export APPTAINER_CACHEDIR=/scratch/${USER} export NXF_APPTAINER_CACHEDIR=$APPTAINER_CACHEDIR ``` From 9314cd019a5ff8635ea1012c3c85c723c7b9ebd2 Mon Sep 17 00:00:00 2001 From: "Maxime U. Garcia" Date: Tue, 7 Apr 2026 11:59:04 +0200 Subject: [PATCH 54/57] improve params --- conf/wustl_htcf.config | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/conf/wustl_htcf.config b/conf/wustl_htcf.config index dad28a9dd..190185a06 100644 --- a/conf/wustl_htcf.config +++ b/conf/wustl_htcf.config @@ -14,8 +14,7 @@ params { max_time = 168.h // Define singularity directory based on LAB environment variable or group membership - lab_env = System.getenv("LAB") ?: "id -nG".execute().text.split(" ").last() - singularityDir = "/ref/${params.lab_env}/data/singularity_images_nextflow" + singularityDir = "/ref/${System.getenv("LAB") ?: "id -nG".execute().text.split(" ").last()}/data/singularity_images_nextflow" } spack { From 81627bd5c09e75c555c294727256012efa9fa58e Mon Sep 17 00:00:00 2001 From: "Maxime U. Garcia" Date: Tue, 7 Apr 2026 16:00:02 +0200 Subject: [PATCH 55/57] alliance_canada --- conf/aliance_canada/narval.config | 13 ----- conf/aliance_canada/nibi.config | 13 ----- conf/aliance_canada/rorqual.config | 13 ----- conf/aliance_canada/trillium.config | 15 ------ conf/alliance_canada.config | 77 +++++++++++++---------------- 5 files changed, 34 insertions(+), 97 deletions(-) delete mode 100644 conf/aliance_canada/narval.config delete mode 100644 conf/aliance_canada/nibi.config delete mode 100644 conf/aliance_canada/rorqual.config delete mode 100644 conf/aliance_canada/trillium.config diff --git a/conf/aliance_canada/narval.config b/conf/aliance_canada/narval.config deleted file mode 100644 index 83ca6a42a..000000000 --- a/conf/aliance_canada/narval.config +++ /dev/null @@ -1,13 +0,0 @@ -// Used by https://github.com/nf-core/configs/blob/master/conf/aliance_canada.config -// Updates settings for Narval - -params.config_profile_description = 'Alliance Canada (Narval) cluster profile provided by nf-core/configs.' -params.max_memory = 249.GB -params.max_cpus = 64 -process { - resourceLimits = [ - memory: 249.GB, - cpus: 64, - time: 168.h - ] -} diff --git a/conf/aliance_canada/nibi.config b/conf/aliance_canada/nibi.config deleted file mode 100644 index 721244e02..000000000 --- a/conf/aliance_canada/nibi.config +++ /dev/null @@ -1,13 +0,0 @@ -// Used by https://github.com/nf-core/configs/blob/master/conf/aliance_canada.config -// Updates settings for Nibi - -params.config_profile_description = 'Alliance Canada (Nibi) cluster profile provided by nf-core/configs.' -params.max_memory = 750.GB -params.max_cpus = 192 -process { - resourceLimits = [ - memory: 750.GB, - cpus: 192, - time: 168.h - ] -} diff --git a/conf/aliance_canada/rorqual.config b/conf/aliance_canada/rorqual.config deleted file mode 100644 index ed703a1ef..000000000 --- a/conf/aliance_canada/rorqual.config +++ /dev/null @@ -1,13 +0,0 @@ -// Used by https://github.com/nf-core/configs/blob/master/conf/aliance_canada.config -// Updates settings for Rorqual - -params.config_profile_description = 'Alliance Canada (Rorqual) cluster profile provided by nf-core/configs.' -params.max_memory = 750.GB -params.max_cpus = 192 -process { - resourceLimits = [ - memory: 750.GB, - cpus: 192, - time: 168.h - ] -} diff --git a/conf/aliance_canada/trillium.config b/conf/aliance_canada/trillium.config deleted file mode 100644 index 33d7478f4..000000000 --- a/conf/aliance_canada/trillium.config +++ /dev/null @@ -1,15 +0,0 @@ -// Used by https://github.com/nf-core/configs/blob/master/conf/aliance_canada.config -// Updates settings for Trillium - -params.config_profile_description = 'Alliance Canada (Trillium) cluster profile provided by nf-core/configs.' -params.max_memory = null -params.max_cpus = null -process { - clusterOptions = "--account=${System.getenv('SLURM_ACCOUNT')} --nodes=1" - resourceLimits = [ - time: 168.h - ] -} -executor { - queueSize = 500 -} diff --git a/conf/alliance_canada.config b/conf/alliance_canada.config index 56a41536a..e79ddb7a7 100644 --- a/conf/alliance_canada.config +++ b/conf/alliance_canada.config @@ -1,11 +1,26 @@ params { - config_profile_description = 'Alliance Canada HPC config' config_profile_contact = 'Jerry Li (@jerryakii)' config_profile_url = 'https://docs.alliancecan.ca/wiki/Nextflow' + hostname = System.getenv('HOSTNAME') ?: 'narval' + + config_profile_description = params.hostname == 'narval' ? 'Alliance Canada (Narval) cluster profile provided by nf-core/configs.' : + params.hostname == 'nibi' ? 'Alliance Canada (Nibi) cluster profile provided by nf-core/configs.' : + params.hostname == 'rorqual' ? 'Alliance Canada (Rorqual) cluster profile provided by nf-core/configs.' : + params.hostname == 'trillium' ? 'Alliance Canada (Trillium) cluster profile provided by nf-core/configs.' : + 'Alliance Canada HPC config' + + max_cpus = params.hostname == 'nibi' ? 192 : + params.hostname == 'rorqual' ? 192 : + params.hostname == 'trillium' ? null : + 64 + max_memory = + params.hostname == 'narval' ? 249.GB : + params.hostname == 'nibi' ? 750.GB : + params.hostname == 'rorqual' ? 750.GB : + params.hostname == 'trillium' ? null : + 240.GB max_time = 168.h - max_cpus = 64 - max_memory = 240.GB } cleanup = true @@ -16,7 +31,8 @@ singularity { } apptainer { - autoMounts = true } + autoMounts = true +} // Group name for resource allocation must be supplied as environment variable process { @@ -24,54 +40,29 @@ process { clusterOptions = "--account=${System.getenv('SLURM_ACCOUNT')}" maxRetries = 1 errorStrategy = { task.exitStatus in [125,139] ? 'retry' : 'finish' } - cpu = 1 + cpus = 1 time = '3h' + resourceLimits = [ - memory: 240.GB, - cpus: 64, - time: 168.h - ] + cpus: params.hostname == 'nibi' ? 192 : + params.hostname == 'rorqual' ? 192 : + 64, + memory: params.hostname == 'narval' ? 249.GB : + params.hostname == 'nibi' ? 750.GB : + params.hostname == 'rorqual' ? 750.GB : + 240.GB, + time: 168.h + ] + + clusterOptions = params.hostname == 'trillium' ? "--account=${System.getenv('SLURM_ACCOUNT', '')} --nodes=1" : '' } executor { pollInterval = '60 sec' submitRateLimit = '60/1min' - queueSize = 100 + queueSize = params.hostname == 'trillium' ? 500 : 100 } -// Cluster name is available as environment variable -// If not found, default to narval as it has the lowest limits -includeConfig ({ - def hostname = "narval" - try { - hostname = "${System.getenv('HOSTNAME')}" - } - catch (IOException _e) { - System.err.println("WARNING: Could not determine current cluster, defaulting to narval") - } - // Cluster Narval - if (hostname.startsWith("narval")) { - return "alliance_canada/narval.config" - } - - // Cluster Nibi - if (hostname.contains("nibi")) { - return "alliance_canada/nibi.config" - } - - // Cluster Rorqual - if (hostname.startsWith("rorqual")) { - return "alliance_canada/rorqual.config" - } - - // Cluster Trillium - if (hostname.startsWith("tri")) { - return "alliance_canada/trillium.config" - } - - return "/dev/null" -}.call()) - // Cluster Fir // not sure what the hostname is so set it as a profile profiles { From e55917240cc9b4ff20a11cea16fb2245e410d014 Mon Sep 17 00:00:00 2001 From: "Maxime U. Garcia" Date: Tue, 14 Apr 2026 09:56:30 +0200 Subject: [PATCH 56/57] restore --- conf/iris.config | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/conf/iris.config b/conf/iris.config index 64e7d5d4d..caecd41af 100644 --- a/conf/iris.config +++ b/conf/iris.config @@ -13,19 +13,12 @@ params { isolated = false // Set to true when you can only use the provided paritition group = '' // IRIS group for the job work default path (e.g. /scratch/my_group) qos = '' // Set Quality of Service specification for SLURM jobs (e.g. priority) + partition = '' // SLURM partition (uses $NXF_SLURM_PARTITION or 'cpu' if not set) // Path config scratch_path = '/localscratch' work_path = '/scratch' - - // Derived Parameters - work_base = params.group ? "${params.work_path}/${params.group}" : "${System.getenv('PWD')}/.work" - partition = System.getenv('NXF_SLURM_PARTITION') ?: 'cpu' - scratch = params.scratch_path ?: "${System.getenv('PWD')}/scratch" - workDir = params.work_base != '/scratch' ? params.work_base + '/work' : "${System.getenv('PWD')}/work" - cleanup = params.workDir.startsWith('/scratch') - singularity_scratch = System.getenv('NXF_SINGULARITY_CACHEDIR') ?: params.workDir + '/singularity_scratch' - singularity_library = System.getenv('NXF_SINGULARITY_LIBRARYDIR') ?: '/data1/core006/resources/singularity_image_library' + singularity_library = '/data1/core006/resources/singularity_image_library' // Validation Parameters ignore_params_list = [ From ffa2c98a1f391640145da1c44f88b1b2cf734afb Mon Sep 17 00:00:00 2001 From: "Maxime U. Garcia" Date: Fri, 29 May 2026 09:23:01 +0200 Subject: [PATCH 57/57] get fix from upstream --- conf/vsc_kul_uhasselt.config | 100 +---------------------------------- 1 file changed, 1 insertion(+), 99 deletions(-) diff --git a/conf/vsc_kul_uhasselt.config b/conf/vsc_kul_uhasselt.config index 5bc88588e..583301890 100644 --- a/conf/vsc_kul_uhasselt.config +++ b/conf/vsc_kul_uhasselt.config @@ -1,16 +1,3 @@ -// Ignore configuration parameters in validation -validation { - ignoreParams = [ - 'vsc_kul_hasselt_scratchdir', - 'vsc_kul_hasselt_tier2_project', - 'vsc_kul_hasselt_available_queues', - 'vsc_kul_hasselt_publish_location', - 'vsc_kul_hasselt_time_threshold', - 'vsc_kul_hasselt_memory_threshold_genius', - 'vsc_kul_hasselt_memory_threshold_wice', - ] -} - // Default to /tmp directory if $VSC_SCRATCH scratch env is not available, // see: https://github.com/nf-core/configs?tab=readme-ov-file#adding-a-new-config // NOTE: All helper variables and functions have been inlined into closures for @@ -65,9 +52,7 @@ env { // AWS maximum retries for errors (This way the pipeline doesn't fail if the download fails one time) aws { - client { - maxErrorRetry = 3 - } + maxErrorRetry = 3 } /* @@ -95,19 +80,6 @@ profiles { process { // 768 - 65 so 65GB for overhead, max is 720000MB - ext.vsc_kul_hasselt_queue = { - def isHighMemory = task.memory >= params.vsc_kul_hasselt_memory_threshold_genius - def isLongRunning = task.time >= params.vsc_kul_hasselt_time_threshold - def hasDedicatedBigmem = params.vsc_kul_hasselt_available_queues.contains('dedicated_big_bigmem') - - if (isHighMemory) { - return isLongRunning ? - (hasDedicatedBigmem ? 'dedicated_big_bigmem' : 'bigmem_long') : - 'bigmem' - } - - return isLongRunning ? 'batch_long' : 'batch' - } resourceLimits = [ memory: 703.GB, cpus: 36, time: 168.h ] beforeScript = { // determineGeniusQueue logic @@ -152,24 +124,6 @@ profiles { } withLabel: '.*gpu.*'{ - ext.vsc_kul_hasselt_queue = { - def isHighMemory = task.memory >= params.vsc_kul_hasselt_memory_threshold_genius - def isLongRunning = task.time >= params.vsc_kul_hasselt_time_threshold - def hasDedicatedGpu = params.vsc_kul_hasselt_available_queues.contains('dedicated_rega_gpu') - def hasAmdGpu = params.vsc_kul_hasselt_available_queues.contains('amd') - - if (isHighMemory) { - return isLongRunning ? 'gpu_v100_long' : 'gpu_v100' - } - - if (isLongRunning) { - if (hasDedicatedGpu) return 'dedicated_rega_gpu' - if (hasAmdGpu) return 'amd_long' - return 'gpu_p100_long' - } - - return hasAmdGpu ? 'amd' : 'gpu_p100' - } resourceLimits = [ memory: 703.GB, cpus: 36 , time: 168.h ] beforeScript = { // determineGeniusGpuQueue logic @@ -222,24 +176,6 @@ profiles { process { // 768 - 65 so 65GB for overhead, max is 720000MB - ext.vsc_kul_hasselt_queue = { - def isHighMemory = task.memory >= params.vsc_kul_hasselt_memory_threshold_genius - def isLongRunning = task.time >= params.vsc_kul_hasselt_time_threshold - def hasDedicatedGpu = params.vsc_kul_hasselt_available_queues.contains('dedicated_rega_gpu') - def hasAmdGpu = params.vsc_kul_hasselt_available_queues.contains('amd') - - if (isHighMemory) { - return isLongRunning ? 'gpu_v100_long' : 'gpu_v100' - } - - if (isLongRunning) { - if (hasDedicatedGpu) return 'dedicated_rega_gpu' - if (hasAmdGpu) return 'amd_long' - return 'gpu_p100_long' - } - - return hasAmdGpu ? 'amd' : 'gpu_p100' - } resourceLimits = [ memory: 703.GB, cpus: 36, time: 168.h] beforeScript = { // determineGeniusGpuQueue logic @@ -287,23 +223,6 @@ profiles { process { // max is 2016000 - ext.vsc_kul_hasselt_queue = { - def isHighMemory = task.memory >= params.vsc_kul_hasselt_memory_threshold_wice - def isLongRunning = task.time >= params.vsc_kul_hasselt_time_threshold - def hasDedicatedQueue = params.vsc_kul_hasselt_available_queues.contains('dedicated_big_bigmem') - - if (isHighMemory) { - if (isLongRunning && hasDedicatedQueue) { - return 'dedicated_big_bigmem' - } - task.time = { task.time > params.vsc_kul_hasselt_time_threshold ? params.vsc_kul_hasselt_time_threshold : task.time } - return 'bigmem,hugemem' - } - - return isLongRunning ? - 'batch_long,batch_icelake_long,batch_sapphirerapids_long' : - 'batch,batch_sapphirerapids,batch_icelake' - } resourceLimits = [ memory: 1968.GB, cpus: 72, time: 168.h ] beforeScript = { // determineWiceQueue logic @@ -368,23 +287,6 @@ profiles { } withLabel: '.*gpu.*' { - ext.vsc_kul_hasselt_queue = { - def isHighMemory = task.memory >= params.vsc_kul_hasselt_memory_threshold_wice - def isLongRunning = task.time >= params.vsc_kul_hasselt_time_threshold - def hasDedicatedQueue = isHighMemory ? - params.vsc_kul_hasselt_available_queues.contains('dedicated_big_gpu_h100') : - params.vsc_kul_hasselt_available_queues.contains('dedicated_big_gpu') - - if (isLongRunning && !hasDedicatedQueue) { - task.time = { task.time > params.vsc_kul_hasselt_time_threshold ? params.vsc_kul_hasselt_time_threshold : task.time } - } - - if (isHighMemory) { - return (isLongRunning && hasDedicatedQueue) ? 'dedicated_big_gpu_h100' : 'gpu_h100' - } - - return (isLongRunning && hasDedicatedQueue) ? 'dedicated_big_gpu' : 'gpu_a100,gpu' - } resourceLimits = [ memory: 703.GB, cpus: 64, time: 168.h ] apptainer.runOptions = '--containall --cleanenv --nv' singularity.runOptions = '--containall --cleanenv --nv'