// ***************** // Autometa Nextflow Configuration // Default config options for all compute environments // ***************** manifest { name = "autometa" author = "Jason C. Kwan Lab" homePage = "https://github.com/KwanLab/Autometa" defaultBranch = "main" description = "Autometa: Automated Extraction of Microbial Genomes from Shotgun Metagenomes" doi = "https://doi.org/10.1093/nar/gkz148" mainScript = "main.nf" nextflowVersion = ">=21.04.0" version = "2.2.1" } // Global default params, used in configs params { /* * ------------------------------------------------- * Change runtime * ------------------------------------------------- */ use_run_name = false debug = false mock_test = false autometa_image_tag = manifest.version //default docker image version is same as version in manifest, above /* * ------------------------------------------------- * Parallelization * ------------------------------------------------- */ // Input options input = null // samplesheet path (.csv) outdir = "autometa-nxf-output" /* * ------------------------------------------------- * Taxonomy-aware data subsetting * ------------------------------------------------- */ taxonomy_aware = false single_db_dir = null nr_dmnd_dir = null prot_accession2taxid_gz_dir = null taxdump_tar_gz_dir = null large_downloads_permission = false binning_starting_rank = "superkingdom" // choices: "superkingdom", "phylum", "class", "order", "family", "genus", "species" /* * ------------------------------------------------- * Binning Parameters * ------------------------------------------------- */ length_cutoff = 3000 kmer_size = 5 norm_method = "am_clr" pca_dimensions = 50 embedding_method = "bhsne" embedding_dimensions = 2 kingdom = "bacteria" clustering_method = "dbscan" classification_method = "decision_tree" classification_kmer_pca_dimensions = 50 completeness = 20.0 purity = 90.0 gc_stddev_limit = 25.0 cov_stddev_limit = 5.0 unclustered_recruitment = false /* * ------------------------------------------------- * Boilerplate options * ------------------------------------------------- */ publish_dir_mode = 'copy' email = null email_on_fail = null plaintext_email = null monochrome_logs = false help = false validate_params = true show_hidden_params = null schema_ignore_params = 'genomes,modules' enable_conda = false singularity_pull_docker_container = null // Config options custom_config_version = 'master' custom_config_base = "https://raw.githubusercontent.com/nf-core/configs/${params.custom_config_version}" hostnames = [:] config_profile_description = null config_profile_contact = null config_profile_url = null config_profile_name = null // Max resource options // Defaults only, expecting to be overwritten max_memory = '16.GB' max_cpus = 4 max_time = '240.h' } params.tracedir = "${params.outdir}/trace" // Load base.config by default for all pipelines includeConfig 'conf/base.config' // Load modules.config for DSL2 module specific options includeConfig 'conf/modules.config' // Load nf-core custom profiles from different Institutions try { includeConfig "${params.custom_config_base}/nfcore_custom.config" } catch (Exception e) { System.err.println("WARNING: Could not load nf-core/config profiles: ${params.custom_config_base}/nfcore_custom.config") } profiles { debug { process.beforeScript = 'echo $HOSTNAME' } standard { process.executor = "local" docker.enabled = true docker.userEmulation = true singularity.enabled = false podman.enabled = false shifter.enabled = false charliecloud.enabled = false } slurm { process.executor = "slurm" // NOTE: You can determine your slurm partition (e.g. process.queue) with the `sinfo` command process.queue = "queue" docker.enabled = true docker.userEmulation = true singularity.enabled = false podman.enabled = false shifter.enabled = false charliecloud.enabled = false executor { queueSize = 8 } } conda { params.enable_conda = true docker.enabled = false singularity.enabled = false podman.enabled = false shifter.enabled = false charliecloud.enabled = false } docker { docker.enabled = true docker.userEmulation = true singularity.enabled = false podman.enabled = false shifter.enabled = false charliecloud.enabled = false } singularity { singularity.enabled = true singularity.autoMounts = true docker.enabled = false podman.enabled = false shifter.enabled = false charliecloud.enabled = false } podman { podman.enabled = true docker.enabled = false singularity.enabled = false shifter.enabled = false charliecloud.enabled = false } shifter { shifter.enabled = true docker.enabled = false singularity.enabled = false podman.enabled = false charliecloud.enabled = false } charliecloud { charliecloud.enabled = true docker.enabled = false singularity.enabled = false podman.enabled = false shifter.enabled = false } test { includeConfig 'conf/test.config' } test_full { includeConfig 'conf/test_full.config' } } // Export these variables to prevent local Python/R libraries from conflicting with those in the container env { PYTHONNOUSERSITE = 1 R_PROFILE_USER = "/.Rprofile" R_ENVIRON_USER = "/.Renviron" } // Capture exit codes from upstream processes when piping process.shell = ['/bin/bash', '-euo', 'pipefail'] def trace_timestamp = new java.util.Date().format( 'yyyy-MM-dd_HH-mm-ss') timeline { enabled = true file = "${params.outdir}/trace/execution_timeline_${trace_timestamp}.html" } report { enabled = true file = "${params.outdir}/trace/execution_report_${trace_timestamp}.html" } trace { enabled = true file = "${params.outdir}/trace/execution_trace_${trace_timestamp}.txt" } dag { enabled = true file = "${params.outdir}/trace/pipeline_dag_${trace_timestamp}.svg" } // Function to ensure that resource requirements don't go beyond // a maximum limit def check_max(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 else return obj } catch (all) { 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 else return obj } catch (all) { 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) { println " ### ERROR ### Max cpus '${params.max_cpus}' is not valid! Using default value: $obj" return obj } } }