nf-core/configs: CFC Configuration
All nf-core pipelines have been successfully configured for use on the CFC cluster at the Quantitative Biology Center here.
To use, run the pipeline with -profile cfc
. This will download and launch the cfc.config
which has been pre-configured with a setup suitable for the CFC cluster. Using this profile, for DSL1 pipelines a docker image containing all of the required software will be downloaded, and converted to a Singularity image before execution of the pipeline. For pipelines in DSL2, the individual Singularity images will be downloaded.
Before running the pipeline you will need to install Nextflow on the CFC cluster. You can do this by following the instructions here.
This config includes the cluster-specific parameters for estimating the CO2 footprint via the nf-co2footprint plugin of any pipeline run on the cluster. The parameters include the cluster-specific power usage effectiveness (PUE) and the location of the cluster in Germany(DE
).
NB: You will need an account to use the HPC cluster CFC in order to run the pipeline. If in doubt contact IT. NB: Nextflow will need to submit the jobs via the job scheduler to the HPC cluster and as such the commands above will have to be executed on one of the login nodes. If in doubt contact IT.
Config file
//Profile config names for nf-core/configs
params {
config_profile_description = 'QBiC Core Facility cluster profile provided by nf-core/configs.'
config_profile_contact = 'Sabrina Krakau (@skrakau)'
config_profile_url = 'http://qbic.uni-tuebingen.de/'
}
singularity {
enabled = true
cacheDir = '/nfsmounts/container'
}
process {
resourceLimits = [
memory: 1992.GB,
cpus: 128,
time: 720.h
]
executor = 'slurm'
queue = 'qbic'
scratch = 'true'
}
params {
igenomes_base = '/nfsmounts/igenomes'
max_memory = 1992.GB
max_cpus = 128
max_time = 720.h
}
/*
* By default the nf-co2footprint plugin is not activated. To activate it, please add
* ````
* plugins {
* id 'nf-co2footprint@<VERSION>'
* }
* ```
* in your config, or use the
* `-plugins nf-co2footprint@<VERSION>` parameter in your nextflow call.
*/
co2footprint {
// Defines the timestamp model that is used as a suffix of the file
def co2_timestamp = new java.util.Date().format( 'yyyy-MM-dd_HH-mm-ss')
// File parameters
if (params.containsKey('outdir')) {
traceFile = "${params.outdir}/pipeline_info/co2footprint_trace_${co2_timestamp}.txt"
reportFile = "${params.outdir}/pipeline_info/co2footprint_report_${co2_timestamp}.html"
summaryFile = "${params.outdir}/pipeline_info/co2footprint_summary_${co2_timestamp}.txt"
}
// Standard parameters
location = 'DE'
pue = 1.3
}
Pipeline configs
// Profile config names for nf-core/configs
params {
// Specific nf-core/configs params
config_profile_contact = 'Friederike Hanssen (@FriederikeHanssen)'
config_profile_description = 'nf-core/sarek CFC profile provided by nf-core/configs'
}
// Specific nf-core/sarek process configuration
process {
withName:'StrelkaSingle|Strelka|StrelkaBP|MantaSingle|Manta' {
cpus = { check_resource( 20 * task.attempt) }
memory = { check_resource( 59.GB * task.attempt) }
}
withName:'MSIsensor_scan|MSIsensor_msi' {
memory = { check_resource( 55.GB * task.attempt ) }
}
withName:BamQC {
memory = { check_resource( 372.GB * task.attempt) }
}
withName:MapReads{
cpus = { check_resource( 20 * task.attempt ) }
memory = { check_resource( 59.GB * task.attempt) }
}
}
def check_resource(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
else if (obj.getClass() == java.lang.Integer)
return Math.min(obj, params.max_cpus as int)
else
return obj
} catch (all) {
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"
}
}