/*
 * -------------------------------------------------
 *  nf-core/pgdb Nextflow config file
 * -------------------------------------------------
 * Default config options for all environments.
 */

// Global default params, used in configs
params {

  // process flag variables
  ncrna = false
  pseudogenes = false
  altorfs = false
  vcf = false
  cbioportal = false
  cosmic = false
  cosmic_celllines = false
  ensembl = false
  gnomad = false
  add_reference = true

  // Output results
  outdir = './results'

  // Clean database options
  clean_database = false
  minimum_aa = 6
  add_stop_codons = true

  // data download variables
  cosmic_user_name = null
  cosmic_password = null

  // config files
  ensembl_downloader_config = "$projectDir/conf/ensembl_downloader_config.yaml"
  ensembl_config = "$projectDir/conf/ensembl_config.yaml"
  cosmic_config = "$projectDir/conf/cosmic_config.yaml"
  cbioportal_config = "$projectDir/conf/cbioportal_config.yaml"
  protein_decoy_config = "$projectDir/conf/protein_decoy.yaml"

  // ENSEMBL parameters
  ensembl_name = 'homo_sapiens'

  /* Biotype groups according to:
   * https://www.ensembl.org/Help/Faq?id=468 and
   * http://vega.archive.ensembl.org/info/about/gene_and_transcript_types.html
   */

  biotypes = [
    'protein_coding': "protein_coding,polymorphic_pseudogene,non_stop_decay,nonsense_mediated_decay,IG_C_gene,IG_D_gene,IG_J_gene,IG_V_gene,TR_C_gene,TR_D_gene,TR_J_gene,TR_V_gene,TEC",
    'pseudogene': "pseudogene,IG_C_pseudogene,IG_J_pseudogene,IG_V_pseudogene,IG_pseudogene,TR_V_pseudogene,TR_J_pseudogene,processed_pseudogene,rRNA_pseudogene,transcribed_processed_pseudogene,transcribed_unitary_pseudogene,transcribed_unprocessed_pseudogene,translated_unprocessed_pseudogene,unitary_pseudogene,unprocessed_pseudogene,translated_processed_pseudogene",
    'ncRNA': "lncRNA,Mt_rRNA,Mt_tRNA,miRNA,misc_RNA,rRNA,retained_intron,ribozyme,sRNA,scRNA,scaRNA,snRNA,snoRNA,vaultRNA",
	]

  // vcf-to-proteindb parameters
  vcf = false
  vcf_file = false
  cosmic_cancer_type = 'all'
  cosmic_cellline_name = 'all'
  cbioportal_study_id = 'all'
  cbioportal_accepted_values = 'all'
  cbioportal_filter_column = 'CANCER_TYPE'
  af_field = ""              // set to empty when AF_field does not exist in the INFO filed or filtering on AF is not desired


  // Output parameters
  final_database_protein = "final_proteinDB.fa"

  // Decoy options
  decoy_prefix = "Decoy_"
  decoy = false
  decoy_method = "decoypyrat"
  decoy_enzyme = "Trypsin"

  // gencode download parameters
  gencode_url = "ftp://ftp.ebi.ac.uk/pub/databases/gencode/Gencode_human/release_19"
  gnomad_file_url =  "gs://gnomad-public/release/2.1.1/vcf/genomes/gnomad.genomes.r2.1.1.sites.*.vcf.bgz"
  gnomad_file_url =  "gs://gnomad-public/release/2.1.1/vcf/exomes/gnomad.exomes.r2.1.1.sites.vcf.bgz" // use for testing the pipeline, smaller file - only exomes

  publish_dir_mode = 'copy'

  // Boilerplate options
  email = false
  email_on_fail = false
  max_multiqc_email_size = 25.MB
  plaintext_email = false
  monochrome_logs = false
  help = false
  tracedir = "${params.outdir}/pipeline_info"
  custom_config_version = 'master'
  custom_config_base = "https://raw.githubusercontent.com/nf-core/configs/${params.custom_config_version}"
  hostnames = false
  config_profile_name = null
  config_profile_description = null
  config_profile_contact = null
  config_profile_url = null
  validate_params = true
  show_hidden_params = false
  schema_ignore_params = 'biotypes'

  // Defaults only, expecting to be overwritten
  max_memory = 128.GB
  max_cpus = 16
  max_time = 240.h

}

// Container slug. Stable releases should specify release tag!
// Developmental code should specify :dev
process.container = 'nfcore/pgdb:1.0.0'

// Load base.config by default for all pipelines
includeConfig 'conf/base.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 {
  conda {
    docker.enabled = false
    singularity.enabled = false
    podman.enabled = false
    shifter.enabled = false
    charliecloud = false
    conda.createTimeout = '1 h'
    process.conda = "$projectDir/environment.yml"
  }
  debug { process.beforeScript = 'echo $HOSTNAME' }
  docker {
    docker.enabled = true
    singularity.enabled = false
    podman.enabled = false
    shifter.enabled = false
    charliecloud.enabled = false
    // Avoid this error:
    //   WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.
    // Testing this in nf-core after discussion here https://github.com/nf-core/tools/pull/351
    // once this is established and works well, nextflow might implement this behavior as new default.
    docker.runOptions = '-u \$(id -u):\$(id -g)'
  }
  singularity {
    docker.enabled = false
    singularity.enabled = true
    podman.enabled = false
    shifter.enabled = false
    charliecloud.enabled = false
    singularity.autoMounts = true
  }
  podman {
    singularity.enabled = false
    docker.enabled = false
    podman.enabled = true
    shifter.enabled = false
    charliecloud = false
  }
  shifter {
    singularity.enabled = false
    docker.enabled = false
    podman.enabled = false
    shifter.enabled = true
    charliecloud.enabled = false
  }
  charliecloud {
    singularity.enabled = false
    docker.enabled = false
    podman.enabled = false
    shifter.enabled = false
    charliecloud.enabled = true
  }
  test { includeConfig 'conf/test.config' }
  test_full { includeConfig 'conf/test_full.config' }
  dev { includeConfig 'conf/dev.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']

timeline {
  enabled = true
  file = "${params.tracedir}/execution_timeline.html"
}
report {
  enabled = true
  file = "${params.tracedir}/execution_report.html"
}
trace {
  enabled = true
  file = "${params.tracedir}/execution_trace.txt"
}
dag {
  enabled = true
  file = "${params.tracedir}/pipeline_dag.svg"
}

manifest {
  name = 'nf-core/pgdb'
  author = 'Husen M. Umer & Yasset Perez-Riverol'
  homePage = 'https://github.com/nf-core/pgdb'
  description = 'Proteogenomics database creation workflow using pypgatk framework. '
  mainScript = 'main.nf'
  nextflowVersion = '>=20.04.0'
  version = '1.0.0'
}

// 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
    }
  }
}
